閆鵬斌, 吳 揚, 丘仕能
(1.華北水利水電大學(xué) 信息工程學(xué)院,河南 鄭州 450046; 2.廣西大藤峽水利樞紐開發(fā)有限責(zé)任公司 信息中心,廣西 南寧 530000)
軟件產(chǎn)業(yè)作為我國基礎(chǔ)性和戰(zhàn)略性產(chǎn)業(yè),在促進國民經(jīng)濟和社會發(fā)展中占據(jù)著舉足輕重的地位。優(yōu)良的軟件開發(fā)模型或方法能開發(fā)出高質(zhì)量軟件的基礎(chǔ),保證客戶對交付軟件的滿意度,提升軟件組織整體的核心競爭力,從而促進軟件產(chǎn)業(yè)的蓬勃發(fā)展。
軟件工程的核心任務(wù)之一就是不斷提高軟件產(chǎn)品的質(zhì)量和效率,降低軟件開發(fā)預(yù)算和風(fēng)險,為達到此目的,相關(guān)研究部門的研究者和實踐者提出了眾多的軟件工程方法。1986年,為交付軍方軟件產(chǎn)品,美國卡內(nèi)基·梅隆大學(xué)軟件工程研究所研發(fā)了軟件成熟度模型(Capability Maturity Model for Software,CMMSW),隨后集成多個成熟度模型(Capability Maturity Model Integration,CMMI),其中關(guān)于軟件開發(fā)的成熟度模型用于評價軟件機構(gòu)的軟件過程能力成熟度和指導(dǎo)軟件過程改進,CMMSW/CMMI模型在很大程度上提高了軟件的質(zhì)量與效率,降低了軟件開發(fā)的成本與風(fēng)險。
然而,隨著軟件行業(yè)的飛速發(fā)展,人們對軟件產(chǎn)品的要求越來越高,高質(zhì)量的軟件功能、復(fù)雜的軟件系統(tǒng)、快速變化的軟件需求等,使得軟件組織面臨新的挑戰(zhàn),以Scrum和極限編程為代表的Agile軟件開發(fā)逐漸得到軟件組織的認可,越來越多的軟件組織開始采用Agile軟件開發(fā)。它們以人為核心,采用迭代的、增量的軟件開發(fā)方式,能夠適應(yīng)多變的軟件需求,快速交付高質(zhì)量的工作軟件,實現(xiàn)效益的最大化。
NAGEL R N于1991年在21stCenturyManufacturingEnterpriseStrategy中首次提出敏捷性的概念。2001年2月,BECK K和BEEDLE M等知名軟件工程師、軟件咨詢師共同簽署了“敏捷軟件開發(fā)宣言”[1],代表著一種不同于傳統(tǒng)軟件開發(fā)模型的新的軟件開發(fā)方法的誕生——Agile軟件開發(fā),敏捷軟件開發(fā)宣言的核心體現(xiàn)在“四個價值”和“十二個原則”,其包含的“四個價值”:
1)個體和交互勝過過程和工具;
2)客戶合作勝過合同談判;
3)可以工作的軟件勝過面面俱到的文檔;
4)響應(yīng)變化勝過遵循計劃。
敏捷軟件開發(fā)宣言中的價值觀都是相對的陳述,它們代表的是選擇兩種方法的權(quán)重[2],敏捷軟件開發(fā)宣言的價值觀充分顯示了其以人為本、擁抱變化的核心,“十二個原則”是對Agile軟件開發(fā)價值觀的踐行,其具體內(nèi)容見表1。
表1 Agile軟件開發(fā)的原則Tab.1 Principles of Agile software development
Agile軟件開發(fā)是一種包含軟件開發(fā)過程和項目管理技術(shù)與方法的價值觀、思想,它與傳統(tǒng)的軟件開發(fā)方法的理念是截然不同的,如瀑布模型,瀑布模型采用線性方法,開發(fā)流程為可行性分析、需求分析、概要設(shè)計、詳細設(shè)計、測試、部署及維護,在前期規(guī)劃的基礎(chǔ)上有序地完成每一個步驟,而Agile軟件開發(fā)是非線性方法,它強調(diào)以人為核心,通過自組織團隊、與客戶的密切合作,采用迭代、增量的軟件開發(fā)方式,交付高價值的軟件產(chǎn)品。Agile軟件開發(fā)方法是“輕量級”方法的總稱,包含一系列軟件開發(fā)方法,有Scrum[3-6]、極限編程(Extreme Programming,XP)[6-8]、特征驅(qū)動軟件開發(fā)(Feature Driven Development,F(xiàn)DD)[9]、自適應(yīng)軟件開發(fā)(Adaptive Software Development,ASD)、動態(tài)系統(tǒng)開發(fā)(Dynamic Software Development Method,DSDM)[6]、水晶方法(Crystal Method)、精益軟件開發(fā)(Lean Software Development)[10]等,其中,Scrum和XP方法是最流行與最有效的敏捷項目開發(fā)方法與管理理念。Version One第13敏捷年度報告顯示,Scrum和Scrum/XP混合使用是軟件組織最常用的敏捷方法[11]。
Scrum源于術(shù)語橄欖球,由Sutherland和Schwaber于1995年在美國提出。Scrum包括了一系列實踐和預(yù)定義角色的過程框架,采用迭代、增量的開發(fā)方式,通過內(nèi)部團隊與用戶的高度協(xié)作,專注于交付客戶高價值的軟件產(chǎn)品,并通過開發(fā)過程中的交流和沖刺后的反思、總結(jié)來不斷地提升團隊能力,它能夠很好地應(yīng)對快速變化的需求,頻繁地交付新版本。
當學(xué)生能夠進入教師創(chuàng)設(shè)的情境之中的時候,他們就能夠感受到語文學(xué)習(xí)的興趣,而成功地調(diào)動起學(xué)生的學(xué)習(xí)興趣又能夠更好地展現(xiàn)出多媒體教學(xué)的效果。由于傳統(tǒng)的語文教學(xué)過程中課堂的氛圍相對沉悶,這種沉悶的氣氛對教學(xué)工作的開展和學(xué)生的學(xué)習(xí)相對不利。一些心理學(xué)家通過大量的研究總結(jié)出,良好的課堂氛圍能夠幫助學(xué)生保持輕松的心情,學(xué)生在這種情況下進行學(xué)習(xí)往往能夠得到更好的學(xué)習(xí)效果。農(nóng)村小學(xué)語文教師在對學(xué)生進行教學(xué)的時候可以適當?shù)剡\用多媒體技術(shù),在創(chuàng)設(shè)情境的過程中考慮到學(xué)生的興趣以及學(xué)生的好奇心,構(gòu)建出一種探究的氣氛。
Scrum過程框架定義了實施Scrum的流程,Scrum把整個項目開發(fā)周期分成若干個迭代,稱為Sprint,時間可以根據(jù)項目需求制定為1~4 w,開發(fā)團隊根據(jù)產(chǎn)品待開發(fā)項的優(yōu)先級開發(fā)級別高的條目,通過Sprint評審會審核本次Sprint成果是否達到了效果或重新放入到項目待開發(fā)列表中,圖1描述了Scrum的過程框架。
圖1 Scrum過程框架Fig.1 Framework of Scrum process
2.2.1 Scrum團隊中的4個主要角色
1)產(chǎn)品負責(zé)人:根據(jù)客戶的需求和關(guān)注點定義產(chǎn)品功能,創(chuàng)建產(chǎn)品BackLog并維護Sprint BackLog優(yōu)先級,在每次迭代交付時間同客戶一起評審迭代成果。
2)敏捷教練:敏捷教練向每個參與者宣傳Scrum的含義、規(guī)則,使每一位參與者遵循Scrum的實踐,并為團隊的相互協(xié)作提供必要的幫助,以保障Scrum開發(fā)的順利實施。
3)開發(fā)團隊:開發(fā)團隊是人數(shù)在5~9人范圍內(nèi)的跨職能、自組織的團隊,主要任務(wù)是把產(chǎn)品待開發(fā)事項轉(zhuǎn)化為功能增量,確保完成每個Sprint的功能。
4)客戶:主要負責(zé)向產(chǎn)品負責(zé)人傳達產(chǎn)品的需求和關(guān)注點,確認優(yōu)先級、產(chǎn)品的發(fā)布時間以及驗收每次的迭代成果。
2.2.2 Scrum開發(fā)流程包含的4個儀式
1)每日站立會議:每日站立會議是團隊成員匯報完成進度、遇到的問題以及調(diào)整計劃的會議,通過團隊成員間的交流和溝通,提高團隊開發(fā)效率,時間控制在15 min。
3)迭代評審會議:團隊成員向產(chǎn)品負責(zé)人及利益相關(guān)者展示本次迭代實現(xiàn)的增量,通過參會人員的反饋,決定本次迭代的增量是否符合迭代計劃會議做出的承諾。
4)迭代回顧會議:參會人員通過回顧本次沖刺過程,討論在本次沖刺過程中需要改進的地方和需要保留的地方,這種方式有助于團隊的持續(xù)改進和優(yōu)化。
2.2.3 Scrum開發(fā)流程包含的3個工件
1)產(chǎn)品待辦事項列表:產(chǎn)品負責(zé)人根據(jù)估算把初期的規(guī)劃適當?shù)胤纸獬梢粋€個待辦事項,并按照價值、復(fù)雜性以及風(fēng)險進行優(yōu)先級排序,它是一個持續(xù)完善的動態(tài)列表。
2)Sprint待辦事項列表:通過Sprint計劃會由參會人員共同決定的用戶故事,它是具體的Sprint實施計劃。優(yōu)先級越高的產(chǎn)品待辦事項會越早被選為Sprint待辦事項。
3)Sprint燃盡圖:燃盡圖是用于跟蹤Sprint沖刺的可視化視圖,通過燃盡圖可以了解到已完成的工作、將要完成的工作及時間,用來衡量本次Sprint實施與計劃的一致性。
XP由BECK K在1996年提出。極限編程是一個輕量級的、靈巧的軟件開發(fā)方法,同時也是一個非常嚴謹、科學(xué)的方法[12]。XP采用迭代、增量的軟件開發(fā)方式,通過持續(xù)不斷的測試結(jié)果和反饋進行修復(fù),適合周期短、設(shè)計簡單、輕量型的軟件開發(fā),它有5個非常重要的核心要素,分別是溝通、尊重、簡明、反饋和鼓勵[13]。
表2 XP的核心實踐Tab.2 The core practices of XP
XP由一系列簡單卻相互依賴的實踐集合組成,這些實踐結(jié)合成優(yōu)于部分結(jié)合的整體[14],XP提出的核心實踐為軟件開發(fā)提供了指導(dǎo),開發(fā)團隊在XP思想下根據(jù)具體情況可以靈活修改規(guī)則,表2描述了XP的核心實踐[15]。
Version One作為敏捷調(diào)查報告的提供者,在探索敏捷趨勢方面有較高權(quán)威,Version One的第12、13敏捷年度報告[11,16]顯示,使用Agile軟件開發(fā)的益處主要表現(xiàn)在兩方面:一方面表現(xiàn)為下降或降低的,比如開發(fā)項目的風(fēng)險、開發(fā)項目的成本、向客戶交付成果的時間等;另一方面表現(xiàn)為提高或增強的,比如軟件質(zhì)量、團隊生產(chǎn)力和效率、軟件可維護性等。圖2描述了第13敏捷年度報告中使用Agile軟件開發(fā)的益處[11]。從圖2可以看出Agile軟件開發(fā)在很多方面提高了軟件的成功率,但單一的軟件開發(fā)方法或技術(shù)并不能完全解決軟件開發(fā)所面臨的問題,Agile軟件開發(fā)關(guān)注的是項目開發(fā)流程和項目管理,它適合小型團隊迭代、增量開發(fā),它缺乏對整個軟件組織持續(xù)改進、優(yōu)化的能力,只有整個軟件組織能力得到提升才能提高核心競爭力,具有軟件過程能力評價和指導(dǎo)過程改進功能的CMM/CMMI成熟度模型可以作為一個很好的補充。
圖2 使用Agile軟件開發(fā)的益處Fig.2 Benefits of using Agile software development
CMM/CMMI和敏捷軟件開發(fā)模型相結(jié)合使用的反對態(tài)度一直存在,但有許多國內(nèi)外研究者和實踐者證實了它們是可以相互結(jié)合使用的。CMMI研究機構(gòu)指出,2015年約70%的軟件評估組織使用一種或多種Agile軟件開發(fā)方法,在最新發(fā)布的CMMI V2.0版本中,明確提出了指導(dǎo)Agile軟件開發(fā)的使用,并有許多文獻[17-22]提出將CMM/CMMI和Agile軟件開發(fā)結(jié)合使用,以促進軟件組織整體能力的提升,并根據(jù)實際案例效果進行了驗證。雖然在敏捷軟件開發(fā)和CMM/CMMI成熟度模型可以結(jié)合使用方面的證據(jù)有很多,他們驗證了在大范圍下某些方面可以結(jié)合使用或兼容性較低,但是并沒有說明CMM/CMMI成熟度模型和敏捷軟件開發(fā)在模型和過程之間詳細的映射關(guān)系,這也正是筆者下一步要研究的工作。
Agile軟件開發(fā)的價值觀和實踐原則在很大程度上改善了軟件開發(fā)的質(zhì)量和效率,降低了軟件的開發(fā)成本和項目風(fēng)險,提升了客戶的滿意度,被越來越多的軟件組織采用。但是,Agile軟件開發(fā)沒有關(guān)注軟件組織層次的管理。通過CMM/CMMI與Agile軟件開發(fā)的結(jié)合使用,消除兩者在某些方面的矛盾,相互補充,發(fā)揮各自的優(yōu)勢,共同提高軟件組織的整體組織能力。