Ⅰ 有沒有技術大牛了解java開發,測試和CI的關
大家可能對如下情景比較熟悉:
如果開發過SSH的web項目,啟動伺服器可能會比較慢,有的項目甚至需要1分多鍾,甚至更多,這個啟動時間的等待一般就浪費了;
在開發項目時,有些功能比較復雜,當時覺得思路特清晰,但是過了一段時間後,自己也忘了,完善功能時頻繁出現bug,降低開發速度;
在維護項目時,不知道自己修改的對還是不對,是否存在隱患;維護速度降下來了;
在團隊間協作時,有時候只定義好介面,對方還沒有給實現,如何進行同步開發?
如上問題,估計只要是個開發人員,都可能遇到過;如果此時有了單元/集成測試,那我們能很好的解決這些問題。(註:加下來如果沒有特殊情況,不刻意強調 單元測試/集成測試,即提到測試是指的是單元/集成測試)
我從以下幾個方面介紹測試:
1、為什麼需要測試?
2、如何進行測試?
3、測試有哪些好處?
4、一切都需要測試嗎?
1、為什麼需要測試?
測試的目的是什麼?我的理解是:
縮短發現問題到解決問題的速度;
給程序一個修改後能驗證是否正確的保證;(回歸測試)
如果是開源軟體,我們可以通過單元測試了解其是怎麼使用的;比如我之前通過cglib的單元測試學習過cglib的使用;
所以如果你遇到如上問題,就需要寫測試。寫測試可能是為了自己(1、2);也可能是為了幫助別人(3)。
2、如何進行測試?
很多朋友不知道如何進行測試,其實測試很簡單,別把它想復雜了,按照自己的想法測試每個功能點是否正確即可。
2.1、測試流程
單元測試流程
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native2ascii-maven-plugin</artifactId>
<version>1.0-alpha-1</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>native2ascii</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<src>src/main/messages</src>
<dest>target/${project.artifactId}/WEB-INF/classes</dest>
<includes>messages.properties</includes>
</configuration>
</execution>
</executions>
<!--native2ascii使用的tools.jar-->
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.7.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</plugin>
如果使用mysql,埠只能是3306。
如果想開埠測試,這是不允許的。
如下是我項目中的一個配置.travis.yml,放到項目的根下即可:
-----------------------------------
language: java 語言
env: 環境
- DB=mysql 使用mysql
jdk:
- openjdk jdk使用openjdk
mysql:
database: es 資料庫名為es
username: root 用戶名為root
encoding: utf8 編碼為utf8
install: 安裝時執行的腳本
- mvn install -Dmaven.test.skip=true mvn安裝並跳過測試
before_script: script之前執行的測試
- cd web
- mvn db:create 創建資料庫的mvn命令(此處使用了maven-db-plugin 插件)
- mvn db:schema 創建腳本的mvn命令
- mvn db:data 安裝數據的mvn命令
- cd ..
script: 測試時執行的腳步
- cd common
- mvn test 測試common子模塊
- cd ..
- cd web
- mvn test -Pit 測試web子模塊,並指定使用it profile測試(即集成測試的配置,具體參考pom.xml中的profile/it)
notifications: 觸發
email: 測試完成後測試報告發到哪
-----------------------------------
持續集成不能修復代碼的錯誤,而是和單元測試一樣,縮短發現問題帶解決問題的時間,這樣可以提高開發效率,降低項目風險,提高項目的穩定性。而且尤其是團隊協作時,可以發現其他人的代碼是否對自己的代碼產生影響。
到此我們利用單元測試+CI可以加速開發人員的開發速度。利用好單元測試和CI,不要純粹為了單元測試和CI而去做這些事情。
本文沒有介紹TDD,TDD並不會那麼美好,我認為我們可以借鑒TDD的一些思想,但決不能迷信TDD,有時候,尤其如開發企業應用,先寫功能再寫測試可能效率更高,而且大部分時候是不需要TDD的。而且我也沒能在實際項目中獲取太多TDD的好處,但是我獲得了測試的好處。
本文也沒有介紹測試覆蓋率,我認為不要一味的追求覆蓋率,有時候有的覆蓋率沒有任何意義。所以不要讓為了覆蓋率而覆蓋率拖慢了項目開發進度。
正如stackoverflow上的一篇帖子《How deep are your unit tests?》上Kent Beck的回答:
寫道
老闆為我的代碼付報酬,而不是測試,所以,我對此的價值觀是——測試越少越好,少到你對你的代碼質量達到了某種自信。
可以前往coolshell的「單元測試要做多細?」去得到一些經驗。
Ⅱ 燃氣熱水器上的jsq—20ut(12t)分別是什麼意思
可以肯定的是,不會有這樣的型號組合。但話題中的大部分信息是可以解讀的。
燃氣熱水器的型號分為兩個部分。「—」之前的部分屬於產品類型和熱負荷(這一部分所有產品必須遵守,所以不同品牌間會重復);之後的是企業自編號,通常說的型號多指後者,品牌間一般不會重復。
JSQ:家用燃氣快速熱水器。俗稱的燃氣熱水器省略了家用(J)、快速(Q)兩個字眼。
20:阿拉伯數字若是放在第一部分,表示熱負荷,意義跟電器的「輸入功率」非常相近;若放在第二部分,多表示出熱水的升數,不過國內的供水供氣條件大多不支持20升以上的產品,而且20升的水太大,家裡根本用不了。科普一下:熱負荷與升數的關系比較接近2:1,通俗理解,就是兩千瓦功率能燒出1升熱水。
12T:天然氣代號,屬於熱值最高的一種。家用燃氣有三類,分別是人工煤氣R、天然氣T、液化石油氣Y;每一類燃氣又可以細分為若干種,在燃氣叫代號,其中天然氣有12T、10T、6T、4T和3T共5種代號。附及,規范的型號中通常不包含燃氣信息。
最後提一個UT,這個很可能是企業自編號。由於話題中的描述很不規范,就不加猜測了。