1. 軟體復雜性有哪幾類軟體復雜性度量模型應遵循哪些基本原則
軟體復雜性有哪幾類?軟體復雜性度量模型應遵循哪些基本原則?
解答: K.Magel從六個方面描述軟體復雜性: ① 理解程序的難度;
② 改錯及維護耐姿晌程序的難度; ③ 向他人解釋程序的難度; ④ 按指定方法修改程序的難度;冊茄 ⑤ 根據設計文檔編寫程序的工作量; ⑥ 執行程序時需要資源的程度。
軟體復雜性度量模型應遵循的基本原則:
⑴ 軟體復雜性與程序大小的關系不是線性的; ⑵ 控制結構復雜的程序較復雜; ⑶ 數據結構復雜的程序較復雜; ⑷ 轉向語句使用不當的程序較復雜;
⑸ 循環結構比選擇結構復雜,選擇結構又比順序結構復雜;
⑹ 語句、數據、子程序和模塊在程序中的次序對軟體復雜性都有影響; ⑺ 全程變數、非局部變數較多時程序較復雜; ⑻ 參數按地址傳遞比按值傳遞更復雜; ⑼ 函數副作用比顯式參數傳遞更昌鋒難以琢磨;
⑽ 具有不同作用的變數共用一個名字時較難理解; ⑾ 模塊間或過程間聯系密切的程序較復雜; ⑿ 嵌套深度越深程序越復雜。
2. 軟體工程的復雜性是指什麼 A程序復雜B問題復雜C控制復雜D數據復雜,這是一道選擇題,求助啊
軟體工程的復雜性是指程序復雜。
復雜性是指理解和處理軟體的難易程度。是用來衡量程序非結構化程度的一個標准,非結構成分降低了程序的質量皮段攔,增加了代碼的維護難度,使程序難於理解。因此,復雜性高意味著非結構化程度高,難以模塊化和維護。實際上,消除了一個錯誤有時會引起其他的錯誤。
(2)怎樣理解軟體復雜性擴展閱讀:
在軟體設計中,有一條基本原則「簡單就是可靠」。與功能的增多或增強相伴的是不斷燃胡升級與補丁。已經有若干種軟體復雜性的度量方法可供參考,其中McCabe QA是比較出燃塌色和實用的方法,它能夠計算出多種軟體復雜性,由此可對軟體進行檢查、分析和查明那些可能導致錯誤的代碼。
復雜性的優點是能衡量非結構化程度,反映代碼的質量,預測代碼維護量,輔助模塊劃分,與所用的高級程序設計語言類型無關。
3. 軟體復雜度的復雜度的種類
有模塊、類和程序三類復雜度。模塊復雜度包含了關於模塊的復雜度信息;類復雜度是針對那些使用McCabe面向對象特性的程序,它包含了關於類的復雜度信息;程序復雜度包含了關於程序的復雜度信息。
集成復雜度報告
對應於三種復雜度的是三種復雜度報告。如果一個報告的復雜度信息不只一種,那麼就把這些復雜度信息組合成新的報告。
集成復雜度信息只收集一個部件及其下級的信息。例如:如果一個程序級報告包含一個類復雜度,那麼只報告組成程序的類的信息,而不包含類組成的信息。 McCabe復雜度是對軟體結構進行嚴格的算術分析得來的,實質上是對程序拓撲結構復雜性的度量,明確指出了任務復雜部分。McCabe復雜度包括:圈復雜度、基本復雜度、模塊設計復雜度、設計復雜度、集成復雜度、行數、規范化復雜度、全局數據復雜度、局部數據復雜度、病態數據復雜度。
McCabe復雜度的用途
在軟體工程中,有三種使用McCabe復雜性度量的方式。
作為測試的輔助工具。McCabe復雜性度量的結果等於通過一個子程序的路徑數,因而需要設計同樣多答余姿的測試案例以覆蓋所有的路徑。如果測試案例數小於復雜性數,則有三種情況一是需要更多的測試;二是某些判斷點可以去掉;三是某些判毀清斷點可用插入式代碼替換。
作為程序設計和管理指南。在軟體開發中,需要一種簡單的方式指出可能出問題的子程序。保持子程序簡單清絕的通用方法是設置一個長度限制,例如50行或2頁,但這實際上是在缺乏測試簡明性的有效方法時無可奈何的替代方法。不少人認為McCabe度量就是這樣一種簡明性度量。但是要注意,McCabe度量數大的程序,不見得結構化就不好。例如,Case語句是良結構的,但可能有很大的McCabe度量數(依賴於語句中的分支數),這可能是由於問題和解決方案所固有的復雜性所決定的。使用者應當自己決定如何使用McCabe度量所提供的信息。
作為網路復雜性度量的一種方法。Hall和Preiser提出了一種組合網路復雜性度量,用於度量可能由多個程序員組按模塊化原理建立的大型軟體系統的復雜性。他們提出的組合度量公式為
式中 C1,...,Ck是各個模塊的復雜性;CN是網路復雜性;W1和W2為權值。
McCabe復雜度即可用於度量各個模塊的復雜性,也可用於度量網路復雜性。 圈復雜度是用來衡量一個模塊判定結構的復雜程度,數量上表現為獨立路徑的條數,即合理的預防錯誤所需測試的最少路徑條數,圈復雜度大說明程序代碼可能質量低且難於測試和維護,經驗表明,程序的可能錯誤和高的圈復雜度有著很大關系。
獨立路徑組成的集合稱為基本路徑集合,獨立路徑數就是指基本路徑集合中路徑的數量。基本路徑集合不是唯一的,獨立路徑數也就不唯一。因此,圈復雜度是最大獨立路徑數。
計算方法
節點是程序中代碼的最小單元,邊代表節點間的程序流。如果一個模塊流程圖有e條邊n個節點,它的圈復雜度V(G)=e-n+2,典型的V(G)max=10。圖1中示例的圈復雜度是2。
優點
避免軟體中的錯誤傾向;指出極復雜模塊,這樣的模塊也許可以進一步細化;度量測試計劃,確定測試重點;在開發過程中通過限製程序邏輯,指導測試過程;指出將要測試的區域;幫助測試人員確定測試和維護對象;與所用的高級程序設計語言類型無關。
應用
圈復雜度指出為了確保軟體質量應該檢測的最少基本路徑的數目。在實際中,測試每一條路經是不現實的,測試難度隨著路徑的增加而增加。但測試基本路徑對衡量代碼復雜度的合理性是很必要的。McCabe & Associates建議圈復雜度到10,因為高的圈復雜度使測試變得更加復雜而且增大了軟體錯誤產生的概率。
提示:
圈復雜度度量是測量在一個軟體模塊中的分支數目,在所有的開發周期中都要使用。
圈復雜度度量以軟體的結構流程圖為基礎。控制流程圖描述了軟體模塊的邏輯結構。一個模塊在典型的語言中是一個函數或子程序,有一個入口和一個出口,也可以通過調用/返回機制設計模塊。軟體模塊的每個執行路徑,都有與從模塊的控制流程圖中的入口到出口的節點相符合的路徑。
「Cyclomatic」來源於非直接連接基本測試周期的數目,更重要的是,也通過直接相連的圖表給出獨立路徑的數目。通過圖表的相關性,一個節點可到達另一個節點。
圈復雜度度量也可作為模塊基本流程圖路徑的數目,其重點在於模塊線形組合後,所產生的路徑數目是最小的。
對圈復雜度的限制
現在有許多好方法可以用來限制圈復雜度。過於復雜的模塊容易出錯,難於理解、測試、更正,所以應當在軟體開發的各個階段有意識地限制復雜度,許多開發者已經成功地實現把對軟體復雜度的限製作為軟體項目的一部分,盡管在確切的數目上略微有些爭議。最初支持的數目是10,現在支持數目可達15。但是,只應當在條件較好的情況下使數目大於10,例如開發者非常有經驗,設計合乎正式標准,使用現代化的程序語言、結構程序、代碼預排和先進的測試計劃。換句話說,開發團隊可以選擇超過10的限制數目,但是必須根據經驗進行一些取捨,把精力花在比較復雜的模塊上。 基本復雜度是用來衡量程序非結構化程度的,非結構成分降低了程序的質量,增加了代碼的維護難度,使程序難於理解。因此,基本復雜度高意味著非結構化程度高,難以模塊化和維護。實際上,消除了一個錯誤有時會引起其他的錯誤。
計算方法
將圈復雜度圖中的結構化部分簡化成一個點,計算簡化以後流程圖的圈復雜度就是基本復雜度。
優點
衡量非結構化程度;反映代碼的質量;預測代碼維護量,輔助模塊劃分;與所用的高級程序設計語言類型無關。
應用
當基本復雜度為1,這個模塊是充分結構化的;當基本復雜度大於1而小於圈復雜度,這個模塊是部分結構化的;當基本復雜度等於圈復雜度,這個模塊是完全非結構化的。
Mole Design Complexity (iv(G))模塊設計復雜度
模塊設計復雜度是用來衡量模塊判定結構,即模塊和其他模塊的調用關系。軟體模塊設計復雜度高意味模塊耦合度高,這將導致模塊難於隔離、維護和復用。
計算方法
模塊設計復雜度是從模塊流程圖中移去那些不包含調用子模塊的判定和循環結構後得出的圈復雜度,因此模塊設計復雜度不能大於圈復雜度,通常是遠小於圈復雜度。
優點
衡量模塊對其下層模塊的支配作用;衡量一個模塊到其子模塊進行集成測試的最小數量;定位可能多餘的代碼;以復雜的計算邏輯和設計來區分模塊;是設計復雜度(S0)和集成復雜度(S1)計算的基礎;與所用的高級程序設計語言類型無關。 設計復雜度以數量來衡量程序模塊之間的相互作用關系,它提供了系統級模塊設計復雜度的概況,有助於衡量進行自底向上集成測試的效果,而且提供了全面衡量程序設計規格和復雜度的數據,不反映獨立模塊的內部情況。高設計復雜度的系統意味著系統各部分之間有著復雜的相互關系,這樣系統將難以維護。
S0是程序中所有模塊設計復雜度之和,計算公式如下:
優點
可應用於完整的軟體,也可應用於任何子系統;衡量代碼的質量;指出一個模塊整體的復雜度,反映了每個模塊和其內部模塊的控制關系;揭示了程序中模塊調用的復雜度;有助於集成復雜度的計算。 集成復雜度是為了防止錯誤所必須進行的集成測試的數量表示,另一種說法是程序中獨立線性子樹的數目,一棵子樹是一個有返回的調用序列。就像圈復雜度是測試路徑的數目,而集成復雜度是程序或其子系統的獨立線性子樹。
計算方法
一個程序的集成復雜度和一個模塊的圈復雜度是非常相似的,必須計算對程序進行完全測試所需集成測試的數目。S1的計算公式:
S1=S0-N+1
N是程序中模塊的數目。
優點
有助於集成測試的實施;量化集成測試工作且反映了系統設計復雜度;有助於從整體上隔離系統復雜度。
Number of Lines (nl)行數
行數是模塊中總的行數,包括代碼和注釋。
優點:
計算簡單;與所用的高級程序設計語言類型無關;指出了模塊的行數(即模塊的規模),規模小的模塊易於理解和維護。 規范化復雜度是圈復雜度除以行數。
計算方法
nv=v(G)/nl
優點
與所用的高級程序設計語言類型無關;定義那些有著顯著判定邏輯密度的模塊,這些模塊相對於其他常見規范模塊需要做更多的維護工作。 全局數據復雜度(需有McCabe Data)量化了模塊結構和全局數據變數的關系,它說明了模塊對外部數據的依賴程度,同時度量了全局數據的測試工作,也描述了模塊之間的耦合關系,能反映潛在的維護問題。
對於如何跟蹤全局數據使用情況的更多信息,可以參考《McCabe Data in Using McCabe IQ Add-Ons》。 局部數據復雜度(需有McCabe Data)量化了模塊結構和用戶局部數據變數的關系,同時度量了局部數據的測試工作。
我們能夠使用McCabe Data的數據字典選擇單獨的數據元素,指出每個數據元素具體的數據類型。局部數據復雜度還提供了其他的數據選擇准則,量化了每個模塊中相應數據對模塊控制結構的影響。
關於數據字典的更多信息,參考文檔《McCabe Data in Using McCabe IQ Add-Ons.》。 病態數據復雜度衡量一個模塊包含的完全非結構化成份的程度,標出向循環內部跳入的問題代碼,而這些部分具有最大的風險度,通常需要重新設計。
計算方法
所有的非結構部分除去向循環內跳入的結構,轉化為線結構,病態復雜度就等於簡化以後流程圖的圈復雜度。
優點
與所用的高級程序設計語言類型無關;指出了可靠性的問題,降低了維護風險;幫助識別極不可靠的軟體。
(Halstead 復雜度)
McCabe QA能夠為所選擇的語言產生Halstead Metrics復雜度。Halstead復雜度是以程序中出現的運算符和運算元為計數對象,以它們出現的次數作為計數目標(直接測量指標),然後據以計算出程序容量、工作量。
優點
不要求對程序結構進行深層次分析;能夠預測錯誤率;預測維護工作量;有利於項目規劃,衡量所有程序的復雜度;計算方法簡單;與所用的高級程序設計語言類型無關;眾多研究結構研究表明Halstead復雜度對於預測程序工作計劃和程序的Bug非常有用。
Line Count復雜度描述了Line Count復雜度並列出了它們的優點
Line Count Metrics(Line Count復雜度)
優點
軟體物理規模的度量;定義了具體的Line Count數據,例如注釋行和空行;協助指出難於理解的模塊。
4. 軟體復雜性有哪幾類軟體復雜性度量模型應遵循哪些基本原則
K.Magel從六個方面描述軟體復雜性:
① 理解程序的難度;② 改錯及維護程序的難度;③ 向他人解釋程序的難度;④ 按指定方首耐法修改程序的難度;⑤ 根據設計文檔編寫程序的工作量;⑥ 執行程序時需要資源的程度。
軟體復雜性度量模型應遵循的基本原則:
(1)軟體復雜性與程序大小的關系不是線性的;(2)控制結構復雜的程序較復雜;(3)數據結構復雜的程序較復雜;(4)轉向語句使用不當的程序較復雜;(5)循環結構比選擇結構復雜,選擇結構又比順序結構復雜;(6)語句、數據、子程序和模塊在程序中的次序對軟體復雜性都者晌春有影響;(7)全程變數、非局部變數較多時程序較復雜;(8)參數按地址傳遞比按值傳遞更復雜;(9)函數副作用比顯式參數傳遞更難以琢磨;(10)具有不同作用的變數共用一個名字時較難理解;(11)模塊間或過程間聯系密切的程序較復雜;(12)嵌套深度越深程序越復雜。
最典型的兩種程序復雜性度量的方法中,McCabe環路復雜性度量就是針對基本原則(2)制定的度量模型謹和;Halstead度量是針對程序中操作符和操作數的出現頻度而制定的度量模型。
5. 什麼是軟體的復雜性
一個比較模糊的概念,也說不出來個具體,沒有特別明顯的想法。因為用戶與開發者思維的不一致,用戶很難將他的意思很清晰的傳達給開發者。不論是系統軟體,還是應用軟體,或者手機app,通常這種情況下,開發者也只能藉助些工具,例如:AxureRP圖形界面工具,Word文檔配合插圖等方式,按照開發者的理解設計為原型系統,再同客戶進行多次的歷簡探討。開肢帆褲發過程中,一定轎世要在系統的早期就盡可能的降低問題域,使系統逐漸明朗。你這個問題也不怎麼好回答,也沒有個全面的回答,幾個或者十幾個百個人共同研發出來的,用戶要單個人弄透,軟體跟音樂一樣,都是一通百通的