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