徐繼蕓



摘要
傳統嵌入式系統的開發,受到目標平臺多樣、開發工具不完善、需要軟硬件協同開發等因素影響,往往開發周期較長,效率較低。同時,一個產品線下的研發團隊多以項目組為單位獨立開發,項目組之間缺乏有效的溝通和技術共享,導致重復開發,基礎模塊升級、維護不同步等問題。通過開發以通用構建模塊為基礎的產品平臺可以有效減少重復開發,提升產品研發效率。同時,在嵌入式產品平臺的開發中,通過合理的系統架構,綜合使用測試驅動開發,持續集成等敏捷開發方法和工具,提升產品平臺開發效率,保障產品平臺質量。
【關鍵詞】嵌入式 產品平臺 敏捷開發 持續集成 通用構建模塊 測試驅動開發
1 引言
對于一個有多個類似產品的產品線,構建一個以通用構建模塊為基礎的產品平臺,可以加快產品開發速度,降低產品開發成本,控制風險。
產品平臺的目標是將產品線成熟的CBB(Comnion Building Block,通用構建模塊)抽取(抽象、重構)出來,提供給應用開發人員使用。一方面避免重復開發基礎模塊,減輕應用開發的復雜度和工作量;另一方面,也避免了多個項目組各自封閉開發導致基礎模塊升級,Bug修改不同步等問題。
產品平臺的核心是通用構建CBB,CBB的核心是共性和可變性分析(Commonality and Variablity Analisys)。
下面介紹構建產品平臺的核心要點,以及相關的流程、方法和工具。
2 產品平臺總體架構
針對中大型嵌入式產品平臺,架構需要遵循如下2條核心原則:
2.1 分層
為了保持良好的結構,對于較大型系統的產品平臺,邏輯架構一定需要分層、分包(包,在C++代碼中對應的是namespace)設計。越底層,模塊功能越趨向工具,越高層,越趨向業務邏輯。
2.2 平臺無關設計
平臺無關設計對于嵌入式平臺非常重要,目的是切換硬件平臺后,產品平臺、應用程序無需改動,只需要針對目標平臺做一個實現即可。一般使用依賴倒置的設計方法實現平臺無關。
產品平臺邏輯架構圖如圖1產品平臺邏輯構架圖所示。
3 產品平臺的開發方法和工具
一個典型的嵌入式產品平臺物理架構視圖如圖2。
4 CBB開發流程
CBB是產品平臺的核心組成,CBB開發流程如下:
(1)模塊需求分析;
(2)模塊設計;
(3)模塊接口設計;
(4)編寫接口測試用例,偏重可用性測試(即TDD,可有效幫助接口設計);
(5)模塊設計評審;
(6)編碼;
(7)完善單元測試用例。
需要說明的是步驟4,即TDD(Test-driven Development)——測試驅動開發。測試驅動開發是極限編程中倡導的軟件開發方法,測試驅動開發的目的是取得快速反饋,并使用說明主線(illustrate the main line)的方法來構建程序。
經典的測試驅動開發流程,如圖3測試驅動開發(TDD)流程圖所示。
為了更敏捷的做設計評審,在設計階段,可以使用TDD來完善接口設計,我們稱之為TDDesign(測試驅動設計),優化的TDD如圖4CBB開發中的測試驅動(TDD)開發流程圖所示。
即,在接口設計完成后,實現前,先利用單元測試框架,根據業務流,調用接口寫幾個單元測試用例。
在實踐中TDD的好處很明顯:在寫TDD測試用例的過程中就可能發現接口設計的不合理。而且,對于持續集成的系統,TDD也并沒有增加工作量。
另一個需要特別說明是步驟5:對設計評審的關注。要求的設計評審內容:
(1)總體說明(若結構復雜則需有邏輯架構視圖);
(2)接口使用示例;
(3)類圖,序列圖(UML);
(4)設計決策;
(5)接口(直接附頭文件,不要粘貼到設計文檔)。
設計評審保證了CBB的設計質量,不會因為團隊成員素質的不同而出現重大的設計問題。
CBB代碼上傳到代碼倉庫后,剩下的就是自動化工具的工作了:依次自動觸發單元測試,集成測試,發布測試,最后郵件發送集成結果給開發人員。
5 持續集成流程
持續集成流程如圖5所示。
集成測試除了集成測試用例外,還復用單元測試的測試用例。集成測試運行單元測試的用例時,并非順序運行所有模塊(每個模塊初始化,測試,反初始化后再運行下個模塊),而是通過配置一定的依賴關系和策略,初始化一系列模塊后,運行測試用例,最后,再反初始化這些模塊。
6 發布流程
發布流程如圖6所示,自動化打包,并對發布包從用戶使用的過程測試一遍。發布流程每天構建,以保證每天都處于可發布狀態。所有過程均自動化。
7 主要工具
幾個關鍵的工具:
(1)Jenkins:做持續集成工具,使用腳本輔助實現嵌入式系統的遠程部署測試。
(2)GTest:Google的單元測試框架。
(3)CMake:高效友好的自動編譯工具,優于configure/make。
(4)Doxygen:自動生成接口說明,當然前提是規范好代碼的接口說明格式。
(5)MediaWiki:wiki工具,做CBB發布和技術文檔的發布平臺。人人貢獻的思想是推崇提倡的。
8 總結
本文介紹的嵌入式產品平臺已經在星網視易公司的KTV產品線得到應用,傳統上,該產品線一款基于全新硬件平臺的系統,開發周期大概需要10?12個月,而基于產品平臺,產品開發效率、質量顯著提升,芯片平臺切換時間大幅縮短至約原來的1/4。
實踐證明,一個產品線下多個產品并行開發時,使用產品平臺,可以大幅加快產品開發效率、提升質量、降低成本。同時,合理的系統架構,并輔以敏捷方法的使用,可以極大加快產品開發效率。
參考文獻
[1]Duvall? Paul M,,Steve Matyas,and Andrew Glover. Continuous integration: improving software quality and reducing risk [M]. Pearson Education, 2007.
[2]Beck,Kent.Test-driven development: by example[M] . Addison-Wesley Professional, 2003.
[3]徐仕成.持續集成在現代軟件開發中的應用與研究[D].中南大學,2007.
[4]紀海.基于云計算的產品平臺設計服務研究[D].機械科學研究總院,2012.
[5]戴建國,趙慶展,郭理,秦懷斌.持續集成在項目開發中的應用研究[J].計算機工程與設計,2009(10):2573-2576.
[6]Marta Larusdottir, Jan Gulliksen, Asa Cajander. A License To Ki11-Improving UCSD In Agile Development[J]. The Journal of Systems & Software,2016.
[7]GB/T 22033-2008《信息技術嵌入式系統術語》概要[J].信息技術與標準 化,2009(08):38-40.
[8]A g i1e software development,wikipedia.org[EB/0L].http:// en.wikipedia.org/wiki/Agile_ software-development.
[9]Test-driven development,wikipedia. org [EB/OL] . http: //en. wikipedia. org/ wiki/Agile_sof tware-development.