焦永強(qiáng) 尚穎 李高顯 劉皓潔 王可意
(1.中國航空綜合技術(shù)研究所 北京市 100028 2.北京化工大學(xué) 北京市 100029)
隨著航空裝備日益發(fā)展,航空裝備的規(guī)模越來越大,對軟件的依賴程度也越來越高。針對航空裝備軟件需求變化快、周期短的特點(diǎn),為實(shí)現(xiàn)在短時間內(nèi)對需求變化的快速響應(yīng),并對軟件開發(fā)不斷進(jìn)行迭代,急需一種能夠在短周期內(nèi)提升軟件研制效率的開發(fā)模式——敏捷開發(fā)。 Scrum框架是一種流行且高效的敏捷方法。隨著敏捷開發(fā)在航空裝備軟件研發(fā)中的應(yīng)用,如何保證敏捷開發(fā)模式下的軟件質(zhì)量是一個備受關(guān)注的重要問題。
本文結(jié)合Scrum敏捷開發(fā)在航空裝備軟件的應(yīng)用,提出一種基于Scrum敏捷開發(fā)的測試方法,旨在加快產(chǎn)品交付速度和確保產(chǎn)品穩(wěn)定性,以保證軟件質(zhì)量,為工程實(shí)踐過程中敏捷測試部分提供參考。
隨著信息化和網(wǎng)絡(luò)化的發(fā)展,航空裝備已經(jīng)發(fā)展成為軟件密集型系統(tǒng),軟件負(fù)責(zé)完成航空裝備的大部分功能,軟件在航空裝備中扮演著越來越重要的角色。資料顯示美國的F-22戰(zhàn)斗機(jī)軟件實(shí)現(xiàn)的功能已經(jīng)達(dá)到80%以上,航空裝備軟件的規(guī)模和重要度與日俱增。
由于航空裝備軟件整體規(guī)模大、系統(tǒng)結(jié)構(gòu)復(fù)雜,需求變更和需求改進(jìn)多、研制周期短、使用周期長、配套單位多,各單位承擔(dān)的軟件多以嵌入式小規(guī)模軟件為主。而嵌入式軟件又屬于測試難度較大的類型,故采用敏捷開發(fā)的方法來改善這一狀況。
敏捷方法強(qiáng)調(diào)對需求變更的快速響應(yīng)和快速展現(xiàn)對應(yīng)的軟件模型,敏捷開發(fā)主要具備四個特征。如表1所列。
Scrum是目前最為流行且有效的敏捷方法,該方法將軟件開發(fā)過程分解為多個2周到4周的短周期迭代,每一個迭代稱為一個Sprint。Scrum方法使用列表或計劃(簡稱backlog)進(jìn)行產(chǎn)品需求管理,由產(chǎn)品經(jīng)理定義Product backlog,并設(shè)置需求優(yōu)先級,按照優(yōu)先級順序來實(shí)現(xiàn)需求;開發(fā)team按照優(yōu)先級評估工作量,選擇Sprint backlog。
針對每個Sprint,項目工作流程包括Sprint計劃會議,確定Sprint backlog,制定Sprint計劃;每天召開日會(Daily meeting),交流項目進(jìn)展情況;項目工作的完成情況使用Sprint Burn down(Sprint燃盡圖)統(tǒng)計表示,即用剩余工作量描述工作完成情況;Sprint結(jié)束時召開Sprint評審會議(Sprint review meeting),測試人員向負(fù)責(zé)人及團(tuán)隊其他成員演示當(dāng)前Sprint開發(fā)的功能,評審?fù)ㄟ^后發(fā)布(release)系統(tǒng)可運(yùn)行版本;同時召開Sprint回顧會議,總結(jié)此次Sprint中的工作情況。常見的Scrum開發(fā)模型如圖1所示。
使用Scrum開發(fā)航空裝備軟件能夠較好地適應(yīng)需求變更,提高研發(fā)的效率,縮短研制周期,降低成本。Scrum團(tuán)隊強(qiáng)調(diào)全職能,可促進(jìn)團(tuán)隊高效協(xié)同,提高項目整體效率。
基于Scrum框架進(jìn)行項目開發(fā)中,測試、驗(yàn)收是關(guān)鍵的環(huán)節(jié),且沒有明確定義及規(guī)范。在不同的開發(fā)項目中,測試、驗(yàn)收的設(shè)計與安排可能大不相同,主要體現(xiàn)在測試、驗(yàn)收人員的深入程度、人員數(shù)量、人員專業(yè)程度、被測系統(tǒng)類型、項目的重要程度、項目周期的長短等因素上。
依照Scrum定義, 每次Sprint結(jié)束應(yīng)產(chǎn)生一個可部署的系統(tǒng)版本,因此Sprint的完成標(biāo)志是得到這個通過驗(yàn)收測試的版本,但是根據(jù)實(shí)際經(jīng)驗(yàn)來看基于Scrum的很多項目難以達(dá)到這種水平。
測試驗(yàn)收工作深入到每次Sprint中可有效解決這個問題,因此對測試環(huán)節(jié)提出較高要求,不但需要高效地對每次的增量累加進(jìn)行驗(yàn)證測試,而且需要依據(jù)測試結(jié)果不斷反饋產(chǎn)品問題,以確保在盡可能短的周期頻繁交付可運(yùn)行的軟件產(chǎn)品,并使整體工作符合敏捷特征。
軟件敏捷測試活動主要針對軟件開發(fā)過程中的子活動目標(biāo),測試活動主要包括:
(1)測試提前介入:將測試納入需求或任務(wù)的完成準(zhǔn)則,充分考慮需求的可測試性,根據(jù)需求設(shè)計測試用例或者測試代碼,并使測試代碼和產(chǎn)品代碼共同演化,相互促進(jìn);
(2)持續(xù)集成:以固定的節(jié)奏以及規(guī)定的集成規(guī)則和順序,確保第一時間發(fā)現(xiàn)并修復(fù)代碼中的缺陷,并保持backlog與代碼的一致性;
(3)驗(yàn)收測試:確保每個迭代及每次發(fā)布完成的產(chǎn)品均具備可交付性。
針對航空裝備軟件敏捷測試的問題,基于軟件敏捷測試的原則,設(shè)計一套在航空裝備軟件敏捷開發(fā)過程中應(yīng)用的測試方法和測試流程。
基于需求的軟件敏捷測試過程覆蓋需求確認(rèn)、需求評審、業(yè)務(wù)邏輯、功能、性能、穩(wěn)定性等多種測試類型,因此需確定測試原則,從而提升測試效率。具體的測試原則如下:
首先,在Scrum團(tuán)隊中安排測試角色,測試提前介入,在了解項目開發(fā)內(nèi)容的同時跟進(jìn)每次Sprint迭代的增量,在后期驗(yàn)收測試階段,減少學(xué)習(xí)成本。
其次,測試人員同時需要參與項目的驗(yàn)收工作,在實(shí)際開發(fā)過程中,由于不精確的Sprint Backlog描述,以及開發(fā)人員和測試人員對Sprint Backlog理解分歧,采用測試人員參與驗(yàn)收工作,能及早澄清驗(yàn)收標(biāo)準(zhǔn)并加快驗(yàn)收進(jìn)度。同時可實(shí)現(xiàn)在每個Sprint過程結(jié)束時,得到高質(zhì)量的可部署版本。
再次,測試人員應(yīng)該在Sprint初始階段完成測試準(zhǔn)備工作,包括需求文檔評審,編寫測試規(guī)范,準(zhǔn)備測試用例及測試環(huán)境等;并要求與開發(fā)人員同步作業(yè),以確保完成開發(fā)功能后,以最短時間開展測試計劃,從而縮短整個團(tuán)隊運(yùn)轉(zhuǎn)周期。
最后,測試階段除使用自動化腳本和DevOps工具來提升測試效率之外,在人工測試階段,測試人員可對Scrum team 中成員予以測試指導(dǎo),協(xié)同作業(yè),提高team 自測效率。
航空裝備軟件按照運(yùn)行環(huán)境分為宿主機(jī)和目標(biāo)機(jī),項目初始階段對應(yīng)敏捷方法中Sprint 0或初次迭代,在此階段測試人員根據(jù)宿主機(jī)或目標(biāo)機(jī)設(shè)置測試環(huán)境,進(jìn)行初始需求和體系結(jié)構(gòu)設(shè)計,同時了解項目需要遵循的驗(yàn)收標(biāo)準(zhǔn)。測試人員完成的上述Sprint0準(zhǔn)備工作能夠在項目進(jìn)行階段減少風(fēng)險。
航空裝備軟件多為嵌入式軟件,對運(yùn)行及反應(yīng)時間有嚴(yán)格要求,并且目標(biāo)機(jī)與宿主機(jī)之間存在差異,需要在制定測試計劃、驗(yàn)收標(biāo)準(zhǔn)時,針對軟件實(shí)現(xiàn)詳細(xì)的中斷分析,并對運(yùn)行時間及資源占用情況進(jìn)行判斷。
由于航空裝備軟件需要在海、陸、空等不同外部環(huán)境下運(yùn)行,條件較為惡劣,所以在軟件設(shè)計過程中不僅僅對性能和可靠性有嚴(yán)格要求,同時要求軟件具備一定容錯性。容錯性測試包括但不限于網(wǎng)絡(luò)故障、系統(tǒng)斷電、服務(wù)器失去信號等,因此需要明確測試策略并根據(jù)具體應(yīng)用場景設(shè)計測試用例。
考慮以上因素,提出一種航空裝備軟件敏捷開發(fā)過程的測試方法,將測試工作劃分為項目啟動、持續(xù)集成、同步測試、驗(yàn)收測試、提交與驗(yàn)證和迭代回顧等六個環(huán)節(jié),并細(xì)化各環(huán)節(jié)敏捷測試工作細(xì)則。
(1)項目啟動環(huán)節(jié)主要工作:
圖1:Scrum開發(fā)模型
圖2:敏捷測試流程
1.測試提前介入。測試人員了解項目早期需求,參與功能評審,同項目Scrum成員合作規(guī)劃項目Sprint,并根據(jù)相關(guān)驗(yàn)收標(biāo)準(zhǔn)制定機(jī)載軟件驗(yàn)收計劃;
2.設(shè)置測試環(huán)境與體系結(jié)構(gòu)。由于機(jī)載軟件一般是限制在宿主機(jī)上進(jìn)行測試,為了確保測試的可靠性,需要考慮目標(biāo)機(jī)與宿主機(jī)間的差異,評估其偏差并確定驗(yàn)收標(biāo)準(zhǔn);
3.為項目測試制定詳細(xì)測試計劃說明書。需覆蓋各種測試類型,以及實(shí)時性和容錯性等非功能需求。
(2)持續(xù)集成環(huán)節(jié)主要工作:
1.構(gòu)建測試系統(tǒng),包括編譯代碼及初始化測試數(shù)據(jù)庫;
2.構(gòu)建并運(yùn)行回歸測試套件,根據(jù)項目實(shí)際規(guī)模構(gòu)建套件;
3.執(zhí)行靜態(tài)分析,檢查代碼潛在缺陷或不規(guī)范問題。實(shí)際中可采用自動化測試工具縮短時間。
(3)同步測試環(huán)節(jié)主要工作:
1.在開發(fā)未開始或完全結(jié)束前設(shè)計測試用例,包括功能、性能、穩(wěn)定性、兼容性等內(nèi)容,并與研發(fā)人員共同評審,確保測試需求被正確理解;
2.在開發(fā)階段完成后,使用①中測試用例檢測需求是否滿足;
3.測試人員提供測試結(jié)果,開發(fā)人員依據(jù)測試結(jié)果對現(xiàn)有的代碼進(jìn)行重構(gòu)。
(4)驗(yàn)收測試環(huán)節(jié),測試人員通過測試每次Sprint產(chǎn)品,依據(jù)驗(yàn)收標(biāo)準(zhǔn)判斷是否符合用戶預(yù)期需求及部署要求。針對存在容錯需求的sprint,在此階段應(yīng)提前安排容錯測試。
(5)提交與驗(yàn)證環(huán)節(jié),通過開展驗(yàn)收會議,測試工程師對產(chǎn)品進(jìn)行演示,項目產(chǎn)品負(fù)責(zé)人、產(chǎn)品經(jīng)理、Scrum Master負(fù)責(zé)對產(chǎn)品驗(yàn)收。針對驗(yàn)收結(jié)果,為確保交付達(dá)標(biāo)的Sprint,針對未通過的backlog可采用從當(dāng)前Sprint中刪除,并加入到下次Sprint的backlog中。
(6)迭代回顧環(huán)節(jié),每次Sprint迭代完成后需要進(jìn)行總結(jié)回顧,以促使當(dāng)前項目質(zhì)量特性在下一個版本中能夠繼續(xù)保持與延續(xù)。
基于Scrum的敏捷開發(fā)框架,結(jié)合本文定義的測試原則及方法,明確敏捷開發(fā)過程中的測試流程,如圖2所示。
基于敏捷開發(fā)特性,結(jié)合航空裝備軟件規(guī)模大、系統(tǒng)結(jié)構(gòu)復(fù)雜等特點(diǎn),改進(jìn)基于Scrum敏捷開發(fā)過程的軟件測試方法,該方法強(qiáng)調(diào)測試同步驗(yàn)收和持續(xù)集成的思想,弱化開發(fā)團(tuán)隊中人員身份標(biāo)識,使測試人員可全程參與項目生命周期各階段。從項目整體的角度出發(fā),基于敏捷測試方法有以下兩點(diǎn)優(yōu)勢:
(1)減少項目中學(xué)習(xí)成本,由于人員功能標(biāo)識弱化,開發(fā)人員和測試人員會協(xié)同工作,開發(fā)人員參與測試計劃、用例評審及部分測試執(zhí)行工作;測試人員參與需求評審、指導(dǎo)開發(fā)自測,可幫助操作人員更好地理解需求,在項目的進(jìn)展上面思路保持一致。
(2)可通過每個sprint來合理設(shè)置工作量,提高軟件產(chǎn)品的可視性和質(zhì)量。相對普通的迭代開發(fā),若迭代任務(wù)量大、開發(fā)新特性多,將導(dǎo)致測試周期長,并且可能引發(fā)質(zhì)量問題;若每次迭代的任務(wù)量過少會導(dǎo)致整體進(jìn)度過慢。因此結(jié)合sprint時間盒的限制要求,合理地設(shè)置Sprint工作量可以規(guī)避上述風(fēng)險。
本文結(jié)合航空裝備軟件的特點(diǎn),提出基于Scrum敏捷開發(fā)的軟件測試方法和流程,解決航空裝備軟件研制過程中需求變化多、周期短等問題,在保證提高軟件研制效率和對用戶需求的快速響應(yīng)能力的同時,降低軟件研制成本,使軟件研制與裝備研制能夠更好的協(xié)調(diào)一致。
航空裝備軟件項目開展過程中可根據(jù)軟件工程化的實(shí)際情況形成適用于具體情況的本地化敏捷測試方法,并在工程實(shí)踐中有效、充分的應(yīng)用,對提升我國航空裝備軟件的研制效率有重要意義。該方法應(yīng)在航空裝備軟件研制過程中廣泛推廣和實(shí)施。