維護測試的意義

2022-09-08 18:24:08 字數 1674 閱讀 1854

乙個偶然的機會,除錯一段多年前的程式,那段程式有一套自動化的測試,但是經過多人易手,變化已經比較大了,測試已經無法通過,那麼我的切入點就放在了這些測試裡面.

這是一段帶介面操作的程式,目標是測試乙個向量圖形控制項,這個例子裡我關心的大致功能介面如下:

放置乙個圖形節點

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,表示沒有測試,並不是所有的測...

自動化測試的意義

自動化測試要解決的問題主要有兩個 乙個是可以重複使用的測試用例 乙個是手工測試很難實現 或是手工成本很高 的測試用例。首先說一句,自動化測試不是神話,也不是必須的,需要手工的時候還是需要手工 實現不了自動化的就不實現,效果差的或未達預期的 需要跑多次的,還需要手工輔助和二次校驗的 那麼什麼情況下需要...