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

圖1:Scrum開發(fā)模型

圖2:敏捷測(cè)試流程
1.測(cè)試提前介入。測(cè)試人員了解項(xiàng)目早期需求,參與功能評(píng)審,同項(xiàng)目Scrum成員合作規(guī)劃項(xiàng)目Sprint,并根據(jù)相關(guān)驗(yàn)收標(biāo)準(zhǔn)制定機(jī)載軟件驗(yàn)收計(jì)劃;
2.設(shè)置測(cè)試環(huán)境與體系結(jié)構(gòu)。由于機(jī)載軟件一般是限制在宿主機(jī)上進(jìn)行測(cè)試,為了確保測(cè)試的可靠性,需要考慮目標(biāo)機(jī)與宿主機(jī)間的差異,評(píng)估其偏差并確定驗(yàn)收標(biāo)準(zhǔn);
3.為項(xiàng)目測(cè)試制定詳細(xì)測(cè)試計(jì)劃說明書。需覆蓋各種測(cè)試類型,以及實(shí)時(shí)性和容錯(cuò)性等非功能需求。
(2)持續(xù)集成環(huán)節(jié)主要工作:
1.構(gòu)建測(cè)試系統(tǒng),包括編譯代碼及初始化測(cè)試數(shù)據(jù)庫;
2.構(gòu)建并運(yùn)行回歸測(cè)試套件,根據(jù)項(xiàng)目實(shí)際規(guī)模構(gòu)建套件;
3.執(zhí)行靜態(tài)分析,檢查代碼潛在缺陷或不規(guī)范問題。實(shí)際中可采用自動(dòng)化測(cè)試工具縮短時(shí)間。
(3)同步測(cè)試環(huán)節(jié)主要工作:
1.在開發(fā)未開始或完全結(jié)束前設(shè)計(jì)測(cè)試用例,包括功能、性能、穩(wěn)定性、兼容性等內(nèi)容,并與研發(fā)人員共同評(píng)審,確保測(cè)試需求被正確理解;
2.在開發(fā)階段完成后,使用①中測(cè)試用例檢測(cè)需求是否滿足;
3.測(cè)試人員提供測(cè)試結(jié)果,開發(fā)人員依據(jù)測(cè)試結(jié)果對(duì)現(xiàn)有的代碼進(jìn)行重構(gòu)。
(4)驗(yàn)收測(cè)試環(huán)節(jié),測(cè)試人員通過測(cè)試每次Sprint產(chǎn)品,依據(jù)驗(yàn)收標(biāo)準(zhǔn)判斷是否符合用戶預(yù)期需求及部署要求。針對(duì)存在容錯(cuò)需求的sprint,在此階段應(yīng)提前安排容錯(cuò)測(cè)試。
(5)提交與驗(yàn)證環(huán)節(jié),通過開展驗(yàn)收會(huì)議,測(cè)試工程師對(duì)產(chǎn)品進(jìn)行演示,項(xiàng)目產(chǎn)品負(fù)責(zé)人、產(chǎn)品經(jīng)理、Scrum Master負(fù)責(zé)對(duì)產(chǎn)品驗(yàn)收。針對(duì)驗(yàn)收結(jié)果,為確保交付達(dá)標(biāo)的Sprint,針對(duì)未通過的backlog可采用從當(dāng)前Sprint中刪除,并加入到下次Sprint的backlog中。
(6)迭代回顧環(huán)節(jié),每次Sprint迭代完成后需要進(jìn)行總結(jié)回顧,以促使當(dāng)前項(xiàng)目質(zhì)量特性在下一個(gè)版本中能夠繼續(xù)保持與延續(xù)。
基于Scrum的敏捷開發(fā)框架,結(jié)合本文定義的測(cè)試原則及方法,明確敏捷開發(fā)過程中的測(cè)試流程,如圖2所示。
基于敏捷開發(fā)特性,結(jié)合航空裝備軟件規(guī)模大、系統(tǒng)結(jié)構(gòu)復(fù)雜等特點(diǎn),改進(jìn)基于Scrum敏捷開發(fā)過程的軟件測(cè)試方法,該方法強(qiáng)調(diào)測(cè)試同步驗(yàn)收和持續(xù)集成的思想,弱化開發(fā)團(tuán)隊(duì)中人員身份標(biāo)識(shí),使測(cè)試人員可全程參與項(xiàng)目生命周期各階段。從項(xiàng)目整體的角度出發(fā),基于敏捷測(cè)試方法有以下兩點(diǎn)優(yōu)勢(shì):
(1)減少項(xiàng)目中學(xué)習(xí)成本,由于人員功能標(biāo)識(shí)弱化,開發(fā)人員和測(cè)試人員會(huì)協(xié)同工作,開發(fā)人員參與測(cè)試計(jì)劃、用例評(píng)審及部分測(cè)試執(zhí)行工作;測(cè)試人員參與需求評(píng)審、指導(dǎo)開發(fā)自測(cè),可幫助操作人員更好地理解需求,在項(xiàng)目的進(jìn)展上面思路保持一致。
(2)可通過每個(gè)sprint來合理設(shè)置工作量,提高軟件產(chǎn)品的可視性和質(zhì)量。相對(duì)普通的迭代開發(fā),若迭代任務(wù)量大、開發(fā)新特性多,將導(dǎo)致測(cè)試周期長(zhǎng),并且可能引發(fā)質(zhì)量問題;若每次迭代的任務(wù)量過少會(huì)導(dǎo)致整體進(jìn)度過慢。因此結(jié)合sprint時(shí)間盒的限制要求,合理地設(shè)置Sprint工作量可以規(guī)避上述風(fēng)險(xiǎn)。
本文結(jié)合航空裝備軟件的特點(diǎn),提出基于Scrum敏捷開發(fā)的軟件測(cè)試方法和流程,解決航空裝備軟件研制過程中需求變化多、周期短等問題,在保證提高軟件研制效率和對(duì)用戶需求的快速響應(yīng)能力的同時(shí),降低軟件研制成本,使軟件研制與裝備研制能夠更好的協(xié)調(diào)一致。
航空裝備軟件項(xiàng)目開展過程中可根據(jù)軟件工程化的實(shí)際情況形成適用于具體情況的本地化敏捷測(cè)試方法,并在工程實(shí)踐中有效、充分的應(yīng)用,對(duì)提升我國(guó)航空裝備軟件的研制效率有重要意義。該方法應(yīng)在航空裝備軟件研制過程中廣泛推廣和實(shí)施。