一行代碼導(dǎo)致災(zāi)難,一個Bug導(dǎo)致發(fā)射失敗,一個不合格的電容導(dǎo)致產(chǎn)品壽命縮短。這些看似偶然的事件,偏偏又常常真實地發(fā)生了。
即使產(chǎn)品設(shè)計沒有問題,又可能因為不好賣,而沒能給公司帶來豐厚利潤。不但初創(chuàng)的小公司時刻面臨生存的威脅,一些巨無霸公司由于產(chǎn)品決策失誤,陷入困境甚至倒閉的案例也不鮮見。
人們于是想有沒有一種方法,可以幫助我們設(shè)計出又好用,又好賣的產(chǎn)品。我們今天介紹一些前人在這方面探索,主要涉及一些開發(fā)模型,和開發(fā)管理流程。
開發(fā)模型指的是軟件開發(fā)的全部過程、活動和任務(wù)的框架,它規(guī)定了軟件開發(fā)的具體活動和任務(wù),并且以清晰直觀的方式表達出軟件開發(fā)的全部過程。簡單來說,開發(fā)模型是軟件開發(fā)過程的基礎(chǔ)和保障。
開發(fā)流程是指軟件開發(fā)的具體步驟和過程。它包括可行性分析、項目開發(fā)計劃、需求分析、系統(tǒng)概要設(shè)計、系統(tǒng)詳細設(shè)計、編碼、測試等環(huán)節(jié)。這些環(huán)節(jié)是軟件開發(fā)不可或缺的步驟,它們之間的關(guān)系密切,相互銜接,以確保軟件開發(fā)的高效和順利。
幾種典型的開發(fā)模型
瀑布模型
瀑布模型是最經(jīng)典的開發(fā)模型,又稱為線性模型。它把開發(fā)過程分解為按順序進行的六個階段:計劃,需求分析,設(shè)計,實現(xiàn),測試,運行維護。每一個階段完成后,評審?fù)ㄟ^,才能開啟下一階段,一級一級向下進行,如同瀑布。用戶在最后得到一個可用產(chǎn)品。
迭代模型
一個項目被拆解為多個小項目,每個小項目如同一個瀑布模型,都包括需求分析,設(shè)計,實現(xiàn),測試。每個小項目的完成,就可以認為是產(chǎn)品的一次迭代,雖然還不完善,但用戶可以使用。每個小項目可以反復(fù)迭代,整個產(chǎn)品也不斷完善。SpaceX的獵鷹火箭,就是采用了這種迭代方式開發(fā)。所以雖然爆炸了幾次,最終還是成功了。而其它的采用傳統(tǒng)瀑布模型的公司,很多還沒有一次發(fā)射。
除了以上這兩種,還有不少變種,如快速原型模型,螺旋模型,智能模型,增量模型,噴泉模型,V模型,混合模型,演化模型。
開發(fā)管理流程
IPD (Integrated Product Development)
IPD的思想來源于美國PRTM公司出版的《產(chǎn)品及生命周期優(yōu)化法》(Product And Cycle-time Excellence)一書,該書中詳細描述了這種新的產(chǎn)品開發(fā)模式所包含的各個方面。
IBM公司在上世紀90年代遭遇了一次危機,當(dāng)時研發(fā)經(jīng)費開支過高,產(chǎn)品上市時間過長,利潤下降嚴重。作為重振公司的一項重要內(nèi)容,IBM引入了集成產(chǎn)品開發(fā)方法IPD。它由7個方面的內(nèi)容組成:異步開發(fā)與公共基礎(chǔ)模塊、跨部門團隊、項目和管道管理、結(jié)構(gòu)化流程、分析客戶需求的工具($APPEALS)、優(yōu)化投資和衡量指標(biāo) 。其核心為產(chǎn)品開發(fā)由市場驅(qū)動,強調(diào)決策的重要性,更關(guān)注做正確的事。
華為在1998年花重金從IBM引入IPD,經(jīng)過多年優(yōu)化,成為其飛速成長的基石之一。其它比較知名的公司有美的,VIVO,方太等。
CMMI (Capability Maturity Model Integration)
1987年,由美國卡內(nèi)基.梅隆大學(xué)軟件研究所提出CMM,即軟件過程成熟度模型,用于評價軟件承包能力,并幫助其改善軟件質(zhì)量的方法。后推廣至硬件開發(fā),系統(tǒng)集成等更多領(lǐng)域。其核心目的為衡量一個組織的過程能力,并推動其改進。CMMI分為初始級,已管理級,已定義級,已定量管理級,優(yōu)化級等5個等級,其中優(yōu)化級為最高等級。
CMMI主要關(guān)注執(zhí)行,也就是正確地做事。它認為控制好了過程,就可以保證產(chǎn)品交付質(zhì)量。
敏捷開發(fā) (Agile Development)
2001年,煩透了各種開發(fā)管理流程,疲于應(yīng)付各種文檔的17名程序員大佬,聚會于猶他州瓦薩奇山中的一個小酒店,扯起了敏捷開發(fā)的大旗,并發(fā)表了4條宣言:
Individuals and interactions?over processes and tools
(有話您直說,甭瞎扯流程。)
Working software?over comprehensive documentation
(軟件賊好用,文檔如廢紙。)
Customer collaboration?over contract negotiation
(客戶一點頭,合同算個鳥。)
Responding to change?over following a plan
(領(lǐng)導(dǎo)一揮手,馬上跟著走。)
總之,敏捷開發(fā)是一種以人為核心、迭代、循序漸進的開發(fā)方法。在敏捷開發(fā)中,軟件項目的構(gòu)建被切分成多個子項目,各個子項目的成果都經(jīng)過測試,具備集成和可運行的特征。簡言之,就是把一個大項目分為多個相互聯(lián)系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態(tài)。
我們?nèi)绾谓梃b
大公司引入流程,花費巨資的傳聞,有點兒讓小公司望而卻步。但也并不是說只有大公司才需要流程,小公司其實可以根據(jù)自身的情況,做一些借鑒。比如項目需求分析,一開始就和客戶做深入的交流,為客戶周到的考慮,不要到最后發(fā)現(xiàn)某個功能沒實現(xiàn),要過認證時才整改。項目需求形成說明書文檔,設(shè)計實現(xiàn)要跟需求一一對應(yīng)。另外,開發(fā)的每一階段,做一些評審也是很必要的,特別是開發(fā)人員之間的互相檢查(Peer Review),可以把很多問題解決在萌芽狀態(tài)。把開發(fā)分解成并行的過程,并進行關(guān)鍵路徑分析,可以大大縮短研發(fā)周期。
關(guān)注公眾號,掃碼加入嵌入式交流群: