[TFUI] Re: [agile-testing] Recommended Training

Phlip <[email protected]> Mon, 26 May 2008 13:17:49 -0700
Newsgroups gmane.comp.programming.test-first-user-interfaces
Message-ID <[email protected]>
--Dh5seR1broIVidYLPgnYp-8miyizO-foyGaw0lO
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

> Thanks Steve, that's a great point! A training that really focus in an
> improvement for the organization.
> We have had several meetings for identifying the more reiterative
> problems and found between them:
> - Too long times writing test cases.

Do your developers run the tests after every 1 to 10 edits, with the highest 
odds on 1?

Do your developers prefer to revert when a test fails unexpectedly (and the 
reason is not simple & obvious, preferably appearing in the fault diagnostic)?

> - Too formal test cases that include redundant GUI testing (this
> increases the writing time).

Are the majority of your cases all unit tests that run 1 or 2 calls above the 
tested code?

Could you write a new test to reach any line of code, anywhere, at any time, 
without excessive research to determine how to reach that line?

> - Not much use of automation tools (only 5 of the team use QTP), this
> is mostly because of budget limits (that's why I´m trying to find an
> OpenSource alternative).

Can you test the GUI from within, by writing tests in the same language as the GUI?

> - We don't have knowledge on security testing.

Do you TDD your security code?

No test can "prove" your code is secure. TDD tests should spot-check that your 
algorithm works as designed. For example, at my day-job, we run an MD5 checksum 
hash on today's date with a pass phrase and a >cough<. To test this, we 
trivially mock the Date module to return a fixed date. Then we trivially compare 
the result to a hard-coded checksum. As copied from the fault diagnostic on the 
day we wrote this test.

Yes, the NSA could crack this with one hemisphere tied behind their backs. Our 
tests allow us to freely refactor all the code in and around the security 
system, without changing those odds.

--Dh5seR1broIVidYLPgnYp-8miyizO-foyGaw0lO
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm=
l4/strict.dtd">
<html>
<head>
</head>




<body style=3D"background-color: #ffffff;">

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id=3D"ygrp-mlmsg" style=3D"width:655px; position:relative;">
<div id=3D"ygrp-msg" style=3D"width: 470px; margin:0; padding:0 25px 0 0; f=
loat:left; z-index:1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id=3D"ygrp-text">
            <p>&gt; Thanks Steve, that's a great point! A training that rea=
lly focus in an<br>
&gt; improvement for the organization.<br>
&gt; We have had several meetings for identifying the more reiterative<br>
&gt; problems and found between them:<br>
&gt; - Too long times writing test cases.<br>
<br>
Do your developers run the tests after every 1 to 10 edits, with the highes=
t <br>
odds on 1?<br>
<br>
Do your developers prefer to revert when a test fails unexpectedly (and the=
 <br>
reason is not simple &amp; obvious, preferably appearing in the fault diagn=
ostic)?<br>
<br>
&gt; - Too formal test cases that include redundant GUI testing (this<br>
&gt; increases the writing time).<br>
<br>
Are the majority of your cases all unit tests that run 1 or 2 calls above t=
he <br>
tested code?<br>
<br>
Could you write a new test to reach any line of code, anywhere, at any time=
, <br>
without excessive research to determine how to reach that line?<br>
<br>
&gt; - Not much use of automation tools (only 5 of the team use QTP), this<=
br>
&gt; is mostly because of budget limits (that's why I=C2=B4m trying to find=
 an<br>
&gt; OpenSource alternative)<wbr>.<br>
<br>
Can you test the GUI from within, by writing tests in the same language as =
the GUI?<br>
<br>
&gt; - We don't have knowledge on security testing.<br>
<br>
Do you TDD your security code?<br>
<br>
No test can &quot;prove&quot; your code is secure. TDD tests should spot-ch=
eck that your <br>
algorithm works as designed. For example, at my day-job, we run an MD5 chec=
ksum <br>
hash on today's date with a pass phrase and a &gt;cough&lt;. To test this, =
we <br>
trivially mock the Date module to return a fixed date. Then we trivially co=
mpare <br>
the result to a hard-coded checksum. As copied from the fault diagnostic on=
 the <br>
day we wrote this test.<br>
<br>
Yes, the NSA could crack this with one hemisphere tied behind their backs. =
Our <br>
tests allow us to freely refactor all the code in and around the security <=
br>
system, without changing those odds.<br>
</p>
    </div>=20=20

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <span width=3D"1" style=3D"color: white;">__._,_.___</span>
    <!-- Start the section with Message In topic -->
    <div id=3D"ygrp-actbar">
              <span class=3D"left">
          <a href=3D"http://groups.yahoo.com/group/TestFirstUserInterfaces/=
message/1009;_ylc=3DX3oDMTM0bnJsNGR1BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3J=
wc3BJZAMxNzA1MDA3MjA3BG1zZ0lkAzEwMDkEc2VjA2Z0cgRzbGsDdnRwYwRzdGltZQMxMjExOD=
MzMDc0BHRwY0lkAzEwMDk-">
            Messages in this topic          </a> (<span class=3D"bld">1</sp=
an>)
        </span>
        <a href=3D"http://groups.yahoo.com/group/TestFirstUserInterfaces/po=
st;_ylc=3DX3oDMTJwNmczMjY2BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxN=
zA1MDA3MjA3BG1zZ0lkAzEwMDkEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxMjExODMzMDc0?act=
=3Dreply&messageNum=3D1009">
          <span class=3D"bld">
            Reply          </span> (via web post)
        </a>  |=20
        <a href=3D"http://groups.yahoo.com/group/TestFirstUserInterfaces/po=
st;_ylc=3DX3oDMTJlamhkY2I2BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxN=
zA1MDA3MjA3BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTIxMTgzMzA3NA--" class=3D"bld">
          Start a new topic        </a>
          </div>=20
    <!-------     Start Nav Bar  ------>
    <!-- |**|begin egp html banner|**| -->
    <div id=3D"ygrp-vitnav">
                <a href=3D"http://groups.yahoo.com/group/TestFirstUserInter=
faces/messages;_ylc=3DX3oDMTJldmsxa2VyBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ=
3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA21zZ3MEc3RpbWUDMTIxMTgzMzA3NA--">Me=
ssages</a>=20=20
            |    <a href=3D"http://groups.yahoo.com/group/TestFirstUserInte=
rfaces/files;_ylc=3DX3oDMTJmOTFmOWZnBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3J=
wc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2ZpbGVzBHN0aW1lAzEyMTE4MzMwNzQ-">File=
s</a>=20=20
            |    <a href=3D"http://groups.yahoo.com/group/TestFirstUserInte=
rfaces/photos;_ylc=3DX3oDMTJlNmQ1ZGFtBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3=
Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA3Bob3QEc3RpbWUDMTIxMTgzMzA3NA--">Pho=
tos</a>=20=20
            |    <a href=3D"http://groups.yahoo.com/group/TestFirstUserInte=
rfaces/links;_ylc=3DX3oDMTJmNmVmcHJkBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3J=
wc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2xpbmtzBHN0aW1lAzEyMTE4MzMwNzQ-">Link=
s</a>=20=20
            |    <a href=3D"http://groups.yahoo.com/group/TestFirstUserInte=
rfaces/database;_ylc=3DX3oDMTJjMjZpODVpBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQE=
Z3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2RiBHN0aW1lAzEyMTE4MzMwNzQ-">Datab=
ase</a>=20=20
            |    <a href=3D"http://groups.yahoo.com/group/TestFirstUserInte=
rfaces/polls;_ylc=3DX3oDMTJmbmtobjNrBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3J=
wc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA3BvbGxzBHN0aW1lAzEyMTE4MzMwNzQ-">Poll=
s</a>=20=20
            |    <a href=3D"http://groups.yahoo.com/group/TestFirstUserInte=
rfaces/members;_ylc=3DX3oDMTJlZzZjM2dpBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ=
3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA21icnMEc3RpbWUDMTIxMTgzMzA3NA--">Me=
mbers</a>=20=20
            |    <a href=3D"http://groups.yahoo.com/group/TestFirstUserInte=
rfaces/calendar;_ylc=3DX3oDMTJkMTJxcHN1BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQE=
Z3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2NhbARzdGltZQMxMjExODMzMDc0">Calen=
dar</a>=20=20
    </div>=20=20
    <!-- |**|end egp html banner|**| -->

                <div id=3D"ygrp-grft">
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20

              </div>
=20=20=20=20
    <!-- yahoo logo -->
    <!-- |**|begin egp html banner|**| -->
    <div id=3D"ygrp-ft">
      <a href=3D"http://groups.yahoo.com/;_ylc=3DX3oDMTJkcmxlOWRmBF9TAzk3Mz=
U5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxMjExODMzMDc0">
      <img src=3D"http://us.i1.yimg.com/us.yimg.com/i/yg/img/logo/ma_grp_16=
0.gif" height=3D"15" width=3D"106" border=3D"0" alt=3D"Yahoo! Groups"></a> =
<br>
      <a href=3D"http://groups.yahoo.com/group/TestFirstUserInterfaces/join=
;_ylc=3DX3oDMTJmMTdrMWdjBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA=
1MDA3MjA3BHNlYwNmdHIEc2xrA3N0bmdzBHN0aW1lAzEyMTE4MzMwNzQ-">Change settings =
via the Web</a> (Yahoo! ID required) <br>
      Change settings via email: <a href=3D"mailto:TestFirstUserInterfaces-=
[email protected]?subject=3DEmail Delivery: Digest">Switch delivery to=
 Daily Digest</a> | <a href =3D "mailto:TestFirstUserInterfaces-traditional=
@yahoogroups.com?subject=3DChange Delivery Format: Traditional">Switch form=
at to Traditional</a> <br>

      <a href=3D"http://groups.yahoo.com/group/TestFirstUserInterfaces;_ylc=
=3DX3oDMTJkMGV1NnBvBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3=
MjA3BHNlYwNmdHIEc2xrA2hwZgRzdGltZQMxMjExODMzMDc0">
        Visit Your Group=20
      </a> |
      <a href=3D"http://docs.yahoo.com/info/terms/">
        Yahoo! Groups Terms of Use      </a> |
      <a href=3D"mailto:TestFirstUserInterfaces-unsubscribe-hHKSG33TihhbjbujkaE4pw@public.gmane.org=
?subject=3D">
        Unsubscribe      </a>=20
    </div>     <!-- |**|end egp html banner|**| -->
  </div> <!-- ygrp-msg -->

=20=20
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m=
argin:0 0 25px 0; background:white;">
    <!-- Network content -->
=20=20=20=20
<!-- Start Recommendations -->
<div id=3D"ygrp-reco">
     </div>
<!-- End Recommendations -->

	    <!-- Start vitality -->
	    <div id=3D"ygrp-vital">
	      	      <a href=3D"http://groups.yahoo.com/group/TestFirstUserInterfa=
ces;_ylc=3DX3oDMTJldGNpa3E3BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMx=
NzA1MDA3MjA3BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTIxMTgzMzA3NA--">
		Visit Your Group	      </a>
	    </div>=20
=09=20=20=20=20=09=20=20=20=20=09=20=20=20=20=20=20
	    <!-- Network content -->
	    	          <div id=3D"nc">
              <div class=3D"ad">
                      <div id=3D"hd1">Yahoo! Finance</div>=20
<p><a href=3D"http://us.ard.yahoo.com/SIG=3D13oe3dfmr/M=3D493064.12016257.1=
2445664.8674578/D=3Dgroups/S=3D1705007207:NC/Y=3DYAHOO/EXP=3D1211840274/L=
=3D/B=3DRBoWBUJe5FM-/J=3D1211833074717939/A=3D4507179/R=3D0/SIG=3D12de4rskk=
/*http://us.rd.yahoo.com/evt=3D50284/*http://finance.yahoo.com/personal-fin=
ance">It's Now Personal</a></p>=20
<p>Guides, news,</p>=20
<p>advice & more.</p>                   </div>
                    <div class=3D"ad">
                      <div id=3D"hd1">Need traffic?</div>=20
<p><a href=3D"http://us.ard.yahoo.com/SIG=3D13onfa5gl/M=3D493064.12016308.1=
2445700.8674578/D=3Dgroups/S=3D1705007207:NC/Y=3DYAHOO/EXP=3D1211840274/L=
=3D/B=3DRRoWBUJe5FM-/J=3D1211833074717939/A=3D3848644/R=3D0/SIG=3D131l83flq=
/*http://searchmarketing.yahoo.com/arp/srchv2.php?o=3DUS2006&cmp=3DYahoo&ct=
v=3DGroups5&s=3DY&s2=3D&s3=3D&b=3D50">Drive customers</a></p>=20
<p>With search ads</p>=20
<p>on Yahoo!</p>                  </div>
                    <div class=3D"ad">
                      <div id=3D"hd1">Special K Group</div>=20
<p><a href=3D"http://us.ard.yahoo.com/SIG=3D13pm41f53/M=3D493064.12016300.1=
2445692.11323196/D=3Dgroups/S=3D1705007207:NC/Y=3DYAHOO/EXP=3D1211840274/L=
=3D/B=3DRhoWBUJe5FM-/J=3D1211833074717939/A=3D5170420/R=3D0/SIG=3D11b5gu1oe=
/*http://new.groups.yahoo.com/specialKgroup">on Yahoo! Groups</a></p>=20
<p>Join the challenge</p>=20
<p>and lose weight.</p>                  </div>
          </div>
=09=20=20=20=20
	  </div> 	  <!-- |**|end egp html banner|**| -->
	  <div style=3D"clear:both; color: #FFF; font-size:1px;">.</div>
	</div> 		  <img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D8744=
704/grpspId=3D1705007207/msgId=3D1009/stime=3D1211833074/nc1=3D4507179/nc2=
=3D3848644/nc3=3D5170420" width=3D"1" height=3D"1"> <br>
=09
	<span  style=3D"color: white;">__,_._,___</span>
	<!--~-|**|PrettyHtmlEnd|**|-~-->
	</body>
	<!--~-|**|PrettyHtmlStart|**|-~-->
	<head>
<style type=3D"text/css">
<!--
#ygrp-mkp{
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 14px 0px;
  padding: 0px 14px;
}
#ygrp-mkp hr{
  border: 1px solid #d8d8d8;
}
#ygrp-mkp #hd{
  color: #628c2a;
  font-size: 85%;
  font-weight: bold;
  line-height: 122%;
  margin: 10px 0px;
}
#ygrp-mkp #ads{
  margin-bottom: 10px;
}
#ygrp-mkp .ad{
  padding: 0 0;
}
#ygrp-mkp .ad a{
  color: #0000ff;
  text-decoration: none;
}
-->
</style>
</head>
	<head>
<style type=3D"text/css">
<!--
#ygrp-sponsor #ygrp-lc{
  font-family: Arial;
}
#ygrp-sponsor #ygrp-lc #hd{
  margin: 10px 0px;
  font-weight: bold;
  font-size: 78%;
  line-height: 122%;
}
#ygrp-sponsor #ygrp-lc .ad{
  margin-bottom: 10px;
  padding: 0 0;
}
-->
</style>
</head>
	<head>
	<style type=3D"text/css">
	<!--
	#ygrp-mlmsg {font-size:13px; font-family: arial,helvetica,clean,sans-serif=
;*font-size:small;*font:x-small;}
	#ygrp-mlmsg table {font-size:inherit;font:100%;}
	#ygrp-mlmsg select, input, textarea {font:99% arial,helvetica,clean,sans-s=
erif;}
	#ygrp-mlmsg pre, code {font:115% monospace;*font-size:100%;}
	#ygrp-mlmsg * {line-height:1.22em;}
	#ygrp-text{
	    font-family: Georgia;=09
	}
	#ygrp-text p{
	    margin: 0 0 1em 0;
	}
	#ygrp-tpmsgs{
	    font-family: Arial;=09
	    clear: both;
	}
	#ygrp-vitnav{
		padding-top: 10px;
		font-family: Verdana;
		font-size: 77%;
		margin: 0;
	}
	#ygrp-vitnav a{
		padding: 0 1px;
	}
	#ygrp-actbar{
		clear: both;
		margin: 25px 0;
		white-space:nowrap;
		color: #666;
		text-align: right;
	}
	#ygrp-actbar .left{
		float: left;
		white-space:nowrap;
	}
	.bld{font-weight:bold;}
	#ygrp-grft{
		font-family: Verdana;
		font-size: 77%;
		padding: 15px 0;
	}
	#ygrp-ft{
	  font-family: verdana;
	  font-size: 77%;
	  border-top: 1px solid #666;=20
	  padding: 5px 0;=20
	}
	#ygrp-mlmsg #logo{
	  padding-bottom: 10px;
	}

	#ygrp-reco {
	margin-bottom: 20px;
	padding: 0px;
	}
	#ygrp-reco #reco-head {
		font-weight: bold;
		color: #ff7900;
	}

	#reco-grpname{
        font-weight: bold;
        margin-top: 10px;
  	}
	#reco-category{
        	font-size: 77%;
	}
	#reco-desc{
        	font-size: 77%;
	}

	#ygrp-vital{
		background-color: #e0ecee;
		margin-bottom: 20px;
		padding: 2px 0 8px 8px;
	}
	#ygrp-vital #vithd{
		font-size: 77%;
		font-family: Verdana;
		font-weight: bold;
		color: #333;
		text-transform: uppercase;
	}
	#ygrp-vital ul{
		padding: 0;
		margin: 2px 0;
	}
	#ygrp-vital ul li{
	  list-style-type: none;
	  clear: both;
	  border: 1px solid #e0ecee;=20=20
	}
	#ygrp-vital ul li .ct{
	  font-weight: bold;
	  color: #ff7900;
	  float: right;
	  width: 2em;
	  text-align:right;
	  padding-right: .5em;
	}
	#ygrp-vital ul li .cat{
	  font-weight: bold;
	}
	#ygrp-vital a{
		text-decoration: none;
	}

	#ygrp-vital a:hover{
	  text-decoration: underline;
	}

	#ygrp-sponsor #hd{
		color: #999;
		font-size: 77%;
	}
	#ygrp-sponsor #ov{
		padding: 6px 13px;
		background-color: #e0ecee;
		margin-bottom: 20px;
	}
	#ygrp-sponsor #ov ul{
		padding: 0 0 0 8px;
		margin: 0;
	}
	#ygrp-sponsor #ov li{
		list-style-type: square;
		padding: 6px 0;
		font-size: 77%;
	}
	#ygrp-sponsor #ov li a{
		text-decoration: none;
		font-size: 130%;
	}
	#ygrp-sponsor #nc{
	  background-color: #eee;
	  margin-bottom: 20px;
	  padding: 0 8px;
	}
	#ygrp-sponsor .ad{
		padding: 8px 0;
	}
	#ygrp-sponsor .ad #hd1{
		font-family: Arial;
		font-weight: bold;
		color: #628c2a;
		font-size: 100%;
		line-height: 122%;
	}
	#ygrp-sponsor .ad a{
		text-decoration: none;
	}
	#ygrp-sponsor .ad a:hover{
		text-decoration: underline;
	}
	#ygrp-sponsor .ad p{
		margin: 0;
	}
	o{font-size: 0; }
	.MsoNormal{
	   margin: 0 0 0 0;
	}
	#ygrp-text tt{
	  font-size: 120%;
	}
	blockquote{margin: 0 0 0 4px;}
	.replbq{margin:4}
	-->
	</style>
	</head>
	<!--~-|**|PrettyHtmlEnd|**|-~-->
	</html><!--End group email -->


--Dh5seR1broIVidYLPgnYp-8miyizO-foyGaw0lO--