機械制造業經過上百年的發展,已經是一個非常成熟的產業了,她的每一個步驟、每一道工序都有非常明細和嚴格的標準,軟件業相比機械制造業還是一個處于發展行業,尤其是在中國。軟件工程的出現就是為了將軟件開發工程化,并確保軟件過程正確執行。規范軟件過程的目的就是提高產品的質量,降低個體的不確定因素對軟件質量的影響,將軟件開發至于受控狀態下。
很多人認為“軟件開發是一項智力密集、創造性成分較高的勞動”,因此會產生許多非受控的因素,造成軟件開發標準規范的貫徹執行在實際中都會碰到困難。我認為軟件開發和其他行業一樣,對質量的保證都是一個管理問題,從這一角度講,需要遵循的基本原則和面向的對象沒有什么不同,過分強調軟件開發的特殊性其實是軟件行業尚不成熟的表現。
我們可以借鑒制造行業的質量管理體系,反思一下軟件開發過程的問題。制造業擁有長久的歷史,形成了一套行之有效的管理模式、規范以及質量管理體系,更重要的是這種觀念和意識深植于制造業從業人員心中----不論是大型的企業還是只有一二百人的小廠,都會有自己詳細的流程、制度,并良好運轉且大家習以為常----正是因為這種現象的存在,才使我有了剝析一下軟件開發過程的想法。
當一個機械制造企業需要開發一個新產品時-這個產品可能是一種新型步槍,也可能是新一代的運載火箭,大致可以分為這樣幾個步驟:
1、首先,是對新產品的功能、技術性能(指標)等的定義;
2、其次進行產品的總體設計、分系統或模塊的劃分,設計各接口之間的關系或依賴條件等等,還包括部分的尺寸、重量等等具體的技術指標,完成總體藍圖以及設計計算說明書;
3、然后進行的是分系統的設計-產生分系統的藍圖、設計計算說明書,為簡短起見,我把具體的零件圖完成也加在這部分;
4、組織加工。這個階段完成零件工藝線路、工卡量夾具的設計,零件的加工,產品的裝配;
5、系統的聯調。
6、產品的定型或提交;
整個的階段過程大致如此,我們可以看一下,與軟件開發的步驟非常相似,完全可以將1、2、3、4、5、6分別對應到需求分析、概要設計、詳細設計、編碼與實現、測試、發布。在一個機械產品開發過程中,同樣有與軟件開發過程相對應的職責與角色,如果有必要,可以進一步討論。我個人認為,兩者最大的區別可能在于機械產品開發過程中“工藝線路、工卡量夾具的設計”可能沒有相應的步驟可以對應,這也是造成機械產品開發過程中4步驟所占周期遠大于編碼與實現階段的原因,不過我想這不是一個問題的主要層面,不會對問題的討論產生影響(其實“工藝線路、工卡量夾具的設計”也是一個小的產品開發過程)。
制造業不是一個“智力密集、創造性成分較高的勞動”嗎?如果我們了解了一個產品的開發過程,恐怕會說"Yes",只不過我們經常在流水線的轟鳴聲中忘記了一個背后的事實----任何產品,包括生產線本身,都是人類創造性的結果。其實不止是制造業,電子行業、建筑行業等等,都屬于這種情況。
這里說了這么多,只是想說明對于質量的管理、控制,不是哪一個行業或哪一些人面臨的孤立問題,而且萬變不離其中,任何成功的模式同樣適用于我們自己。還是讓我們來看一看制造業如何進行過程的控制吧。
上面的6個步驟,只是一個開發的流程,對于質量的保證是隨處可見的,我也僅僅舉幾個例子而已。
一、規范的制訂和執行
規范在制造業稱為標準,按不同等級有國標、部標甚至企業自己的標準。
1、規范的產生
制造業的規范和標準由來以久,現在已經是整個行業的標準,這也是一個行業成熟的標志,標準約束的不僅僅是內容的表示方法,而且包括表示的格式,在一張設計圖中中絕對不會出現別人看不懂的符號,而且這些符號的寫法、位置甚至字體都是相同的(這一點任何學過機械制圖的人都應有所體會,程序員的code 格式不也是這樣嗎,很多公司制訂了自己的標準,不過離行業標準還有一定距離)。
2、規范的執行
沒有那一個機械工程師會認為這個規范沒有必要,每個人都會認真的執行----感謝我們的老師在教學中的嚴格要求。在國內的軟件行業規范執行的并不嚴格,是不是和教師的認識和身體力行有關。
3、檢查
規范的執行僅僅有執行的自覺自愿是不夠的,嚴格的復查必須存在。在制造企業通常有標準化檢查的部門(小一點的企業也有專人負責),檢查的內容無非是設計圖紙、計算說明書中的標準執行情況,看看你的設計是否符合國標、部標、企業標準,和軟件公司中QA的角色類似,不過QA還有一些對過程執行情況的檢查,而標準化檢查僅僅關注于標準化的執行。標準化檢查擁有一票否決權,他可以讓你修改、返工----想一想在自己的軟件開發過程中,如果QA指出你的code大括號的位置不對,你是否不屑一顧,甚至你的公司中有沒有人檢查你的編碼格式等等。
二、設計的復查
上面我說了,制造行業中4、組織加工 這一步驟可能耗費大量的人力、物力,因此對設計的復查十分重要。復查可能包括:重新校核、計算你的設計說明書,檢查你的設計圖紙等等(機械的術語我就不多說了),總之一個目的,盡可能減少進入加工階段的設計缺陷。因此在所有設計圖紙和計算說明書上,都可以看到設計者、校核者、批準者的簽名,僅僅簽名一項就是很麻煩的事,由此可見在這方面投入的精力----想一想在自己的企業中是否對概要設計、詳細設計進行了細致到function的設計復查,其實大量的缺陷在這一過程中被發現、糾正,也許是因為軟件的code階段對資源的要求比較小,才養成了很多人的不良習慣,先code再說。
三、測試的問題
這個標題并不準確,因為制造業沒有明確的測試提法,我是套用軟件行業的術語表示問題。不過這沒有關系。
其實在4、組織加工 5、系統的聯調的階段都有測試的內容。加工中可能出現零件的設計不合理,部件無法裝配等等錯誤,即使有了復查這些錯誤也無法全部避免。系統聯調可以發現產品的某些技術指標不能達到要求。系統聯調的測試很多都有標準可循,可以說有很多標準的測試用例,不過更多的測試方法和手段的實現是在系統設計過程中并發進行----想一想你的企業中是否還是由程序員自我測試,至多是交叉測試,有沒有在概要設計的同時設計測試用例和測試方法,測試用例的選取是否與需求緊密結合能夠覆蓋需求。
四、圖紙檔案的管理
還是叫配置管理吧,大家比較習慣。
設計工作結束后,設計圖紙和計算說明書都必須歸檔,因為設計圖紙必須曬圖才能長期保存,可能這使歸檔的工作更容易完成了。設計的復核都是針對曬過的圖紙,也就是歸檔后的圖紙,如果發生錯誤,對不起,小的錯誤可以在圖紙上改過,但是每一處修改都必須注明修改的位置、內容、修改時間、修改人,而且還要有人復核、批準,如果沒有這些,圖紙檔案的管理人員就不會同意,你無法歸檔,不要說獎金,飯碗想一想再說。要是大的錯誤,只好重畫、重寫設計說明書了。在加工過程中難免發生錯誤,修改的過程大致一樣,由于有了專職的圖紙檔案管理人員和嚴格的制度,自然有效解決了版本控制的問題,沒有哪個制造企業找不出幾年前某個產品的設計圖紙,甚至當時的設計者作了什么,有那些錯誤等等都一清二除。這樣不僅僅控制了版本,而且為設計復用提供了保證。
其實改圖紙和設計說明書是很痛苦的事,在手工繪圖的時代,需要做大量的重復性勞動,另外很多人要對無數張圖紙重新審查、簽字認可。即使現在CAD的應用,可能還需要到各處去修改發出的圖紙,能跑細你的腿。相比之下,軟件開發中的管理可以借助很多工具,已經簡單了很多,看來關鍵是制度的建立、實施和檢查----想一想是否有人告訴你,應該從誰那里拿到設計文檔,修改了已經版本化的code后我應做哪些工作,這很多東東我以為應該是新員工培訓的一部分。
五、需求的管理
制造行業中大多產品的需求是以規格、功能、性能指標的形式出現,客戶和廠家對此都非常重視,所以一般比較明確。對這一點我的理解不深,希望大家發表看法,不過竊以為,正是甲乙雙方對需求的不重視,才會出現需求的頻繁變更和難以控制。
六、設計的重用
在機械設計中,經?梢钥吹,借用某零件圖、某部件圖的現象,正是因為良好的設計文檔(對產品的良好描述)以及配置管理,才能作到這一點----想一想你是否希望copy別人的代碼,但是看了半天code,最后還是決定自己去寫。不過設計的重用一個比較難以解決的問題是對產品的描述。
軟件開發的質量管理實際上可以分為工程人員工程素質的提高和制度體系建設兩部分。對于小企業前者是關鍵,由于人力物力有限不可能有完備的質量管理體系,更多依賴開發人員自身的素質保證,因此在團隊建設的初期應該加大工程素質的灌輸力度,通過代碼復查等手段嚴格要求;對于大一些的企業,在提高開發人員工程素質的基礎上,應著重于制度建設,從上直下的建立起一套固定的制度、流程,并與管理人員、開發人員、保證人員緊密結合,使之成為自覺。
在制度建設中不應過度的強調人文精神,因為體系、制度、規范的建設,其目的是:將個人的創造性集中在設計、開發本身,最大程度的減少在流程、表現形式等方面的個人發揮(或隨意性)。簡而言之,將個人的創造性發揮在需要的地方。
文章來源于領測軟件測試網 http://www.kjueaiud.com/