軟件形式上是產品,本質上是服務,是高科技計算機信息技術和人類創新智慧的結合。在軟件產品的研發過程中,軟件質量一直處于最為核心的地位。ISO9001標準和CMM原則被譽為軟件質量管理的圣經,是當今國際上最推崇的軟件質量改進方法和保證措施。然而,很多實施ISO9001、CMM3級的企業過于強調過程管理,忽略了“人比過程更重要”這一原則,形式重于實質,這一做法在國外已受到猛烈抨擊。如何更好地將質量管理理論和企業經營生存之道密切融合,走出一條獨辟蹊徑、立竿見影的“質量革命”之路,是擺在諸多企業高管面前的重要課題之一。這里總結了軟件項目質量管理的6大最佳實踐,供同行參考。
全面管理,塑造質量文化
全面質量管理即為全員、全過程、全方位的質量管理,它具有以下基本特點:
1.全員:質量控制從少數質量保證人員擴展到企業的所有人員。質量控制管理不是質量保證部門一個部門的事情,需要全員的大力支持、準確理解、精確執行。
2.全過程:將質量控制、質量檢驗、質量統計延伸擴展到整個產品生命周期。
3.全方位:全面運用一切有效方法,全面控制質量因素,如軟件開發成本、進度、可靠性、安全性等。
全面質量管理可以歸納為兩大基本原則: 首先是以滿足顧客需求為導向,不斷改善,最終實現顧客的全面滿足;其次是以全員參與為基礎,進行全過程的質量控制。質量管理理論認為,“質量出自計劃,而非出自檢查”。軟件前期的質量保證主要依靠設計、生產、研發,后期的質量保證則主要依靠測試、完善、改進。全過程的質量保證依靠行之有效的管理體系。這種觀點強調運用確定性、過程化的管理制度、程序、體制來控制管理潛在諸多不確定性、多變性因素的軟件質量品質。事實上,影響軟件項目進度、成本、質量的三大因素分別是人、過程、技術,人永遠是第一位的,人永遠比過程更重要,人是影響質量的最關鍵因素,只有在軟件質量管理過程中堅持“以人為本”,強調人與過程的和諧,塑造以人為核心的質量管理文化,才能讓質量管理的成效得到淋漓盡致的發揮。
分級管理,把握
質量目標的層次性
ISO9001體系認為,建立質量方針、質量目標是實施質量管理的必經之路。事實上,現代軟件的架構是層次化的,這一點尤其重要,軟件質量也應按照層次從里到外、功能由輕到重、地位從低到高因地制宜、區別對待,對于不同的軟件層面和需求制定不同的質量目標。例如:對于一個大型網絡游戲而言,大氣炫麗、細膩仿真的3D動畫操作界面是非常必要的;但對于一個小型超市倉庫管理軟件而言,只要能滿足出庫、入庫、損益、盤點的基本需求就可以了,簡單粗糙的操作界面反而更容易上手。
在進行軟件工程的質量控制時,應把握關鍵層面,抓住質量控制的瓶頸。一般來說,越是靠近底層、核心區域(如平臺、框架、引擎、關鍵業務等)的代碼質量要求越高,開發人員的素質要求越高,質量檢測及保證工作代價開銷越大。精益求精只適用于靠近核心的代碼層;而對于外圍代碼層, 可酌情適當降低代碼質量,放松測試條件。
驗證確認,全程質量控制
質量控制是確定項目結果與質量標準是否相符,并及時糾正產品缺陷的過程。質量控制的主要手段是驗證與確認:驗證是從開發者的視角來檢查是否正確地構造了產品,而確認則是以用戶的視角來檢查是否構造了正確的產品。
事實證明,具有清晰開發模式及過程管理規范的軟件產品,在質量上要明顯超過那些沒有明確過程模型及規范指導的軟件產品。軟件工程理論提出了諸多開發模型,如瀑布模型、噴泉模型、增量模型、快速原型模型、螺旋模型、迭代模型等,當前最常用的大型軟件開發模式是螺旋式的增量開發方式(如圖1所示)。
圖中1#12316;7 是各階段的輸出點,也是質量控制點,有相應的輸出文檔和階段性成果,均需要得到質量保證部門的確認。軟件項目中最常用的質量控制工具手段,包括評審(技術評審、代碼評審、設計評審、同行評審等)、審查、測試驗證(黑盒測試、白盒測試、單元測試、集成測試、確認測試等)、抽查、調查、走查、旁站、缺陷跟蹤等。
技術評審最初是由IBM公司為了提高軟件質量和提高程序員生產率而倡導的,分為正式技術評審(FTR)和非正式技術評審(ITR)兩種,該方法已經被業界廣泛采用并收到了很好的效果,它被普遍認為是軟件開發的最佳實踐之一。需要重點指出的是,同行評審是一種特殊類型的技術評審,由與產品開發人員具有同等背景和能力的人員對產品進行技術評審,非常有利于發現產品中潛在的問題。成功的同行評審是提高質量和生產率的重要手段,評審的對象應該包括所有軟件開發的中間和最終工作產品。
引入工具,復用成功模式
質量管理是可以通過信息化手段量化的,采用先進的質量管理工具可以極大地提高質量管理水平。例如:Bugzilla是Mozilla公司提供的一個開源的缺陷跟蹤工具,在全世界擁有大量用戶。它能夠為軟件組織建立一個完善的缺陷跟蹤體系,包括報告缺陷、查詢缺陷記錄并產生報表、處理解決缺陷等。
質量和缺陷是一對無法化解的矛盾,想要提高質量必須千方百計地減少缺陷。有三種方法可以減少缺陷產生的頻率、數量、規模等級。
1.事前預防:在開發過程中始終要考慮工作成果可能產生缺陷,將高質量內建于開發過程之中。主要措施包括提高技術水平和規范化水平,也就是練內功,通稱為“軟件過程改進”。
2.事中控制:及時對各個階段的工作成果進行質量檢查,找出并消除其中的缺陷。這種方式實踐效果較好,已經被企業廣泛采用,主要措施是技術評審、軟件測試和過程檢查。
3.事后補救:當軟件產品正式交付到用戶手中投入生產經營時發現了重大缺陷(如系統常常崩潰、運行速度極慢、報表統計錯誤等),然后再進行修改維護。這實質上反映出軟件項目管理中存在較大的缺失和漏洞,建設單位、承建單位、監理單位三方都有不可推卸的責任,應規避這類水平低級、后果嚴重、影響惡劣的失誤再次發生。
復用是在軟件開發領域提高軟件質量的重要方法之一。被復用的對象往往是經過反復使用驗證的,自身具有較高的質量,因此,合理化復用有利于提高質量、提高生產率和降低成本,技術開發活動與管理活動中的任何成果都應盡量被復用,如思想方法、經驗、程序、文檔等。軟件質量管理的最終目的除了能夠不斷持續改進之外,還在于形成有特色、有成效、可操作的質量管理模式,并最大程度地復用。
協同合作,三權分立
由于軟件質量管理的專業性和復雜性,軟件項目組織建設上應實行“設計、檢驗、監管”三權分離、鼎足而立的原則:設計部門專攻軟件需求分析、規劃設計、系統研發工作;檢驗部門從事系統測試(性能測試、回歸測試等);質量監管部門制定質量管理工作計劃,對各部門的質量管理工作提出指導建議,跟蹤、內審、改進質量體系的運行。
技術評審、測試和質量保證是提高軟件質量的三個重要法寶,但三者在作用上各不相同。技術評審與測試關注的是產品質量而不是過程質量,兩者的技術強度比質量保證要高得多。技術評審和測試能彌補質量保證的不足,三者是相輔相承的質量管理方法。我們在實踐中不能將質量保證、技術評審和測試混為一談,也不能把三者孤立起來執行。建議讓質量保證人員參加并監督重要的技術評審和測試工作(大約占其工作量的30%左右),只有這樣他們才能更深入地了解軟件的質量問題,把三者有機地結合起來,做到三位一體,全方位堵住質量缺陷的漏洞。在部門職能規劃上,質量保證部門具有充分的權力,可以對質量不合格的工作成果做出處理,只有這樣質量保證工作才不會被輕視,才更有助于加強全員的質量意識(質量保證過程域的主要活動如下圖2所示)。
和諧管理,做好一把手工程
當前很多軟件企業都組建了質量保證部門,出臺了質量保證制度,然而軟件質量并未得到實質性突破,質量保證人員也沒有發揮預期的效果,造成這種情況的常見原因有兩個:一是軟件開發團隊管理過程不夠規范;二是企業領導者,尤其是最高領導者(即“一把手”)重視程度不足,措施不到位。
調查結果表明,在軟件項目中,質量保證人員往往是最“吃力不討好”的一族,通常沒有實質性權力,項目成功功勞屬于別人,自己缺乏成就感,項目失敗卻擔負最多的責任。鑒于這種情況,領導層一定要從根本上重視、愛護、支持質量保證工作,充分發揮組織協調作用,體現人文關懷,運用管理藝術,構建和諧團隊,讓每一個項目組成員都樹立較強的責任感、歸屬感和大局意識。事實上,軟件開發工程是典型的“全員參與工程”、“一把手工程”,沒有企業“一把手”的知情、重視、認可和支持,軟件項目順利實施和取得實效根本無從談起。有時候企業領導層對于軟件質量保證的作用往往是決定性的,這是任何技術手段都無法替代的。
鏈接
軟件質量管理常見誤區
誤區一:軟件質量是可以精確測量的。
軟件的質量屬性很多,如正確性、健壯性、可靠性等,但在大多數用戶看來,實用、適用、好用的軟件就是成功的。成功的軟件通常都會在功能、性能、界面、操作等方面,以最簡捷有效的方式滿足用戶的最緊迫、最直接的需求。質量是一個相對的概念,軟件產品質量沒有國際通用的評價標準,質量目標的彈性較大,沒有絕對合格或不合格的界限,軟件不可能做到“零缺陷”,有缺陷的軟件仍然可以使用。
誤區二:企業軟件的質量越高越好,最好是“零缺陷”。
商業目標決定了軟件的質量目標。軟件的質量評價也不能從純粹的軟件工程、軟件商品、軟件技術的角度去考量。理想的軟件質量目標不是“零缺陷”,而是恰好能夠滿足應用需求、生存發展、市場競爭需要,并且將提高質量所付出的代價控制在預算之內。一味追求高質量代碼,把質量目標凌駕于贏利目標之上,是多數技術人員所犯的常見錯誤。
誤區三:通過ISO9001、CMM3級認證就意味著軟件質量一定有保證。
當前很多通過CMM3或者ISO9001質量認證的軟件企業在軟件項目管理上的確更加規范了,但代表核心競爭力的軟件質量駕馭能力并未得到實質性的提升。產品生產過程與產品質量存在一定的因果關系,通常好的過程產生好的產品,而差的過程將產生差的產品。實踐證明,軟件質量保證并不能絕對保證軟件質量,質量保證只能檢測出哪些不符合既定程序規范、膚淺的軟件缺陷,對于潛藏在軟件深處符合既定設計規范的缺陷卻顯得無能為力。僅靠制度、規范、流程是無法全面識別出軟件中的潛在缺陷的,質量保證對于保證質量而言只是必要的手段,而不是充分的手段。
誤區四:擁有充足的人力資源,軟件質量就有保障。
軟件開發并不一定是人多力量大,相反,人力資源配置不當反而會延誤工期。不同人員的水平和素質差異較大,軟件項目增加新人可能會增加新的缺陷,無益于軟件質量提升。軟件開發是一種智力創新活動,任何程序員都無法避免缺陷的發生,缺陷發生是必然的,程序員首先必須了解決定軟件質量的各個關鍵因素(如成本、進度、可靠性、安全性等),搞清楚質量控制的目標和計劃,然后才可以在進行需求開發、系統設計、編程測試時確保交付軟件的高質量。