第三周任务完成情况

一、理论学习

1、完成慕课第五、六章的学习。

2、阅读现代软件工程讲义“两人合作”章节。

3、了解“测试驱动开发”内容,链接如下:

https://www.cnblogs.com/youlixishi/articles/3551992.html 

https://blog.csdn.net/kexinxin1/article/details/93012204 

https://www.jianshu.com/p/097d32d09713

4、学习了菜鸟教程上python的面向对象一节,链接https://www.runoob.com/python3/python3-class.html

学习体会:

 (1)了解了测试驱动开发的基本概念,熟悉了在pycharm中如何自动进行测试,但是在编写测试代码的时候比较陌生,不知道对一个单元进行测试的时候,测试代码怎样编写最有效,对测试过程中可能会用到的很多函数还不是很了解。

(2)一个人编程的时候经常会犯些小错误,两人现场合作有人一起讨论,有编写不对的地方会互相进行指正,编程结果可能会更好。

(3)掌握了python中class的应用,,对class、self这些有了一些认识,在编写过程中犯了很多小错误,在用class和self的时候总提示不对,自己也不知道错在哪儿,花了很多时间查资料,修改,最终修改完程序基本可以正常运行。

二、实践学习

1、完成生命游戏练习题test_game_map.py测试程序的编写,并以生命游戏为例,在pycharm中练习单元测试。

生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。

游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行(在程序实现中,我们采取令左右边界相接、上下边界相接的方法模拟无限棋盘的情况)。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:

  1. 每个细胞的状态由该细胞及周围8个细胞上一次的状态所决定;

  2. 如果一个细胞周围有3个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;

  3. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

  4. 在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。

参照慕课所讲,首先,选择要测试的单元,然后点击navigate-test,创建测试文件,接下来利用setUp创建公共对象,最后针对每一个函数编写相应的测试程序。测试程序编写思路如下:

(1)验证rows和cols两个函数得到的行列数是否等于预设的行列数;

(2)将reset函数中的随机数生成器用特定的列表替代,然后验证产生的game_map.cells是否为设想的值;

(3)get和set函数合并测试,先set,再get,验证get到的是不是set的值;

(4)get_neighbor_count函数中,先将game_map.cells全设为0或1,验证get_neighbor_count得到的结果是不是设想的值;

(5)get_neighbor_count_map函数中,将get_neighbor_count的返回值全设为8,然后验证get_neighbor_count_map输出的是否也是值为8的矩阵;

(6)验证set_map设置后game_map.cells的值是否与set_map设置的值相等;

(7)验证print_map打印出来的值是否是game_map.cells的值。

最终编写出的单元测试程序见 https://github.com/lxxlccly/rjgc 下的test_game_map.py文件,运行结果如下,测试通过:

 

然后参考 https://www.sohu.com/a/343710179_120104204 等资料利用pip install coverage安装了监测代码覆盖率的插件,编写了既能运行单元测试程序,又能监测代码覆盖率的程序,见 https://github.com/lxxlccly/rjgc 下的unittest_and_coverage.py程序,运行结果如下,8个单元测试函数都通过测试,且game_map.py在测试过程中代码覆盖率为85%。

2、依据单元测试结果对计算器程序和单词查找程序进行改进。

 (1)单词查找程序

测试代码编写思路:

1) 验证查找出来的结果是否与设想一致;

2) 验证打印出来的结果是否与要求一致。

最终结果如下,测试通过,修改后的程序和单元测试程序见 https://github.com/lxxlccly/rjgc 下的mktest2_optimization.py和test_FindWord.py文件。

 (2)计算器程序

测试代码编写思路:

1) 验证输入错误时返回值及打印值是否正确;

2) 验证格式错误时返回值及打印值是否正确;

3) 验证分母为0情况,输出的错误提示是否正确、分母不为0时计算结果是否正确;

4) 验证打印结果是否符合要求。

最终结果如下,测试通过,修改后的程序和单元测试程序见 https://github.com/lxxlccly/rjgc 下的mktest0.py和test_calculator.py文件。

三、学习记录

学习时间 学习内容 评价
2020.3.3 13:00-16:00 慕课第五、六章 慕课看第一遍的时候有很多不懂,然后每次跟班级学习进度的时候又会重新看一遍,边实践边复习,会理解更深刻。python类这一块的应用还不是很熟练,有待加强学习。
2020.3.4 13:00-13:40 软件工程讲义“两人合作”章节
2020.3.4 14:00-15:00 了解测试驱动开发
2020.3.4 15:00-16:20 python面向对象编程及类的用法
2020.3.5 19:30-23:40 编写生命游戏单元测试程序 学会了在pycharm下自动进行单元测试,但有时候面对一个测试函数不知道如何下手编写,了解了关于mock框架下的测试函数,但很多都还不太会用
2020.3.6 13:00-18:00 单词查找程序、计算器程序单元测试及程序改进

猜你喜欢

转载自www.cnblogs.com/liuxinxin2020/p/12394398.html