5 個常用的軟件質量指標

在軟件開發中,軟件質量是衡量軟件是否符合需求、標準的重要體現。除了 代碼質量外,影響軟件整體質量的因素還有很多。因此,要確保軟件的整體質量,就需要在各個環節嚴格控制。

本文列出了衡量軟件質量的5個最常用的指標。

1.? SLOC(Source Lines of Code,源代碼行)

計算代碼行數可能是最簡單的衡量指標,主要體現了軟件的規模,并為項目增長和規劃提供了相關數據。例如,如果每月統計一次代碼的行數,就可以繪制一個項目發展概覽圖。當然,由于存在項目重構或是設計階段等因素,這種方式并不太可靠,但是可以為項目的發展提供一個視角。

可以只統計邏輯代碼行(Source Logical Line of Code,SLLOC),這樣可以獲得稍準確的信息。邏輯代碼行不包含空行、單個括號行和注釋行。可以使用 Metrics工具來統計。

代碼行數不應該用來評估開發者的效率,否則,可能會產生重復、不可維護的或不專業的代碼。

2.? 每個代碼段/模塊/時間段中的bug數

要想實現更好的測試以及更高的可維護性,bug跟蹤是必不可少的。每個代碼段、模塊或時間段(天、周、月等)內的bug可以很容易通過工具統計出來(如 Mantis)。這樣,可以及早發現并及時修復。

Bug數可以作為評估開發者效率的指標之一,但必須注意,如果過分強調這種評估方法,軟件開發者和測試者可能會成為敵人。在生產企業中,要保證員工彼此之間的凝聚力。

為了更好的實現評估,可以根據重要性和解決成本將bug劃分為低、中、高三個級別。

3.? 代碼覆蓋率

在單元測試階段,代碼覆蓋率常常被拿來作為衡量測試好壞的指標,也用來考核測試任務完成情況。可以使用的工具也有很多,如 Cobertura等。

代碼覆蓋率并不能代表單元測試的整體質量,但可以提供一些測試覆蓋率相關的信息,可以和其他一些測試指標一起來使用。

此外,在查看代碼覆蓋率時,還需注意單元測試代碼、集成測試場景和結果等。

4.? 設計/開發約束

軟件開發中有很多設計約束和原則,其中包括:

  • 類/方法的長度
  • 一個類中方法/屬性的個數
  • 方法/構造函數參數的個數
  • 代碼文件中魔術數字、字符串的使用(魔術數字指直接寫在代碼中的具體數值,其他人難以理解數字的意義)
  • 注釋行比例等
代碼的可維護性和可讀性是很重要的,開發團隊可以選擇以上這些原則中的一個或全部,并通過一些自動化工具(如 maven pmd插件)來遵循這些原則,這將大大提高軟件產品的質量。

5.? 圈復雜度(Cyclomatic Complexity)

圈復雜度是用來衡量一個模塊判定結構的復雜程度,已經成為評估軟件質量的一個重要標準,能幫助開發者識別難于測試和維護的模塊,在成本、進度和性能之間尋求平衡。圈復雜度可以使用 pmd工具來自動化計算。

圈復雜度數量上表現為獨立路徑的條數,即合理的預防錯誤所需測試的最少路徑條數,圈復雜度大說明程序代碼可能質量低且難于測試和維護。

計算公式為:Cyclomatic Complexity = E - N + 2P

E:邊,代表節點間的程序流;
N:節點,程序中代碼的最小單元
P:出口節點


上圖中共8條邊,7個節點,因此圈復雜度為8 - 7 + 2*1=3。可以看出,從最左邊的節點到最右邊的節點有3條不同的路徑。在項目開發中,可以根據項目類型,來定義上限數((6、8或10等)。

以上是最常用的5種軟件質量度量指標,當然,還可以結合其他的指標,對項目有一個更清晰的認識。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450230.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

介紹一個對陌生程序快速進行性能瓶頸分析的技巧

前言 工作多年,一直做的是curd系統。前幾年做的系統應用場景,大多對數據庫依賴比較重。例如報表統計,數據遷移,批量對賬等。所以這些系統出現性能瓶頸一般出在數據庫操作上面。 如果程序因為數據庫操作出現性能瓶頸是比較好辦的&a…

[WARNING] The POM for XXX-system:jar:1.9.0-SNAPSHOT is missing, no dependency information available

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 在 git-bash 中 想要啟動一個工程服務就是不成功,始終提示jar包找不到,本地代碼已提交。 這時可直接登陸git&am…

關于tcp網絡通訊的幾個場景的小測試

以下場景基于阻塞式IO 發送端向接收端快速的發送數據,接收端如果不接受或者很慢速的接受會發生什么情況。 發送端快速向接收端發送大量數據,然后立即退出,接收端會發生什么情況。

測試一體機ASM failgroup的相關問題處理

環境:3臺虛擬機 RHEL 7.3 Oracle RAC 11.2.0.4問題現象:RAC運行正常,ASM磁盤組Normal冗余,有failgroup整體故障,有failgroup配置錯誤。溫馨提示:本文并不是市場上任何一款商業的一體機產品,只是…

掌握窮變富的12條原則 迅速從普通人變成有錢人

“窮忙”和“富閑”是對立面,“窮”對“忙”,“富”對“閑”,很多“窮忙女”是在拿青春當賭注,希望自己今天的“美麗”明天就能在市場上有個不錯的“回報”;而多數“富閑女”則是在拿智慧當籌碼,既不可替代…

com.alibaba.dubbo.rpc.RpcException: Forbid consumer 192.168.184.1 access service com.foreveross.syst

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯如下: com.alibaba.dubbo.rpc.RpcException: Forbid consumer 192.168.XXX.1 access service com.XXX.system.service.…

動手又動腦

1.編寫一個程序,指定一個文件夾,能自動計算出其總容量。 import java.io.File; import java.io.IOException; public class FileEdit { double size0.0; //計算文件或文件夾的大小,單位MB public double getSize(File file){ //判斷文件是否存…

windows下安裝和設置gradle

一、安裝前檢查 檢查jdk是否已經安裝 二、下載gradle 1. https://gradle.org/releases/ 2.設置gradle環境變量 3. 環境變量中增加名為GRADLE_HOME的變量名,值為Gralde的解壓路徑,例如D:\Gradle 在path的后追加%GRADLE_HOME%\bin; 4. 驗證 5.修改默認緩存目錄 修改Gradle默認緩存…

智能硬件的時代,嵌入式是否已經日薄西山

存吐吐槽,智能硬件現在很火熱,導致很多人以為嵌入式行業又迎來了春天,可是明白人都知道,智能硬件核心在智能,硬件是很次要的。目前的硬件產品,要有亮點,都和智能沾邊,已經不是那個可…

賺大錢一定要選擇

賺大錢一定要選擇 八大賺錢定律讓你賺翻天 許多人看起來已經步入小康了,但他們還說不上是真正的富人,從科學理財的觀念看,憑高收入和攢錢來實現富裕的思路完全是錯誤的,依靠攢錢,不僅多數人無法獲得最終的財務自由&…

深解微服務架構:從過去,到未來

http://www.uml.org.cn/zjjs/im... 微服務的誕生 微服務架構(MicroserviceArchitect)是一種架構模式,它提倡將單塊架構的應用劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立…

解決IntelliJ Idea中文亂碼問題、修改IDEA編碼

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 有兩種辦法可以修改 IntelliJ IDEA 的文件編碼(IDE 版本為 14.1.4) File->Settings->Editor->File En…

前端框架開始學習Vue(一)

MVVM開發思想圖(圖片可能會被縮小&#xff0c;請右鍵另存查看&#xff0c;圖片來源于網絡)定義基本Vue代碼結構1 v-text,v-cloak,v-html命令默認 v-text沒有閃爍問題&#xff0c;但是會覆蓋元素中原本的內容&#xff0c;插值表達式只會替換自己的占位符,<!DOCTYPE html> …

Android App圖片輪播效果的組件化

簡介 一個通用的圖片輪播效果的通用組件&#xff0c;方便開發者快速集成。 初學者&#xff0c;其實應該實現一個自定義控件的&#xff0c;改天有空&#xff0c;在學習下吧&#xff0c;學習能力一般&#xff0c;以前也沒寫過java&#xff0c;這個組件都寫了好久&#xff0c;慚愧…

天下IT:程序員能掙哪些外快?

各位朋友&#xff0c;大家好&#xff01;歡迎收看《天下IT》。 今天我們給您講講程序員&#xff0c;坦率的說世界上的程序員基本跟我手里的帽子一樣遍地都是&#xff0c;各種各樣的程序員&#xff0c;因為程序員已經成為社會的主流打工群體。但是程序員實際在公司里往往是最不受…

P1616 瘋狂的采藥(洛谷,動態規劃遞推,完全背包)

先上題目鏈接:P1616 瘋狂的采藥 然后放AC代碼: #include<bits/stdc.h> #define ll long long using namespace std; ll f[100010]; ll timee[10010]; ll w[10010]; int main() {ll t,m;cin>>t>>m;//t總時間,m總草藥//time時間,w價值for(ll i1;i<m;i){scan…

MySQL通過source命令執行sql文件

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 IT人員經常會和MySQL打交道&#xff0c;備份和恢復應該是最常用的操作了&#xff0c;那么通過直接執行sql文件無疑是最快捷的方式&#x…

Android系統中通過shell命令實現wifi的連接控制

簡介 工作中遇到一個“變態”的需求&#xff0c;在android系統中不通過java層控制wifi的連接&#xff08;主要是修改ap的essid和password&#xff09;&#xff0c;而是需要通過native層實現對wifi的控制。 How 接到這個需求時&#xff0c;第一個想法是如何找到Android nativ…

程序員賺大錢

本文共分三部分&#xff0c;現在打開的是《第一部分》&#xff0c;歡迎繼續閱讀《第二部分》和《第三部分》1 引子 都說海闊憑魚躍&#xff0c;又有多少魚能躍出大海&#xff1f;都說天高任鳥飛&#xff0c;但真正能一飛沖天的&#xff0c;也不過是寥寥數鷹而已&#xff1b;在…

MySQL索引底層實現原理

索引的本質 MySQL官方對索引的定義為&#xff1a;索引&#xff08;Index&#xff09;是幫助MySQL高效獲取數據的數據結構。提取句子主干&#xff0c;就可以得到索引的本質&#xff1a;索引是數據結構。 我們知道&#xff0c;數據庫查詢是數據庫的最主要功能之一。我們都希望查詢…