如何评价软件写的好还是坏?
軟件自身是一種固化的思維,因此從本質上來看,軟件是不可度量的。
但這并不意味著軟件不需要度量,而只是說軟件中的度量大多都有一定限度。
應用各種度量數據的時候一旦跨過這種限度,結果就會適得其反。
?
在這篇文章里,我們將考查一下現有的,對軟件進行度量的方法(注意:這篇里主要考察別人的方法,不是我自己的)。
可能不全面,不足的地方歡迎大家進行補充。
對軟件“直觀可見的質量屬性”的度量比較簡單,比如:Bug率,性能等,這里就不提了。
這里主要關注的是軟件的內在的,不直觀可見的質量屬性。
?
- 圈復雜度
?
圈復雜度主要用于度量函數或方法,從《代碼大全》中可以找到圈復雜度的描述。
關于圈復雜度:Tom?McCabe曾經建議使用下面的方法來度量復雜度。在這一方法中為了計算復雜度首先要計算子程序中的決策點(decision?points),規則如下:
?
?
很多靜態分析工具都直接提供對圈復雜度的度量,而圈復雜度本身歧義性很小,是非常難得的指標,高于15的代碼基本很難看懂。
但圈復雜度更適合用于度量編碼的結果,對高層設計則不太適用。
?
- 響應集
?
響應集是指類的各個方法直接調用的函數數目。響應集無疑的應該盡可能的小,根據得墨忒耳法則:某個對象的任何方法都應該只調用屬于以下情形的方法。
? ? ? ? ?
class Demeter{
private:
A* a;
int func();
public:
//...
void example(B& b);
void Demeter::example(B& b)
{
C c;
int f = func(); //<---- 類自己的方法
b.invert(); //<----傳入參數的方法,當然參數本身也可能是函數
a = new A();
a->setActive();// <---創建的對象所擁有的方法
c.print(); // <---創建的,并歸自己所有的對象的方法
}
};
? ? ? ? ?---摘自《程序員修煉之道》
?
- 關系內聚性(H)
?
在度量包時可以用包內部類的數目除以包內類的總數,其比值用來表示包得內聚性。如果用R表示包內部得類關系數目,用N表示包內類總數。那么:
H?=?(R+1)/N
- 不穩定性(I)
不穩定性由輸入耦合度(Ca)與輸出耦合度(Ce)計算而來。
包得輸入耦合度是指處于包外部,但依賴于包內類的數目。
包得輸出耦合度是指包內部的依賴于包外部類的類數目。
這樣I?=?Ce?/?(Ca+?Ce)
?
- 抽象性(A)
?
包的抽象性用抽象類的數目和包中所有類的數目進行計算。
假如說包中類的總數是Nc,?抽象類的數目是Na?,那么抽象度A?=?Na/Nc
?
關系內聚性(H),不穩定性(H),抽象性(H)的進一步說明,請參見《敏捷軟件開發:原則,模式與實踐》一書。
?
這些度量指標無疑是有意義的,都可以用來評價軟件寫的好還是壞,但卻不解決這樣一個問題:
如果一個方案在關系內聚性(H),不穩定性(H),抽象性(H)上都有好的表現,復雜度有沒有提高?如果說復雜度因此而提高了,那么這種額外支出的復雜度值不值得?
如果我們認為復雜度是軟件的根本問題,那么在滿足需求的前提下,使軟件簡單化就是最關鍵的使命(比靈活性等重要)。既如此,究竟應該如何度量軟件的復雜度呢?
這是一個需要進一步展開的話題,我完善后會進一步和大家分享。
--------------------------------------------------------------
?
理想流 + 軟件 =?《完美軟件開發:方法與邏輯》
理想流 + 人生 = ??
理想流 + 管理 = ??
理想流 = 以概念和邏輯推演本質,追求真理。
轉載于:https://www.cnblogs.com/daoshi/archive/2012/01/15/2323190.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的如何评价软件写的好还是坏?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华硕飞行堡垒6怎么重做系统 华硕飞行堡垒
- 下一篇: SQL获取所有用户名,数据库名、所有表名