葉瑞婕,邵延富
(廣州市景心科技股份有限公司,廣東 廣州 510630)
自1958年Rubey和Hurtwick首次提出軟件度量學概念以來[1],隨著計算機日益廣泛的應用,軟件度量工作對軟件產品質量要求也在不斷提升。我們需要為軟件產品規定質量需求和評價質量提供一種框架,定義質量的特性及其間關系集合,并基于該框架對軟件產品能否滿足明確和隱含要求的能力進行系統性考查[2]。提升軟件質量化評估的水平,是提高整個軟件行業質量水平的有力手段[3]。
此外,隨著軟件工程的發展,軟件生命周期中使用的開源軟件也越來越多,例如,代碼管理工具gitLab、源代碼檢測工具sonarQube、持續集成工具jenkins、接口管理工具Yapi、日志分析工具ELK、監視警報工具Promethus等開源軟件。同時,部分工具本身可設置質量指標,并具備度量函數方法,例如,sonarQube可對可靠性、安全性、可維護性等質量特性進行度量。由此可見,通過開源軟件輔助地對質量特性進行可持續化的度量,將成為未來軟件質量度量的發展趨勢。
對此,本文在GB/T 25000標準的軟件質量模型上,結合實際工作中使用的輔助工具,重新定義度量指標和測量方法,構建一種面向軟件全周期的質量度量模型。
軟件全周期質量度量模型是在GB/T 25000標準的指導下,以GB/T 25010質量模型為基礎,創新性將質量模型特性從“交付前”“交付后”和“持續使用”軟件生命周期視角重新進行劃分,分別監測發布前的靜態代碼質量和系統功能質量(內部質量),評估上線后系統整體運行情況(外部質量),評價使用軟件產品所產生的效能和價值(使用質量),記錄開源軟件中與度量相關的原始數據,結合定義的質量特性的度量指標和測量方法,形成對軟件全周期的質量度量。如圖1所示。

圖1 軟件全周期質量度量模型
本模型采集的度量數據來自gitLab、sonarQube、jenkins、SVN、JaCoCo、owasp、Yapi、Promethus等開源軟件,下面將結合開源軟件中獲取的度量數據,詳細定義各個質量特性的度量指標和測量方法。
內部質量重點監測交付發布前的靜態代碼質量和系統功能質量,根據軟件全周期質量度量模型將分別從可維護性和可測性的質量特性進行測度。如表1所示。

表1 內部質量的質量特性、度量指標與數據源之間的關系
2.1.1 可維護性
在本模型中,可維護性是指代碼維護的有效性和效率的程度,期望代碼能被有效地、有效率地修改,且不會引入缺陷或降低現有產品質量。
可維護性的度量指標包括代碼重復塊、代碼壞味道、代碼bug、代碼漏洞數、組件漏洞數5個維度,度量原始數據從SonarQube和Owasp獲得,通過與質量閾值比對進行測度,期望達成代碼設計的復雜度低,盡可能消除重復代碼和代碼/組件潛在漏洞,代碼表達清晰、優雅的質量目標。
2.1.2 可測性
在本模型中,可測性是指系統功能能夠被測試的容易程度,期望系統可控制、可觀測、可追蹤、可理解,并滿足明確和隱含要求的功能。
可測性的度量指標包括單元測試覆蓋率、接口自動化覆蓋率、線下bug率和功能覆蓋率4個維度,度量原始數據從JaCoCo、Yapi、Jira(功能需求、缺陷bug)和SVN(測試用例)獲得,通過與質量閾值比對進行測度,期望達成高內聚、低耦合、接口定義明確、行為意圖清晰、功能滿足需求的質量目標。
外部質量重點評估上線后系統整體運行情況,根據軟件全周期質量度量模型將分別從可用性、有效性、性能效率、可靠性和安全性的質量特性進行測度。如表2所示。

表2 外部質量的質量特性、度量指標與數據源之間的關系
2.2.1 可用性
在本模型中,可用性是指發布上線后系統使用時能夠進行操作和訪問的程度,期望系統正常運行,外部系統和接口能正確訪問或被訪問。
可用性的度量指標包括構建成功率、外部系統/接口聯通率2個維度,度量原始數據從Jenkins和ELK獲得,通過與質量閾值比對進行測度,期望達成提升上線后系統運行穩定的質量目標。
2.2.2 有效性
在本模型中,有效性是指用戶操作使用指定功能的準確性和完備性的程度,期望系統發布上線后用戶操作的業務均無差錯。
有效性的度量指標包括線上漏測率,線上致命、嚴重等級bug率和線上一般、輕微、微小等級bug率3個維度,度量原始數據從Jira(線上問題bug)獲得,通過與質量閾值比對進行測度,期望達成提升需求分析和程序設計能力,改進測試過程的質量目標。
2.2.3 性能效率
在本模型中,性能效率是指用戶操作時業務處理響應的效率以及系統資源使用的程度,期望服務器資源能支持高效的負載并滿足業務對它的需求。
性能效率的度量指標包括接口響應時間、CPU使用率、內存使用率、磁盤使用率和網絡吞吐量5個維度,度量原始數據從ELK和Promethus獲得,通過與質量閾值比對進行測度,期望達成上線后系統業務服務效能的質量目標。
2.2.4 可靠性
在本模型中,可靠性是指上線后系統運行周境穩定的程度,期望系統發布上線后盡可能降低因周境變化導致的失效。
可靠性的度量指標包括故障恢復時間和周境事故2個維度,度量原始數據從ELK和Jira(事故單)獲得,通過與質量閾值比對進行測度,期望達成提升上線后系統運維服務的質量目標。
2.2.5 安全性
在本模型中,安全性是指對線上運行系統的保護程度,期望運行系統不被攻擊,系統的數據和信息不被蓄意的存取、使用、修改、毀壞或泄密。
安全性的度量指標包括Web網站漏洞、安全問題整改項2個維度,度量原始數據從Acunetix和Jira(任務單)獲得,通過與質量閾值比對進行測度,期望達成提升上線后系統整體安全的質量目標。
使用質量重點用于評價使用軟件產品所產生的效能和價值,根據軟件全周期質量度量模型將分別從有用性和靈活性的質量特性進行測度。如表3所示。

表3 使用質量的質量特性、度量指標與數據源之間的關系
2.3.1 有用性
在本模型中,有用性是指用戶對系統業務功能感到滿意的程度,期望系統發布上線的業務功能使用率高。
有用性的度量指標包括頁面訪問量PV、獨立訪客訪問數UV、特征利用率和用戶投訴率4個維度,度量原始數據從ELK和業務系統獲得,通過與質量閾值比對進行測度,期望達成提升用戶滿意度和軟件產品影響力的質量目標。
2.3.2 靈活性
在本模型中,靈活性是指產品業務功能能被修改以滿足額外的用戶需求的程度,期望可通過配置方式或修改少量代碼后系統功能即能滿足用戶的額外需求。
靈活性的度量指標包括公共組件庫、業務配置項2個維度,度量原始數據從業務系統獲得,通過與質量閾值比對進行測度,期望達成提升系統業務靈活性和架構可擴展性的質量目標。
本文對軟件質量度量模型、度量質量和測量方法,以及度量數據來源進行了探索,通過測量方法將開源軟件獲得的原始數據與度量指標之間建立了關聯關系,模型落地可實施性強,對應的質量目標明確,能夠在實際項目中運用并客觀、清晰地反饋評估,有效地提升了全周期的軟件質量。■