好的軟件:
可維護性
可測試性
可靠性
性能
簡潔
可移植性
華為 Program SMaRT 定義
高效
可移植
簡潔
可維護
可靠
可測試
編程規范
排版:
原則
團隊一致
規則:
- 在不同概念之間增加空行
- 將邏輯緊密相關的代碼放在一起
- 控制一行的寬度,不要超過120個字符
- 控制一行的寬度,在不同的概念間增加空格
- 控制采用縮進來區分不同層次的概念(4個空格)
建議:
- 將局部變量的作用域最小化
- if,for,do,while,case,swich,default等語句自占一行,且if,for,do,while必須加括號
- 控制文件的長度,最好不要超過500行
注釋:
盡量用代碼來解釋自己
1. 注釋解釋代碼的意圖
2. 保證注釋與代碼一致
3. 注釋與代碼相鄰,上下方
4. 不要用注釋保留廢棄代碼
5. 不要用注釋記錄修改日志
命名
原則:
團隊為包、類、方法、變量取一個號名字
規則:
- 禁止使用魔鬼數字
- 常量命名,由全大寫單詞組成,單詞間用下划線分隔,且使用static final修飾
- 變量、屬性命名,使用名詞,並采用首字母小寫的駝峰命名法
- 方法的命名,用動詞和動賓結構,采用首字母小寫的駝峰命名法
格式如下:
get+非布爾屬性名()
is+布爾屬性名()
set+屬性名()
has+名詞/形容詞()
動詞()
動詞+賓語() - 類和接口的命名,采用首字母大寫的駝峰命名法
- 包的命名,由一個或若干個單詞組成,所有的字母均為小寫
建議:
數組聲明用 int [] index ,而不用 int index []
變量和類型
原則:
謹慎使用靜態成員變量
規則:
1. 避免隨意進行類型強制轉換,應改善設計,或在轉換前用instanceof進行判斷
2. 需要精確計算時不要使用float和double,建議用long,BigDecimal等
3. 不能用浮點數作為循環變量,精度問題會導致錯誤
4. 浮點型數據判斷相等不能直接使用==,做減法,取絕對值和極小值對比,double用1E-6對比
5. 避免同一個局部變量在前后表達不同的含義
6. 不要在單個的表達式中對相同的變量賦值超過一次
方法
原則:
- 短小
- 單一,一個方法僅做一件事情
- 單一抽象層次原則
- 命令與查詢職責分離
規則:
- 不要把方法的入參當作工作變量/臨時變量,除非特別需要(在方法里定義一個臨時變量運算)
- 使用類名調用靜態方法,而不要使用實例或表達式來調用
建議
- 應明確規定對接口方法參數的合法性檢查 由 調用者負責還是由接口方法本身負責
- 謹慎使用可變數量參數的方法
- 對接方法的參數個數不宜過多
包、類、接口
原則:
- 類和接口的設計應該遵循面向對象SOLID設計原則
- 類的設計應遵循迪米特法則
- 類的設計應遵循 Tell,Don't ask 原則
規則
- 除提供給外部使用的全局變量外,應盡量避免類成員變量被外部直接訪問
- 避免在無關的變量或無關的概念之間重用名字,避免隱藏(hide)、遮蔽(shadow)和遮蔽(obscure)
- 不要在父類的構造方法中調用可能被子類覆蓋的方法
- 覆寫equals方法時,應同時覆寫hashCode方法
- 同一次運行中,同一個對象如果equals方法中信息沒變,多次調用hashCode返回值必須相同
- 兩對象調用equals方法相同,則他們的hashCode方法也必須返回相同值
- 兩對象調用equals方法不同,他們調用hashCode方法,不要求返回值不同
異常
原則:
只針對真正異常的情況才使用exception機制
規則
- 對可恢復的情況使用受檢異常(checked exception),對編程錯誤使用運行時異常(runtime exception)
- 不要忽略異常
- 方法注釋和文檔中要包含所拋出異常的說明
- 方法拋出的異常,應該與本身的抽象層次相對應
- 在finally 塊中不要使用return、break或continue使finally塊非正常結束
- 不要直接捕獲受檢異常的基類Exception
建議
- 對第三方API拋出的大量各類異常進行封裝
- 一個方法不應該拋出太多類型的異常
語言特性
規則
- 運算和表達式 不要寫復雜的表達式,將難懂的語句封裝到方法里,用方法名自注釋
- 運算時應避免產生溢出 BigInteger
建議
運算采用括號明確運算的優先級
控制語句
- 在switch語句的每個case、和default中都放置一條break語句
- 采用for-each代替傳統的for循環
泛型
在集合中使用泛型
其他
新代碼不要使用已標注為@deprecated 的方法
測試
基本概念
定義:測試是一個包含計划,准備和測量活動的過程,其目的是確認
被測系統的特性,並指出需求和實現之間的差異。
目的
發現缺陷
增強對質量的信心
為決策者提供信息
預防缺陷
分類:
- 是否需要執行: 靜態測試、動態測試
- 測試不同階段:單元測試,系統測試,集成測試,驗收測試
- 是否需要了解內部結構:黑盒測試,白盒測試
靜態測試方法:
1. 代碼檢查工具檢查
2. 走讀
3. 檢視
動態測試方法:構造測試實例,執行程序,分析輸出結果
1. 等價類划分
2. 邊界值分析
3. 決策表分析
4. 判定條件覆蓋
5. 條件組合覆蓋
單元測試
對模塊做測試,叫單元測試
軟件開發生命周期
需求分析--架構設計--規格說明--編碼--單元測試--集成測試--操作系統測試
Junit
單元測試框架
Test 測試接口
TestCase 測試集 多個測試
TestSuite 測試用例、套件 只有一個