張萍
隨著移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、大數(shù)據(jù)、云計算等信息技術(shù)的發(fā)展,人們對軟件產(chǎn)品和軟件服務(wù)日益增長的需求與相對緩慢的開發(fā)交付能力之間的矛盾愈發(fā)凸顯。本文從軟件開發(fā)的本質(zhì)屬性談起,從軟件項目管理、軟件過程改進、軟件行業(yè)對CMMI的曲解等方面探討工程化的軟件開發(fā)方法。
隨著移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、大數(shù)據(jù)、云計算等信息技術(shù)的發(fā)展,信息化不斷跨越行業(yè)間的壁壘,快速開發(fā)及交付高質(zhì)量的軟件產(chǎn)品成為企業(yè)管理中切實的需求。
軟件開發(fā)的不可見性是軟件的固有屬性,不會因軟件項目的不同而變化,該屬性使得軟件的開發(fā)難度增加,所以需要有科學(xué)的方法去管理軟件開發(fā)的過程。
提及軟件項目管理,不免會提及業(yè)內(nèi)較知名的PMP認證。PMBOK源于軟件項目的管理實踐,將軟件項目管理分解成5大過程組10大知識領(lǐng)域,如圖1所示。
PMBOK其實按項目的時序進展,可細分為從制定項目章程開始,到結(jié)束項目階段的49個過程。項目經(jīng)理要把握階段并確保每一階段的交付物,把控好項目節(jié)奏,以達到項目完成,相關(guān)方滿意的雙重目標。
廣義的過程一般包含:過程、人、技術(shù)三要素。我們可以把技術(shù)看做武器、工具,對于人,我們要考慮其資質(zhì)、天賦,而過程我們可以看做為武功秘籍,如圖2所示。有天賦的人,擁有了合適的武器和武功秘籍,才能成為百戰(zhàn)不殆的高手,軟件開發(fā)也如此。
軟件過程改進,顧名思義,改進的對象是軟件過程,目的是使得軟件開發(fā)過程的績效持續(xù)改進。若是將軟件開發(fā)過程類比成制造業(yè)的產(chǎn)品生產(chǎn),軟件過程改進則可視同為是對產(chǎn)品的生產(chǎn)流水線的設(shè)計、建設(shè)、維護、升級及優(yōu)化。
軟件開發(fā)行業(yè),鮮有國家標準或地方標準,最多有一些國家的推薦標準,為了促進軟件開發(fā)過程的標準化,更好地進行軟件過程改進,我們在積累軟件相關(guān)活動的經(jīng)驗教訓(xùn)時,形成了不少可以參考的模型和方法,其中最有名當屬CMMI(能力成熟度模型集成)了。但企業(yè)實踐中,不少人甚至從事軟件行業(yè)多年的工程師都對CMMI都仍有一定的曲解,例如:
(一)將CMMI 視為一種重型軟件過程
實際上CMMI 模型首先要求一個軟件企業(yè)應(yīng)該自己先定義適合本軟件企業(yè)的軟件過程,并應(yīng)不斷優(yōu)化改進該過程。但是,我們往往在實踐中,為了迎合咨詢企業(yè)的基于CMMI 模型的“證據(jù)驗證”評估方法,刻意準備了大量文檔化的證據(jù),以致CMMI 被視作必須在軟件項目管理中必須滿足的某種標準(這一點類似于ISO系列標準的貫標審核)。顯然,這是對CMMI 模型目標和使用方法的曲解。
(二)將CMMI作為檢驗軟件過程優(yōu)劣的標準
由于各個企業(yè)所處的環(huán)境、目標等方面的差異,過程改進對于不同企業(yè)的意義也不一樣。所以,CMMI的成熟度等級不適用于脫離企業(yè)環(huán)境直接橫向比較;同樣的,即使處于同一CMMI成熟度級別的,也并不能說明這些企業(yè)的研發(fā)能力一樣。
(三)將CMMI 與其他軟件過程或者軟件開發(fā)方法的進行比較
不少人經(jīng)常會將CMMI 作為敏捷方法的對立面,試圖來解釋和說明敏捷方法的優(yōu)勢。實際上,這種場景下所謂的“CMMI 方法”已經(jīng)不是一個過程改進的參考模型了,而是特定軟件企業(yè)為了滿足CMMI 評估需要所定義出來的具體的軟件過程。顯而易見的,這是再用這個狹義的軟件過程的缺點視作整個CMMI 模型的缺點是不合適的。
為了滿足工程化管理軟件開發(fā)的需求,不僅要關(guān)注軟件項目本身的管理,還要關(guān)注軟件過程的改進。工程化管理軟件開發(fā)需要在實踐中以系統(tǒng)性的、規(guī)范化的、可定量的過程化方法去開發(fā)和維護軟件,以及把經(jīng)過時間考驗而證明正確的管理技術(shù)和當前能夠得到的最好的技術(shù)方法結(jié)合,從而有效地為工程化管理服務(wù)。
隨著業(yè)務(wù)不斷發(fā)展的迫切需求,無論信息化系統(tǒng),還是軟件管理方法,模式都需要不斷隨之演進發(fā)展。
去中心化,關(guān)注安全,XaaS,即刻運維,即時開發(fā)……這些業(yè)務(wù)和需求的演進,都催生了DevOps的出現(xiàn),它促使軟件開發(fā)與其他工程的更集成,更規(guī)范。圖3是典型的Devops軟件持續(xù)集成過程。
Devops是一種文化,一種方法論,是工具鏈的高效集成。它從解決方輪子困局:各項目長期急于趕工,積累大量技術(shù)債;以及谷倉困局:各部門重復(fù)造輪子,資源共享困難,以業(yè)務(wù)平臺的需求—聚焦數(shù)據(jù)應(yīng)用為基礎(chǔ),重點解決業(yè)務(wù)平臺的研發(fā)規(guī)范化、組件的復(fù)用性、共性能力服務(wù)化、優(yōu)化開發(fā)測試以及運維流程等痛點問題,將開發(fā)和運維打通起來,成為一個大閉環(huán):計劃→開發(fā)→構(gòu)建 →測試→發(fā)布→部署→運維→監(jiān)控→數(shù)據(jù)收集→計劃,通過這個閉環(huán),加之開發(fā)和運營團隊的合作來支持軟件產(chǎn)品的迭代開發(fā)和持續(xù)交付的能力,從而緩解人們對軟件產(chǎn)品和軟件服務(wù)日益增長的需求與相對緩慢的軟件產(chǎn)品和軟件服務(wù)開發(fā)能力之間的矛盾,最終達到提高研發(fā)效率,實現(xiàn)快速交付等目的。
作者單位:中通服咨詢設(shè)計研究院有限公司