乙個偶然的機會,除錯一段多年前的程式,那段程式有一套自動化的測試,但是經過多人易手,變化已經比較大了,測試已經無法通過,那麼我的切入點就放在了這些測試裡面.
這是一段帶介面操作的程式,目標是測試乙個向量圖形控制項,這個例子裡我關心的大致功能介面如下:
放置乙個圖形節點
2,peripheralsystemnode
placeperipheralsystem(
...)
放置乙個圖形節點
3,channelnode
placechannel(
...)
放置乙個火柴棍
4,protocollink
placeprotocollink(
...)
放置一根連線
這根連線可以附加一些資訊,在雙擊連線時可以激發下面的事件
通過事件,可以獲取到附加的資訊
測試的名稱
[testmethod
()]public
void
editprotocol_test(),這個測試所表示的不變式為:
輸入:雙擊連線 預期:激發protocoledit事件
ok,先看一段測試**
var f = new system.windows.forms.form();當我執行到這段測試的時候,發現"空引用的錯誤"designcontrol target = new designcontrol();
var sysnode = target.placeperipheralsystem(...);
target.placetestingsystem(..);
var ch = target.placechannel(..);
target.placeprotocollink(..);
private pointf findedgepoint(...)原來是後期的維護者加入了這麼乙個假設:向量圖裡的第乙個節點是
testingsystemnode
型別的節點,但是從測試用例來看
varsysnode = target.placeperipheralsystem(...);
target.placetestingsystem(..);
明顯第乙個節點不是,這時候我可以推斷:
這名維護者在修改完**以後根本沒有執行測試,而只是在其他環境裡進行了測試,
偶然正確,就完事大吉了.
我沒有批評這位作者的意向,但是從中告訴作者乙個簡單的關於測試的道理:
從這個例子可以很明顯地學習到測試的乙個用途:
保證開發完成後的修改不會破壞以前的邏輯,如果破壞了,則馬上就要知道,
如果沒有這些測試,或者不經常執行這些測試,就會導致偏差越來越大,最後無法維護
儘管涉及到介面的測試,不是那麼穩定,我也覺得在整合服務裡每次嵌入都執行一遍不現實,但是我認為每1天或者2天手工執行一遍還是必須的,你執行的間隔週期越短,就越有信心,反之就會慢慢失去信心,這也是持續整合的優勢
單元測試的意義
size large 1 單元測試集中注意力於程式的基本組成部分,首先保證每個單元測試通過,才能使下一步把單元組裝成部件並測試其正確性具有基礎。單元是整個軟體的構成基礎,像硬體系統中的零部件一樣,只 零部件的質量,這個裝置的質量才有基礎,單元的質量也是整個軟體質量的基礎。因此,單元測試的效果會直接影...
測試結果OK POK NG NT的意義
ok 就是pass,測試通過的意思 pok 部分通過,表示測試中有很多檢查點,比如其中兩個檢查點通過,乙個沒有通過,就是pok ng 是not good的意思,也可以解釋為 ng not go 未通過,不同的公司叫法不盡相同,有些公司也叫fail nt not test,表示沒有測試,並不是所有的測...
自動化測試的意義
自動化測試要解決的問題主要有兩個 乙個是可以重複使用的測試用例 乙個是手工測試很難實現 或是手工成本很高 的測試用例。首先說一句,自動化測試不是神話,也不是必須的,需要手工的時候還是需要手工 實現不了自動化的就不實現,效果差的或未達預期的 需要跑多次的,還需要手工輔助和二次校驗的 那麼什麼情況下需要...