注:本文純屬個人思想發展路上的一些日記,不正確的部分請在海涵的基礎上進行大無畏的批評指正,謝謝!
1 對軟體開發的認識軟體開發?
全世界絕大多數軟體公司把軟體開發分為設計、製造、測試三個階段。認為從編碼階段以前的部分是軟體設計階段,編碼屬於軟體製造階段。從而產生的瀑布式開發模型以及從建築行業照搬過來的管理經驗和管理流程。
但是,果真如此麼?在敏捷開發指導思想**的《源**就是設計》**中,闡述了乙個全新的思維:源**就是設計,而生產製造過程發生在編譯器把源**轉換為機器碼的時候。如果非要把軟體開發與建築行業進行模擬,源**相當於建築行業中的設計圖紙、施工圖紙與模型,是腦力活動的結果;而編譯過程才屬於建築行業中的人工體力的過程。
如果此思想是正確的,那麼禁止在編碼開始後再修改設計就是一種錯誤的做法了。這也就是為什麼瀑布模型對於大多數軟體開發專案是不合適的,也是瀑布模型導致軟體專案開發失敗的真正原因。也是為什麼大幅度提高軟體質量、降低軟體成本的功臣是類似於c++等物件導向語言的發明,而不是嚴格定義的「先進」開發流程。
2 軟體專案更像什麼?
軟體專案管理是人類歷史以來最為複雜之一的管理活動,這是由於軟體產品不可視性所導致的開發進度、軟體質量的不可視性,以及當前應用環境和未來應用環境的複雜程度所造成的。所以單單照搬建築行業的管理流程和管理思想是不能根本解決問題的。因為我們是在乙個預想的當前環境裡面建造乙個大概可以執行的看不見摸不到的東西,而且這個看不見摸不到的東西還要神奇地執行在未來的未知環境中。雖然實際上並沒有我說的這麼恐怖,但是這代表了軟體專案的共同特性。相反來說,如果乙個軟體在開發前就完全已知當前和未來的各種條件,那麼這樣的開發根本稱不上乙個軟體專案。
那麼,如果非要把軟體專案和建築行業進行模擬,把她比作為「在乙個從未去過的複雜自然條件中修建一座能夠自我生長的彈簧橋」顯得更合適一些,這個彈簧橋不僅工作正常,還要外形美觀,而且要能夠抵禦複雜多變的自然條件以及人為故意破壞,甚至還要時刻準備著連根拔起放在另乙個從未去過的環境當中。這才能滿足使用者對軟體功能、效能、操作性、可移植性、可擴充套件性、安全性等等的要求。
這也就是科學管理法所進行的軟體專案無法有效地靈活解決風險,吸收變化的原因之一吧。
如果把源**認為是最好的設計書,而那些開發文件只是輔助閱讀源**的說明資料,我們就應該能夠明白為什麼c++等物件導向語言的出現能夠大幅度提高軟體的質量,因為物件導向等c++**比結構化**如c語言更能夠容易讓開發人員直接閱讀。
如果我們把**中的設計變更認為是通過不斷地改善樣板間來改善軟體質量的話,我們就能夠容忍**中發現的設計缺陷了。
如果我們能夠容忍**中的設計缺陷,並且準備有時間和預算去修改設計的話,那麼採用瀑布式模型顯然是個錯誤,這就是為什麼我們本能地不採用瀑布式模型,而不明白其中道理的真正原因吧。
3 對cmm的認識
cmm規定了的嚴格的過程,是一種科學管理法,是一種從下到上的匯報制度以及監督制度。雖然開源界比較排斥cmm,認為cmm與敏捷開發、測試驅動開發的開發等模式有衝突,我倒覺得不是這樣,cmm只是規定匯報、監督制度,為的是讓整個軟體開發過程透明化、量化,從而帶來專案可預算、責任人明確、可監督這樣乙個組織管理制度。而cmm並沒有規定開發的時候非要使用瀑布模型,還是生長模式。因此,採用瀑布模型不應該是公司當中cmm人員強行規定,也不是開發人員拒絕cmm的理由,我們可以拒絕採用瀑布式模型,但是不能拒絕採用cmm。
另外,cmm所帶來的將風險降至最低的做法也必然會帶來專案競爭力下降。
另一方面,作為一種管理方法,cmm式的科學管理法已經佔據了我們所有的管理思維。但是eric raymond提出的大教堂與集市中的集市為我們帶來了另一種管理理念,我認為這是一種「能夠自我生長的軟體」的一種管理模式。
4 什麼是自我生長的軟體,以及相應的管理模式
我們都知道,農村家養的豬比賣到城裡的商品豬好吃,土雞比肉食雞好吃,這是為什麼呢?就是因為商品豬和肉食雞的養殖生產打破了自然規律。豬和雞的自然生長都需要乙個大自然規定的週期,人為地通過各種藥物來縮短這個週期必然會帶來質量上的破壞。
軟體開發也是如此,乙個優秀軟體的形成必然有乙個大自然規定的週期,如果從qcd的角度來講,強行地縮短這個週期d,必然會帶來質量q或者成本c上的損失。
雖然,在商業專案當中,我們不可能採用集市的管理方法,但是,我們應該了解到另一種聲音,合理地避免人為強制的因素,在可預算、可控制、可匯報、可監督的前提條件下,承擔一定風險的同時,讓開發人員有精力、熱情地開發出一款高質量的軟體。最後帶來公司利潤、社會責任、員工成就感的三贏結果。
軟體開發管理CMM等級劃分
cmm軟體開發流程試圖將幾十年來風險比較不可控的軟體開發用乙個規範的流程控制起來,變成乙個類似傳統工業化生產流程的工業。cmm理念 cmm主要理念之一就是加強過程控制,認為只要開發的過程按照規定動作執行,就可以很大程度上降低軟體開發的質量 進度風險。而過程質量控制的主要手段就是檢視。cmm的理念之二...
軟體開發的本質
關於這個話題,我似乎說過好多次了。軟體系統其實就是現實系統的抽象,就是現實系統的模型。最近,看到乙個論點,是這樣說的 軟體建模 架構 的過程其實就是乙個定理證明的過程。我得說,在我看來,這有一定的真理性。但是事實有一定的差異。基本原因是 我們碰到問題的時候,並不總是對問題的解決方案一無所知的,或者更...
軟體開發質量管理的一些思考
pmbok裡關於質量管理主要有3個過程 制定質量管理計畫 質量保證 qa 質量控制 qc 書看了5 6次,還是發現比較抽象,難以理解。實際專案中,怎樣才幹合理的考慮各種資源制約,更好的執行質量管理呢?一般的正規流程大致例如以下 需求分析 客戶評審與確認 概要設計 內部評審 具體設計 內部評審 編碼 ...