2019-11-08-基于TDD实现的java版本的保龄球规则(记录note)

###如下部分为记录note

保龄球的计分规则:

1:每一局总共有十轮,每轮一开始会有十支球瓶,球手可以扔两次球,目标就是用尽量少的球把全部球瓶击倒。

2:如果第一球就把全部的球瓶都击倒了,也就是STRIKE,画面出现“X”,就算完成一轮了,所得分数是10分再加后面两球的倒瓶数,

3:如果第一球没有全倒,就要再打一球,如果第二球将剩下的球瓶全都击倒,也就是SPARE,画面出现“/”,也算完成一格,所得分数为10分再加下一格第一球的倒瓶数,

4:如果第二球也没有把球瓶全部击倒的话,那分数就是第一球加第二球倒的瓶数,没有奖励(bonus),再接着打下一格。依此类推。

5:第十轮有机会扔三次球。如果在第十轮出现STRIKE或者SPARE,则球手可再加打第三球。

6:全部十轮的得分相加就等于这一局的总得分。

TDD实例执行步骤(红-绿-重构)/循环.

选取较为经典的保龄球规则作为case.

1:需求初步分解

1.1 创建一个游戏规则类Game

    1.2 类中包含两个方法:

        roll(int count)扔球后执行此方法,count是每局击倒的球瓶数

score()计算每局比赛的得分情况.

2:开始测试用例编写

2.1:创建一个test方法实例,testGutterGame

        创建Game对象,测试代码爆红,提示无此类

新建Game对象,测试通过

2.2:通过Game对象实例game,调用方法roll(int count)和score(),代码爆红,提示无此方法

在Game类中,创建roll(int count)和score()方法,测试通过

2.3:此时出现第一次代码重构

每次调用test实例方法,都需要创建Game的实例对象,重构此方法.

    2.4:第二次重构

重构roll(int count)和score()方法

2.5:第三次重构-N次roll点相同的重构

重构roll点roll(int count)方法重构为rollMany(int n,int count);

        count-每局击倒的球瓶数,n-多少次击倒相同的球

2.6:第四次重构-一次STRIKE,一次SPARE情况.

        重构roll点roll(int count)方法

***此处省略中间渐进重构过程**

    ***参考2>,试访问,需要验证信息**

    .........

.........

.........

    2.n:第n次重构-满足roll点任意数字,计算总分的重构.

3:重构定义

此TDD实例中,凡是代码涉及相同功能抽取代码的,算作重构,不限定在测试Test类中,还是主体开发类中.

TDD实例分享顺序

1:已开展的工作

拆分保龄球需求.

        按照TDD原则,完成测试用例、功能代码的编写.

    2:遇到的障碍

首次计算STRIKE以及SPARE场景得分,未充分考虑数组越界情况.

        末尾一轮出现STRIKE以及SPARE场景得分,计算得分出错.

        基于重构技术较多,单次分享耗时较多,省略中间循序渐进重构过程,在4-5次重构后,给出最终重构测试用例代码以及功能代码.

    3:后续的计划

小组分享此次TDD保龄球案例后,完善重构实例.

        基于此次分享,结合项目实际情况,把TDD原则推进到项目实际需求.

下次分享

重构的要点,实例的要点

下次以真实项目需求为案例

后端添加校验规则,放在实体类里面去校验,长度,格式等,具体可参考CommunityEvent.class

参考资料

1> http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata(保龄球-Kata-完整实例)

2> https://www.jianshu.com/p/9599083f33bc(保龄球-Kata-实例demo/部分实例)

3> https://blog.51cto.com/10760006/2157302(java版本-保龄球实现规则)       

你可能感兴趣的:(2019-11-08-基于TDD实现的java版本的保龄球规则(记录note))