嵌入式系统如何进行测试?
首先,質量是設計出來的,而不是測試出來的。
我先說一些我的一些經驗,之后想擴展到“嵌入式系統如何保證軟件質量?”的問題。因為測試只是方法,質量才是目的。
解決問題的思路有如下幾個
- 很多情況下不可能完全實現自動化測試或者成本太高,那么就通過
- 減少進行一次完整測試所用的時間和資源,提高人工測試的效率
- 將可自動測試的部分從整體中分離出來獨立測試,剩下的人工測試
- 將整個系統分解為多個子系統進行獨立的測試
- 將系統分解為設備相關和設備無關分開測試
- 設備無關的部分做自動化測試
- 設備相關的部分人工測試,每次設備條件變化時再進行獨立測試
- 構建多個獨立的測試程序在設備上逐個運行,每個這樣的測試程序只需得出PASS或者FAIL的結果即可.
- 利用高級語言及其豐富的庫提高測試效率
一些嵌入式軟件測試的個人經驗
用高級語言實現自動化測試
很多時候當手工測試已經占用了很多時間的時候,需要將其轉換為自動化腳本。我最常用的就是基于Python的unittest,配合pexpect等工具,在加上強大的各種Python庫,來實現自動化測試。
(慢慢補充)
利用好各種工具
- Wall - 永遠開著Wall,提交前永遠對Warning零容忍,別讓他破窗。
- Valgrind - 內存泄露以及各種測試
- 如果你做的是開源項目,那么有以下互聯網工具
- GitHub這個還用說么?
- travis-ci - 最有名的免費持續集成工具了,可以和GitHub綁定,每次提交都可以直接構建和測試,甚至交付
- http://coveralls.io - 基于travis-ci,在測試之后可以將覆蓋率報告上傳到http://coveralls.io,將會生成覆蓋率報告。
- 對于公司內部,有
- GitLab - 非常好的GitHub替代
- 持續集成(CI)
- Jenkins CI -
- Gitlab CI
談談嵌入式軟件的質量問題
在像IC設計這樣的硬件設計中,對正確性的要求是非常高的,因為一次性的投產費用高達數萬美元至百萬美元。而軟件因為錯了可以修改,所以有不同的質量要求。互聯網的興起從一定程度上降低了軟件質量的水平,因為只要是非關鍵系統,有bug你可以隨時升級。但是對于嵌入式來說,大部分產品賣出去就很難在升級了,比如電飯煲和家用電器這樣的產品。所以對于質量的要求高于互聯網,而低于硬件產品。
說了一段廢話,其實我想引入IC設計中的一個概念,叫做可測性設計(Design for Test)。意思很簡單,設計的時候就要為測試考慮。而不要等編碼完了之后在去想怎么去測,這個時候測試的成本就是不可預期的了。
嵌入式系統的持續集成
持續集成(Continuous Integration(CI))和持續交付(Continuous Delivery(CD))是現代軟件開發中兩個非常重要的概念。集成是完成交付和部署的前置條件,實現持續交付最大的難點是如何配置正確的持續集成流程。目前,在服務器以及Web系統上的軟件進行部署比較簡單,但在嵌入式系統上持續集成則成為了較為棘手的問題。
1.嵌入式系統的持續集成
軟件開發過程中,開發方式及開發工具是至關重要的。在嵌入式開發時,嵌入式系統的仿真往往在硬件開發中被忽略:開發人員在開發過程中不進行版本管理,直接將現有的源碼作為下一輪迭代的基礎;若未經過測試,當程序出現bug時,想要回退到之前的版本便較為復雜。開發嵌入式軟件時構建持續集成流程的必要性顯而易見。
持續集成流程如下圖所示:創建一個單獨的開發分支,用于在源碼提交后進行集成;創建另一條分支用于異步執行主要持續集成流。
▲圖 1:嵌入式仿真軟件持續集成流程圖
該流程的目的是將提交代碼、集成代碼以及構建的基本開發流與主要持續集成流分開,避免因長時間的持續集成而耽誤開發進度。
2.解決硬件問題的工具
目前,嵌入式系統持續集成的核心是需要一個“類生產環境”,指需要在確保無限接近真實的環境中穩定運行軟件。然而,實際操作中存在諸多問題:硬件的開發周期過長、軟件不穩定等。
嵌入式仿真軟件的出現解決了以上問題,該平臺與真實環境足夠接近,可以運行真實代碼進行功能測試。
代碼運行的問題解決后,嵌入式仿真軟件持續集成的下一部分內容,就是確保代碼獲得合理的輸入內容。嵌入式仿真軟件不僅涉及與其他代碼、計算機系統間的通信,還涉及通過接口和其他環境間的通信。測試時需要通過真實系統中使用的硬件接口向被測系統發送數據。因此,嵌入式系統的實際物理測試環境需要滿足以下需求:
1.提供合適的硬件環境來進行測試;
2.將軟件加載到硬件上——難度取決于軟件堆棧的性質;
3.集成環境——搭建合理的硬件環境,并能夠提供合理的激勵,保證軟件能像在真實環境中一樣運行,并觀察運行情況。
典型的集成環境如下所示:
?▲圖 2:典型集成環境
模擬硬件系統的仿真平臺可將外部環境模擬和虛擬硬件系統的平臺模型結合,方便開發人員將整個系統環境仿真成可以在任何服務器或者PC機上運行的軟件工作。測試系統的可用性得到了提升,測試進度也得到了保障。
總結
以上是生活随笔為你收集整理的嵌入式系统如何进行测试?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猎豹浏览器收藏内容恢复
- 下一篇: UFT(QTP) 录制 回放 原理