林星 ([email protected])
2004 年 3 月
**自ibm developerworks
軟體質量的重要性是不言而喻的,但是當所有人都意識到它的重要性的時候,卻很少有人能夠清晰的描述出如何才能夠提高軟體質量。軟體質量框架的目的就在於提出乙個評價的原型,幫助我們分析一種方法和技術是否能夠提高軟體質量。本系列文章分日構建、測試驅動開發、建立核心框架、面向元件的大規模軟體架構來進行深入的分析。
什麼才是乙個高質量的軟體?
在討論軟體質量原型之前,我們先回答第乙個問題。乙個軟體之所以被認定為質量優秀,並不是因為它獲得了乙個省級或部級獎,而是它的內在具備了這樣一些特性:
軟體質量框架的組成
軟體質量框架不是理論,而是優秀軟體開發思想的乙個應用,是對軟體開發過程的有效管理實踐。它以敏捷方**為基礎,並將先進的軟體開發技術融入其中。您可能在之前聽說過,學習過,嘗試過各種軟體技術,但是缺少乙個統一整體的認識。所以,軟體質量框架的目的是將您原先在腦海中就存在的思路進一步的整理,將一副完整的影象(big picture)展現在你面前。軟體質量框架偏重應用,所以不會涉及太多的理論,但是,它是基於理論的,所以,在需要理論支援的地方,我們會簡單的描述理論,並給出必要的鏈結,供有興趣的讀者進一步閱讀。
軟體質量框架並不複雜,它由幾個部分組成,第一部分是前提,說明了軟體框架的適用範圍,以及適合的環境,和方法學一樣,沒有泛之四海皆準的方法學,所以軟體質量框架也需要乙個上下文環境。第二部分是價值觀,價值觀說明了軟體質量框架中強調的價值,在軟體框架的結構和實踐中,都將充分的的表現出一開始我們定義的價值。第三部分是結構。結構定義了軟體質量框架的組成部分,以及軟體質量框架和開發過程之間的關係。第四部分是文章中著墨最多的部分,即優秀實踐。優秀實踐通過具體、實際的分析、舉例,深入闡述了軟體質量框架的價值觀和結構。
在本文剩下的篇幅中,將會對前三個部分進行闡述,並對軟體質量開發的實踐進行簡單的描述。在剩餘的篇章中,將會針對這些實踐進行細緻的分析。
軟體質量框架的前提
平台前提:由於軟體質量框架的實踐將會涉及具體的技術和**,所以我們首先為軟體質量框架定義了平台。軟體質量框架將會執行在j2ee平台上,使用物件分析技術(並不一定是物件導向技術,我們可以採用以資料為中心的技術)。
組織前提:執行軟體質量框架需要投入,需要付出,軟體質量框架最難的地方不是學習,而是執行。在乙個組織中,需要評估應用軟體質量框架需要多少的投入,對目前的開發過程有多大的助益。一般來說,組織的規模越大、其開發過程和產品越複雜,就越適合採用軟體質量框架。
方法學前提:在敏捷方法學中,對規則和秩序有兩種不同的觀點,一種是強調規則和秩序,以xp為代表,它對**都有要求;另一種則不那麼強調,以自適應軟體開發為代表,它不要求程式設計師的具體行為。軟體質量框架採用第一種觀點,要求組織中存在嚴謹的規則和秩序。
軟體質量框架的價值觀
明確具體:對軟體的管理必須是明確具體的。軟體開發是工程、也是藝術,需要緊密的協作和溝通,任何乙個含糊的指令都可能導致軟體開發中出現錯誤,所以,在軟體開發中,任何乙個指令都應該是相對明確的。為什麼說是相對呢?是和成本相對,指令越明確,成本就越高。例如,你可以把需求文件寫的非常的具體,但是你需要付出製作和維護的代價。所以我們的明確性是乙個考慮成本前提下的特性。
明確具體要從綜合上考量。怎麼理解呢?例如,xp中的使用者故事是非常不精確的,按道理說它是不明確,也是不具體的。但是在整個開發周期中,將會有迭代、測試、現場使用者等多種手段使得使用者故事明確具體起來,所以從整體上看,它並不違反我們的價值觀。產品質量是乙個系統工程,決不僅僅是qa部門的工作,。這個道理適用於製造業,也適用於軟體開發業。
容錯:軟體開發是人的工作,人是無法避免錯誤的。所以,軟體質量框架中允許犯錯。因為不犯錯是天方夜譚。你就算做了這方面的強制規定也無法避免它的出現,反而會引發其它的問題,例如隱瞞錯誤,或為了隱瞞錯誤而導致的額外成本。所以正確的態度是允許發生錯誤,並建立一套監測、管理、反饋、修改錯誤的體制。
規範:在前提中,我們已經提到了,規範是軟體質量框架的基本態度。所以,軟體質量框架中強調規範,並使用規範來推動框架的運作。
測試:軟體質量框架非常強調測試,測試是保證質量的必由之路。測試要盡可能的多,盡可能的頻繁、測試結果要盡可能快的反饋。這是軟體質量框架對測試的基本態度。測試是綜合性的,軟體開發過程中的所有工件,都需要伴隨著相應的測試工件。這是基於乙個簡單的理念,如果你不能夠為你的工作制定乙個完成的標準,你又該如何開展你的工作呢?
軟體質量框架的結構
上圖表現了軟體質量框架的結構。處於結構核心的是技術架構和管理架構。軟體質量框架既不是方法學,也不是乙個軟體,更像是兩者的結合體。技術架構和管理架構的融合體現了這一特性。軟體質量框架並不關心單個開發人員的效率,它關注的是開發團隊整體的效率。因此,管理架構在框架中的意義在於它定義了一套軟體管理的方法,能夠對開發人員及其他們的工作進行管理。從這一點來看,它的作用和軟體工程方法學是一樣的。但是,在現實中我們發現軟體組織在邁向軟體過程的途中往往因為現實的困難而止步不前。其中乙個主要的原因是在引入方法學的過程中生產效率降低了,而引起組織成員對變革的懷疑和不滿。
所以,除了管理架構之外,軟體質量框架還提供了乙個技術架構,其目的是明確的定義如何應用組織中涉及的軟體技術,以及管理軟體技術的方法。技術架構是具體的**,相比起方法學來說,它更加的具體,更容易為開發人員所理解。而技術架構存在的目的,一方面是進行技術積累,另一方面也是為管理架構服務。
技術架構和管理架構的下一層是支撐框架。支撐框架包括**、元件、文件,目的是為技術架構和管理架構提供底層的支援。
處於結構最頂層的是業務架構。這個部分對於任何乙個軟體組織來說都是不同的,因為不同的軟體組織的業務不同。業務架構的目的是對業務進行建模和抽象,提取出可重用的部分,以提高軟體組織的生產率。本文中不涉及該部分的內容。
軟體質量框架的優秀實踐
乙個開發團隊要提高效率,就需要思考目前的管理活動中有哪些要素是可以改進的:如何把一些事務性的操作變得自動化,從而節約人力;如何找到更好的方法,讓開發過程更為合理,更注重軟體的質量;如何在團隊中傳播優秀的思想,讓團隊成員不斷的學習和進取,自發的改進過程。這些美好的願望幾乎是所有方**和各種認證的共同心聲,但要完全做到可就太難了。在我們的文章中,提出了一些優秀的實踐,優秀實踐均是**於軟體開發界中的一些新思路和新理論,它們能夠為以上願望的達成起到正面的作用。在組織中引入用這些實踐決不是乙個容易的過程,但它們確實非常的有效。不論是在成本控制上,還是在質量的改進上。
日建立:乙個組織應當擁有乙個有效的工作流程,這個工作流程能夠指導軟體開發的進行。這個流程應當是具體的、可操作的。隨意的計畫和從來不遵循的進度決不是乙個有效的工作流程。日建立實踐提出了一種對開發過程進行精細管理的方法,它是量化軟體管理的基礎。有了日建立,你會發現計畫的制定和進度的監控是非常容易的一件事情。
測試驅動開發:軟體質量的根源**於測試,測試做好了,軟體質量就會好。這是毫無疑問的。問題的關鍵在於怎麼做測試,才能保證測試的投入能夠帶來軟體質量的有效提公升。測試驅動開發正是為了解決這個問題而出現的。它不是乙個完整的方**,可以和任何一種開發流程進行融合。測試驅動開發不但能夠改善測試效果,還能夠改進軟體的設計。
建立核心框架:框架是一種具有高度重用性的軟體,這個特性決定了它非常適合成為軟體組織積累知識的一種有效手段。傳統的知識積累的方法是文件,但是文件容易產生歧異,開發人員往往也不願意去閱讀和理解文件。框架提供的是一種綜合的手段,包括文件、模型和**。更容易理解,更重要的是,開發人員必須在日常的工作中使用框架,這使得他們對框架中的知識非常的熟悉,並根據工作的需要來改進框架。
面向元件程式設計:有效的組織在於有效的分工。體力活動容易進行分工,腦力勞動則比較難,而軟體開發似乎就更難了。所以,長久以來我們都習慣採用以功能塊為單位的粗粒度劃分方式。面向元件程式設計採用更加細密的劃分方式,並以服務作為元件之間相互依賴的契約,不但定義了元件和元件之間的關係,也規定了元件開發者、元件使用者、元件測試者的權利和義務。從而能夠進行軟體開發工作的分配、管理、qa等工作。
以上的幾個優秀實踐看起來似乎並沒有多大的關係,他們的提出者也大都不同。但是有一點卻是共同的,就是他們都能夠對軟體質量的改進起積極的作用。此外,他們為軟體質量框架結構的實現提供了乙個明確的實現方式。從軟體結構的角度來看,日建立和測試驅動開發似乎偏向於管理架構,而建立核心框架和面向元件程式設計則偏向於技術架構。事實上,他們既包含了技術架構,也包含管理架構,彼此之間也有相互關聯。例如,面向元件程式設計在合理劃分元件之後,就需要乙個有效的核心框架來整合元件,通過每個元件都需要採用測試驅動開發方法來保證質量,同時,日建立將會以元件為單位來進行每日的建立,從而為進度估算提供有效資料。
在接下來的幾篇文章中,我們就針對這幾項實踐來進行深入的分析。
關於作者
林星,致力於研究敏捷理論和優秀的軟體設計思想,並將之應用於國內的軟體組織。可以通過 [email protected] 和他聯絡,也可以通過訪問 http://www-900.ibm.com/developerworks/cn/linux/software_engineering/l-frmwk/www.qca.cn 和 http://www-900.ibm.com/developerworks/cn/linux/software_engineering/l-frmwk/www.aglichina.org 來獲得更多的資訊。
軟體質量 1
軟體質量 質量的定義 1 符合目的或者用途 2 使用者的感覺就是質量 3 符合顧客在其合理 下對產品的要求 4 產品或者服務滿足明確和隱含需要能力的效能特性的總體 解釋 1 產品用途明確,例如產品名稱,一聽就知道是幹什麼的什麼方面的產品。2 使用者體驗性 而不是站在開發角度,因為每個使用者不是專業的...
軟體質量保證 軟體質量
這篇博文將較為全面深入地談談軟體質量保證中關於軟體質量的概念,內容等相關問題。關於質量的定義,不同的領域,不同的人,不同的側重點會得出截然不同的結果。因此關於其質量的基礎概念相對而言較為好理解,但是具體如何去定義實際上確是無關緊要的。不過我們在分析軟體質量的時候,不僅要考慮其面向使用者的需求覆蓋率,...
軟體測試的學習之路 軟體質量
為什麼需要軟體測試 1 一款軟體從無到有會經歷很多的開發階段由不同的人來參與開發,所以最終產出的軟體功能可能會存在問題。因此為了保證軟體的功能是可用的,我們必須要進行測試。2 當前的軟體件行業已經不在是功能為王了,不僅僅只盯著軟體的功能是否滿足需求,還會對軟體是否容易上手,執行效率是否 ok 等一系...