UT覆盖率
2019獨角獸企業重金招聘Python工程師標準>>>
UT覆蓋率
| 目錄??[隱藏]?
 | 
[編輯]單元測試覆蓋率與CI
[編輯]什么是代碼覆蓋率?
代碼覆蓋率指的是一種衡量代碼覆蓋程度的方式,通常會對以下幾種方式進行統計分析:
行覆蓋。它又被稱作語句覆蓋或基本塊覆蓋。這是一種較為常用且具有代表性的指標,度量的是被測代碼中每個可執行語句是否被執行到。
條件覆蓋。它度量的是當代碼中存在分支時,是否能覆蓋進入分支和不進入分支這兩種情況。這要求開發人員編寫多個測試用例以分別滿足進入分支與不進入分支這兩種情況。
路徑覆蓋。它度量的是當代碼中存在多個分支時,是否覆蓋到分支之間不同組合方式所產生的全部路徑。這是一種力度最強的覆蓋檢測,相對而言,條件覆蓋只是路徑覆蓋中的一部分。
在這三種覆蓋指標中,行覆蓋簡單,適用性廣,但可能會被認為是“最弱的覆蓋”,其實不然。行覆蓋相對于條件或路徑覆蓋,可以使開發人員通過盡可能少的測試數據和用例,覆蓋盡可能多的代碼。通常情況下,是先通過工具檢測一遍整個工程單元測試的行覆蓋情況,然后針對沒有被覆蓋到的代碼,分析其沒有被覆蓋到的原因。如果是由于該代碼所在分支由于不滿足進入該分支的條件而沒有被覆蓋,那么開發人員才會進一步修改或增加測試代碼,完成該部分的條件或路徑覆蓋。
可見,高效高質量的行覆蓋是有效進行條件覆蓋與路徑覆蓋的前提。行覆蓋率越高,說明沒有被覆蓋到的代碼越少,這樣開發人員便會集中精力修改測試用例,覆蓋這些數量不多的代碼。相反,如果行覆蓋率低,開發人員需要逐個檢查沒有被覆蓋到的代碼,精力被分散,因此很難提高剩余代碼單元測試的質量。
代碼覆蓋率 = 被測代碼行數 / 參測代碼總行數 * 100%。
[編輯]單測技術框架簡介
[編輯]JUnit:
JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即白盒測試。 使用JUnit時,主要都是通過繼承TestCase類別來撰寫測試用例,使用testXXX()名稱來撰寫單元測試。
官方wiki
建議:了解JUnit框架的原理
[編輯]TestNG:
TestNG是根據JUnit 和 NUnit思想而構建的一個測試框架,但是TestNG增加了許多新的功能使得它變得更加強大與容易使用比如:
- 支持JSR 175注釋(JDK 1.4利用JavaDoc注釋同樣也支持)
- 靈活的Test配置
- 支持默認的runtime和logging JDK功能
- 強大的執行模型(不再TestSuite)
- 支持獨立的測試方法。
官方網站
其他持續化集成工具/平臺:
[編輯]maven
Maven是基于項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。強大的東東!!!!
maven官方網站
Maven安裝教程:Maven的安裝、配置及使用入門
[編輯]sonar
(SonarQube)是一個開源平臺,用于管理源代碼的質量,一言蔽之:sonar是個異常強大的東西。
主要特點:
- ? 代碼覆蓋:通過單元測試,將會顯示哪行代碼被選中
- ? 改善編碼規則
- ? 搜尋編碼規則:按照名字,插件,激活級別和類別進行查詢
- ? 項目搜尋:按照項目的名字進行查詢
- ? 對比數據:比較同一張表中的任何測量的趨勢
Linux下安裝
[編輯]eclipse
是一個開放源代碼的、基于Java的可擴展開發平臺。是一個框架和一組服務,用于通過插件組件構建開發環境。Eclipse 附帶了一個標準和豐富的插件集。
eclipse與sonar的集成?官方指南
[編輯]Jenkins
Jenkins,Hudson發展而來,是基于Java開發的一種持續集成工具,用于監控秩序重復的工作,包括:
Jenkins與sonar的集成:?官方文檔
Jenkins與Cobertura集成?官方指南
[編輯]Cobertura:
Cobertura 是一種開源工具,它通過檢測基本的代碼,并觀察在測試包運行時執行了哪些代碼和沒有執行哪些代碼,來測量測試覆蓋率。除了找出未測試到的代碼并發現 bug 外,Cobertura 還可以通過標記無用的、執行不到的代碼來優化代碼,還可以提供 API 實際操作的內部信息,支持maven。 建議:了解Cobertura與maven結合的pom.xml配置及常用命令;既能夠獨立運行 也能夠CI
sonar分析代碼覆蓋率架構
[編輯]構建UT測試持續化集成環境及覆蓋率監控
驅動方式兩種:
- JUnit驅動
- TestNG驅動
所以需要maven的 pom.xml文件
- 1)通過pom.xml指定cobertura的 plugin和相關屬性
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<sonar.core.codeCoveragePlugin>cobertura</sonar.core.codeCoveragePlugin>
<sonar.cobertura.maxmen>512M</sonar.cobertura.maxmen>
</properties>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId><executions><execution><goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
- 2)通過pom.xml指定單測范圍
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.3</version>
<configuration><includes>
<include>**/*Test*.java</include>
</includes>
</configuration>
</plugin>
- 3)指定cobertura插件:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<executions><execution><goals>
<goal>clean</goal>
/goals>
</execution>
</executions>
</plugin>
- 4)配置maven setting.xml與sonar平臺集成;
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>jdbc:mysql://10.58.11.209:3306/sonar?characterEncoding=utf8</sonar.jdbc.url>
<sonar.jdbc.driverClassName>com.mysql.jdbc.Driver</sonar.jdbc.driverClassName>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>sonar</sonar.jdbc.password>
<sonar.host.url>http://10.58.11.209:9000/</sonar.host.url>
</properties>
</profile>
?
# 觸發方式:maven命令:mvn sonar:sonareclipse soanr插件的安裝,上面已作介紹
Install new software選項安裝-> 插件下載地址:http://dist.sonar-ide.codehaus.org/eclipse/?勾選java版本,如圖:
安裝完畢后需初始化運行mvn命令,這時工程會出現類似maven工程的圖標,然后關聯sonar server。如圖:
配置sonar server,需要sonar管理員添加用戶及權限
出現以下界面,恭喜你集成完成!
?
http://blog.csdn.net/ning109314/article/details/16337115
轉載于:https://my.oschina.net/xiaominmin/blog/1590593
總結
 
                            
                        - 上一篇: xmm1是什么器件_第三章基于Multi
- 下一篇: oracle instant clien
