重構
周遭所見,皆是變易與衰敗
你應在何時進行重構
--不要動改動猶豫不決
重複非正交的設計
過時的設計
效能許多開發者不願意只是因為**不完全正確就撕毀**
現實世界的複雜情況
早重構,常重構
需要注意,如果無節制地撕毀大量**,你可能會發現自己處在比一開始更糟的位置上
如果無法立即進行重構,可以列出計畫,方便其他人知道
怎樣進行重構
不要試圖在重構的同時增加功能
在開始重構之前,確保你擁有良好的測試。
看到不合理的**,既要修正它,也要修正依賴它的每樣東西
易於測試的**
單元測試
針對合約進行測試
disign to test
編寫單元測試
1.說明怎樣使用你的模組的所有功能
2.用以構建回歸測試,以驗證未來對**的任何改動是否正確的一種手段
單元測試必須執行起來,並且經常執行他們
測試文化--你不好好測試,就是客戶測試
test your software,or your users will
測試是技術,更是文化
**的嚮導
don't use wizard code you don't understand
要了解你使用的**,自動工具生成的**
在專案開始之前
確定需求,只是聽取使用者的意見還不夠
啟動太快或者啟動太慢都是問題
需求之坑
完美,不是在沒有什麼需要增加,而是在沒有什麼需要去掉時達到的
需求很少存在表面,它們通常深深地埋藏在層層假定、誤解和政治手段的下面
don't gather requirements--dig for them
挖掘需求
政策檔案與需求檔案分開,並連線在一起
需求是一般陳述,並把政策資訊作為例子提供給開發者
只有人事部才能檢視員工檔案---只有得到授權的使用者可以訪問員工檔案
找到使用者為何要做特定事情的起因,而不是它們目前做這件事情的方式,特別重要
成為使用者
work with a user to think like a user
建立需求文件
捕捉需求的用例概念use case
用例模板
用例圖記住:不要做任何方法的奴隸,只要是與你的聽眾交流需求的最好的方法,你都可以加以使用
規定過度, 好的需求文件會保持抽象,最簡單的、能夠準確地反映商業需要的陳述時最好的
看遠些abstractions live longer than details
再抹一層薄薄的薄荷
防止被再增加乙個特性的大漩渦
維護乙個詞彙表
use a project glossary
把話說出來
把文件發布出來,便於所有參與者訪問,分發對需求文件特別有用
解開不可能解開的謎題
秘訣就在與確定真正的約束,而不是想想的約束,並在其中找出解決方法
有些約束時絕對的,有些則只是先入之見
自由度你必須挑戰任何先入之見,並評估它們是否是真實的,必須遵守的約束
don't think outside the box--find the box
一定有更容易的方法
很多時候,對需求的重新詮釋能讓整個問題全部消失,就像是戈爾迪斯結
你需要的只是真正的約束,令人誤解的約束,還有區分它們的智慧型
它必須以這種方式完成嗎
等你準備好--步驟自己控制好
有時猶豫的人會得以保全
listen to nagging doubts,start when you're ready
對疑慮或者感到勉強,要注意它。
是良好的判斷,還是拖延
構建原型,選擇可能有困難的進行概念驗證
規範陷阱
防止再次落入陷阱,就是編寫規範,但是有些事情用自然語言描述不清,可以嘗試做
some things are better done than described
應該傾向於把蒐集、設計以及實現視為同乙個過程-交付高質量的系統 的不同方面,
但是需要注意的是,隨著規範的增多,得到的回報也會遞減,甚至是負回報
做事情要考慮周圍環境,具體問題具體分析,可能適用不同的策略
圓圈與箭頭
盲目地採用任何技術,而不把它放進你的開發實踐和能力的環境中,這種方法肯定讓你失望
不要做形式的奴隸,抓住核心;所以對新的形式,要做好準備,把使用這些技術的第乙個專案
當作一種學習經驗
形式開發方法只是工具箱裡的又乙個工具,你覺得需要使用形式工具,那就採用它
但是要記住誰才是主任;不要變成方法的奴隸
昂貴的工具不一定能製作出更好的設計 expensive tools do not produce better designs
第八章 注重實效的專案
不要留破窗戶,再好的開發者被派到不重視質量的團隊,會發現自己很難保持修正瑣碎問題所需的熱情。
所以質量是乙個團隊的問題。 質量只可能源於全體成員都要做出的奉獻
交流, 團隊中的開發者必須相互交談,也便於每個人成長
不要重複自己
對於團隊中,要消除團隊成員之間重複的事情,否則會浪費,顯然良好的交流可以防止此事
正交性 -要圍繞功能,而不是工作職務進行組織,每個專案 每個功能都有對應的人員
自動化--確保一致和準確的一種很好的方式是使團隊所作的每件事情都自動化
知道何時停止繪畫--抵抗不斷畫下去的**
無處不在的自動化
一切都要自動化 ,don't use manual procedures
嘗試寫一些指令碼,使重複的事情自動化
無情的測試
test early.test often,test automatically
測試**比產品**還要多
coding ain't done. till all the tests run
測試什麼: 單元測試、整合測試、驗證和校驗、資源耗盡/錯誤及恢復、效能測試、可用性測試
怎樣測試:回歸測試、測試資料、演練gui系統、對測試進行俄式、徹底測試
徹底測試時利用覆蓋分析工具會監視你的**,追蹤那些**執行過,那些**沒有
test state converage,note code coverage
何時進行測試
任何產品**一旦存在,就需要進行測試
把網收緊,即乙個bug只抓一次
全都是寫
好記性不如爛筆頭
build documentation in,don't bolt it on
內部文件和外部文件
**中的註解
可執行的文件--例如:生成資料庫表的文件
極大的期望
gently exceed your user's expectatons
要溫和地超出使用者的期望
交流期望
跟客戶對它們預期的需求進行交流,並且在整個過程中進行溝通。但是絕不要忘了你的應用要解決的商業問題
額外的一英里
給它們的東西要比它們期望的多一點,比如:氣球式幫助或工具提示幫助、快捷鍵
、作用使用者手冊的補充材料的快速參考指南、彩色化、日誌檔案分析器、自動化安裝、用於檢查系統完整性的工具、
執行系統的多個版本以進行培訓的能力、為它們的機構定製的splash螢幕
傲慢與偏見
我們應該樂於挑戰,樂於使我們的專業知識廣為人知。
在你的作品上簽名,這是我編寫的,我對自己的工作負責。最後變成當別人看到你簽名時,應該
期望它時可靠的,用心編寫的
**法則--- 你要別人怎麼對你,你就怎麼對人
程式設計師修煉之道 從小工到專家
在專案開始之前 需求需要挖掘,而不僅僅是收集。找出使用者為何要做特定事情的原因,而不是他們目前做這件事情的方式。建立需求文件 把形式化的模板做備忘錄 好的需求文件會保持抽象 專案範圍的增大需要被記錄和可追溯,以及可評價 通過統計資訊 需求的收集和設計實現不是單向的線性關係,而是雙向關係。它們是 交付...
程式設計師修煉之道 從小工到專家
基本工具 構建自己的工具庫。使用原始碼控制。除錯bug 找到問題根源 可以快速 復現 bug。跟蹤。向別人解釋程式以找到問題所在。找bug範圍 先自己 確定無誤再找類庫或系統問題。不要固執的認為自己的 沒問題。不要假設,要驗證。注重實效的偏執 放棄寫出完美軟體的偏執。進行防禦性程式設計。合約。規定 ...
程式設計師修煉之道 從小工到專家
這本書的適用範圍可以從初學者到有經驗的程式設計師再到專案經理,作為一本偏向理論與思想的書,書中不可避免有些假大空的地方,再加上作者寫完本書的時間還在1999年,書中的很多方法與標準放在今天也已不再實用。但這些都不能掩蓋它的優秀之處,作者曾在本書完成十年後說過,如果這本書是放在現在編寫,1999年的那...