{"id":54,"date":"2016-07-19T22:32:41","date_gmt":"2016-07-19T22:32:41","guid":{"rendered":"https:\/\/kenpugh.com\/blog\/?p=54"},"modified":"2016-07-20T16:40:48","modified_gmt":"2016-07-20T16:40:48","slug":"another-way-to-look-at-the-bowling-acceptance-tests","status":"publish","type":"post","link":"https:\/\/kenpugh.com\/blog\/another-way-to-look-at-the-bowling-acceptance-tests\/","title":{"rendered":"Another Way to Look at the Bowling Acceptance Tests"},"content":{"rendered":"<p>A common exercise in acceptance test driven development is write acceptance for the problem of scoring a bowling game.   You may have seen other examples of acceptance tests.   Here&#8217;s a different version based on some of the guidelines listed in my book.   These examples are shown as Word-style tables.   They can be converted into tables compatible with the syntax of your acceptance test framework. <!--more--><\/p>\n<p>Before coming up with acceptance tests, its usually a good idea to understand the terms in the problem domain.  One key term is the name associated with the number of pins that are knocked down when a participant throws the ball down the lane.   In common terms, this is called a roll.  The rules of scoring refer to it as a delivery.   The customer&#8217;s terms are the ones that should be used in acceptance tests.  Our customer says delivery, so we show the valid values for this term as:  <\/p>\n<div>\n<table style=\"border-collapse:collapse\" border=\"0\">\n<colgroup>\n<col style=\"width:266px\"\/>\n<col style=\"width:266px\"\/>\n<col style=\"width:266px\"\/><\/colgroup>\n<tbody valign=\"top\">\n<tr>\n<td colspan=\"3\" style=\"padding-left: 10px; padding-right: 10px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Delivery <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Value<\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Valid?<\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Notes<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Yes<\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Minimum is 0<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">-1<\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">No<\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Yes <\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Maximum is 10 <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">11<\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">No <\/td>\n<td style=\"padding-left: 10px; padding-right: 10px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p> There can be one or two Deliveries in a Frame.   If the first Delivery makes all the pins fall, then there is no second Delivery.  There is a Mark for each Frame that depends on the number of Deliveries and the total pins.  We can show this as:  <\/p>\n<div>\n<table style=\"border-collapse:collapse\" border=\"0\">\n<colgroup>\n<col style=\"width:114px\"\/>\n<col style=\"width:115px\"\/>\n<col style=\"width:64px\"\/>\n<col style=\"width:61px\"\/>\n<col style=\"width:325px\"\/><\/colgroup>\n<tbody valign=\"top\">\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Frame <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Delivery One<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Delivery Two <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Valid? <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Mark<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Notes <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Yes<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Spare<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Maximum is 10 for a frame<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">No<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Above maximum <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">5<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">4<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Yes<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Open <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Open mark if less than 10 <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">  <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Yes<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Strike <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Only one Delivery if first Delivery is strike<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Yes<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Open<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Minimum is 0 ((two gutter balls) <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p> Now each Frame has a score.  The score is dependent upon the Mark in that Frame.  Here&#8217;s the business rule for a Frame score:<\/p>\n<div>\n<table style=\"border-collapse:collapse\" border=\"0\">\n<colgroup>\n<col style=\"width:195px\"\/>\n<col style=\"width:195px\"\/>\n<col style=\"width:195px\"\/><\/colgroup>\n<tbody valign=\"top\">\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Frame Scoring<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Mark <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Base score <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Additional score<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Open<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Two deliveries in frame<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Mark <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Two deliveries in frame<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Next delivery <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Strike <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Two deliveries in frame<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Next two deliveries <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p> Now we can create examples of how the scores are computed for a Frame: <\/p>\n<div>\n<table style=\"border-collapse:collapse\" border=\"0\">\n<colgroup>\n<col style=\"width:167px\"\/>\n<col style=\"width:161px\"\/>\n<col style=\"width:181px\"\/>\n<col style=\"width:144px\"\/>\n<col style=\"width:144px\"\/><\/colgroup>\n<tbody valign=\"top\">\n<tr>\n<td colspan=\"5\" style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Frame Scores<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Delivery One<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Next Delivery<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Delivery After That<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Score?<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Notes<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Gutter balls<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">DNC<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9 <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Open<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">11<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Spare <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">20<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Spare + Strike<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Spare + Gutter<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">30<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Three strikes (turkey)<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Strike + two gutter<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">20<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Strike + spare<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">20<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Strike + spare <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">21<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Two strikes (double) <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p> DNC stands for Do Not Care<br \/>\nA Game consists of ten Frames.   Each Frame has one or two Deliveries, except for the tenth frame.   It has either two or three deliveries, depending on the Mark.  Here are scores for each Frame within a Game.  The customer came up with these variations.   <\/p>\n<div>\n<table style=\"border-collapse:collapse\" border=\"0\">\n<colgroup>\n<col style=\"width:306px\"\/>\n<col style=\"width:246px\"\/>\n<col style=\"width:133px\"\/><\/colgroup>\n<tbody valign=\"top\">\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Game Score <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Deliveries <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Frame Scores (for frame)?<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Notes<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0,0,0,0,0,0,0,0,0,0,<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">All Gutter balls<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9,0,9,0,9,0,9,0,9,0,9,0,9,0,9,0,9,0,9,0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9,9,9,9,9,9,9,9,9,9,<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Nothing special<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">19,19,19,19,19,19,19,19,19,19<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">All Spares<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10,10,10,10,10,10,10,10,10,10,10,10<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">30,30,30,30,30,30,30,30,30,30<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Perfect Game<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">10,10,10,10,10,10,10,10,10,10,9,1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">30,30,30,30,30,30,30,30,29,20<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Almost Perfect<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p> Depending on your point of view, not all of the variations may be needed.   One could come up with fewer Games that incorporated the variations, such as:<\/p>\n<div>\n<table style=\"border-collapse:collapse\" border=\"0\">\n<colgroup>\n<col style=\"width:301px\"\/>\n<col style=\"width:212px\"\/><\/colgroup>\n<tbody valign=\"top\">\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Game Score <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Deliveries <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Frame Scores (for frame)?<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0,0,0,0,9,0,9,0,9,1,9,1,10,10,10,10,9,1<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0,0,9,9,19,20,30,30,29,20<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p> The score that is shown for each Frame is the cumulative score for that Frame and all the previous Frames.   Since this is just a summing, then not all the variations shown in this table are needed.  It follows the customer supplied examples.  <\/p>\n<div>\n<table style=\"border-collapse:collapse\" border=\"0\">\n<colgroup>\n<col style=\"width:296px\"\/>\n<col style=\"width:311px\"\/>\n<col style=\"width:165px\"\/>\n<col style=\"width:170px\"\/><\/colgroup>\n<tbody valign=\"top\">\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Cumulative Frame Scores for Game <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Frame Scores (for frame)<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Cumulative Frame Score?<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Game Score?<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Notes<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0,0,0,0,0,0,0,0,0,0,<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0,0,0,0,0,0,0,0,0,0,<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">All Gutter balls<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9,9,9,9,9,9,9,9,9,9,<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">9,18,27,36,45,54,63,72,81,90<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">90<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Nothing special<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">19,19,19,19,19,19,19,19,19,19<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">19,38,57,76,95,114,133,152,171,190<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">190<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">All Spares<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">30,30,30,30,30,30,30,30,30,30<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">30,60,90,120,150,180,210,240,270,300<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">300<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Perfect Game<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">30,30,30,30,30,30,30,30,30,20v<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">30,60,90,120,150,180,210,240,269,289<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">289<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Almost Perfect<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p> One could just show the summations for a single game, e.g. <\/p>\n<div>\n<table style=\"border-collapse:collapse\" border=\"0\">\n<colgroup>\n<col style=\"width:212px\"\/>\n<col style=\"width:208px\"\/>\n<col style=\"width:208px\"\/><\/colgroup>\n<tbody valign=\"top\">\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Game Score <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\"> <\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Frame Scores (for frame)?<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Cumulative Frame Score?<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">Game Score?<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0,0,9,9,19,20,30,30,29,20<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">0,0,9,18,37,57,87,117,146,186<\/td>\n<td style=\"padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt\">186<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p> Now if you are creating glue code to connect these tests to the production code, you will need only five different pieces of glue.  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>A common exercise in acceptance test driven development is write acceptance for the problem of scoring a bowling game. You may have seen other examples of acceptance tests. Here&#8217;s a different version based on some of the guidelines listed in my book. These examples are shown as Word-style tables. They can be converted into tables &hellip; <a href=\"https:\/\/kenpugh.com\/blog\/another-way-to-look-at-the-bowling-acceptance-tests\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Another Way to Look at the Bowling Acceptance Tests<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-54","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":9,"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/posts\/54\/revisions"}],"predecessor-version":[{"id":79,"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/posts\/54\/revisions\/79"}],"wp:attachment":[{"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/media?parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/categories?post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kenpugh.com\/blog\/wp-json\/wp\/v2\/tags?post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}