作者tkdmaf (皮皮快跑)
看板PHP
标题[分享] 测试导向之於敏捷软体的实际作为。
时间Thu Dec 9 21:12:53 2010
讲理论既然太过文字化,所以我就用程式码来说明比较快。
就以验证帐号密码来做说明好了。
1.功能需求:验证帐号密码是否正确。
需求回传值:false(不正确)、true(正确)
验证法则:
require('unit_test.php');
require('member.php');
class test_my_function extends unit_test{
function test_run(){
$this->test_member_login();
}
function test_member_login(){
$member = new member;
$account = 'account';
$password = 'password';
$this->unit->run($member->chk_login($account,$password),'is_true',
'function:test_member_login');
}
}
2.开始实作功能:
此时,$member->chk_login()功能并未实作。我们是要求这个测试必须回传正确的
结果。但之前先让他传回false;
class member{
function chk_login($account,$password){
return false;
}
}
3.将实作功能进行功能验证:
接下来实作功能获得验证。
class member{
function chk_login($account,$password){
if($account == 'account' && $password == 'passwor')
return true;
return false;
}
}
4.测试功能无误,功能本身也开发完成:
然後,执行单元测试,若测试结果为false就表示判断不符预期,有可能是测试端
给错值或是被测试物件方法有错误,如此即知bug存在而进行修正。
上例的$password =='passwor'少一个字,所以要把d加回去,这样原本显示的false
就会变成true。同样的,可以在测试中修改测试假码来验证应当传回false的情形。
5.将功能实际应用在主要功能:
当测试功能确认无误时,即可将该功能提供予其他需要登入功能的系统。
而这个测试会被保留,在未来客户需要进行程式改变时,都可以透过测试来验证
功能本身是否异常,他会像是一个bug清单一般的列示一个测试list。
如此,保全了软体开发优异的速度,而测试本身则保障了程式的品质。
再专案即将交付期,也可以透过不断列示的测试结果来验证程式功能的正确或是异常。
而经过一段时间(可能数个月,也可能一、两年甚至更长。),即便客户要修正功能。
他的维护成本也不会呈现倍数成长,敏捷开发当中的理想值应当逐年只以1.1倍的速
度缓慢成长。
对工程师而言,放假码→测试→删除→假功能→假显示→删除,这样的步调可能很
多人都习惯了。对於假功能假资料都是用过即丢。
然而整合这些东西,做为一个测试验证的功能或资料却是确保程式开发速度和品质
的优良保证。在未来的异常状况,也可以透过测试的结果快速的找出bug的问题点。
甚至於,这些测试码本身,他可以替代需要测试的文件说明。
快速的展示一个高效率的测试验证。
而当其他的工程师接手专案时,他们尽需要了解每一项测试的结果及如何找出异常。
透过测试验证程式功能叫做「单元测试」。
而透过测试结果来产生code的方法我们称之为:测试导向。
他很快、有效率、保障品质......而在XP的书中也有故事讲述过这个方法。
仅将此开发方法提供予各位参考。希望能帮大家提昇工作效率和交付良好品质的专案。
△编辑追加延伸阅读:
功能:提供一个交换二个变数的方法。
测试要求:
function test_swap(){
$a = 5;
$b = 3;
$this->unit->run(($a == 3 && $b == 5),'is_true',
'function:test_variable_swap'
}
功能实作(假设此为member所提供):
function swap(&$a,&$b){
list($a,$b) = array($b,$a);
}
功能测试:
function test_swap(){
$member = new member;
$a = 5;
$b = 3;
$member->swap($a,$b);
$this->unit->run(($a == 3 && $b == 5),'is_true',
'function:test_variable_swap'
}
当此验证无误,将测试值换掉做false测试。
测试验证符合要求,swap()功能实做完成,经测试确保程式执行无误。
程式品质保证无异常。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.131.10
※ 编辑: tkdmaf 来自: 59.104.131.10 (12/09 21:13)
※ 编辑: tkdmaf 来自: 59.104.131.10 (12/09 22:11)