结对编程2——单元测试
Deadline:##
2017-3-29 22:00PM,以博客发表日期为准。
评分基准:##
- 按时交 - 有分,检查的项目包括后文的三个方面
- 题目要求
- 代码提交
- 博文规范
- 晚交 - 0分
- 迟交两周以上 - 倒扣本次作业分数
- 抄袭 - 倒扣本次作业分数
题目描述:##
上一周大家为四则运算程序设计了2-3个新功能,本次在隔了一周之后,我们循序渐进地进阶。本次目标:
-
把计算模块提取出来,单独创建一个类。
-
针对提取出来的计算类的接口函数做单元测试。
-
参考助教的示例:
单元测试###
一旦我们分离出核心模块,就可以针对该核心模块一步一步开发并做好单元测试,什么是单元测试?请阅读并学习《构建之法》第二章关于单元测试,回归测试的内容。
好了,你一定针对单元测试做了一番学习:
- 阅读并学习了课本上单元测试例子,以及代码覆盖率的知识;
- 或者你还去bing.com,google.com了一把单元测试,JUnit;例如
- 如果你是C/C++写的,你还去挖了一遍CUnit;
- 或者你直接用了C的 #include <assert.h>;
- 或者你用了C#,学习了课本上提到的Visual Studio的单元测试框架;
- 请参考《构建之法》
总之,你找到了适合自己语言的一种可以进行单元测试的工具。
那么,勤快的你已经迫不及待的想要自己上手来测一把:
-
通过单元测试代码,测试加法是否能正确工作;
-
通过单元测试代码,测试加减乘除功能。
-
通过单元测试代码,测试计算类对于各种参数的支持:
a. 输入是有错误的,例如 “1 ++ 2”,
b. 在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”,
c. 或者是 “ 248 / 0” 怎么办?
d. 怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?
e. 那么如果真的计算结果是 “-1” 又怎么处理呢?
-
[附加题]界面模块,测试模块和核心模块的松耦合。既然各组同学都写了高质量的各个模块,而且模块之间的关系是明确定义的,一致的,那么:
- 小组A 的测试模块就可以测试小组B 的核心模块;
- 小组C 的用户界面模块就可以和小组B 的核心模块结合起来,正常运行。对吧?
- 那我们就让两个小组 (A,B) 在一起,测试一下下面的情况:
- A的核心模块,加上B 的测试模块和用户界面模块
- B的核心模块,加上A 的测试模块和用户界面模块
- 两组同学分析合并之后出现了什么问题,为何会出现这样的问题?如何改进?
-
通过增量修改的方式,改进程序, 完成对各种错误情况的处理。
题目要求:##
- 结对编程实现上述功能,同样的,在程序正式开发之前,请先预估下PSP每个环节的消耗时间(分钟),并在过程中统计实际耗时(分钟),最后提交PSP表格。依然注意,这个主要是给你们自己看的,不必造假数据。
- 继续两人结对协作,把编码规范、领航员和驾驶员角色互换做到位。
- 单元测试: 有单元测试保证,有代码覆盖率。
代码提交:##
要求必须增量式开发-用git命令提交到coding.net地址,coding上要能看到多次commit的记录,同时必须有两个人各自的commit记录。
博文规范##
-
提交的博客(两个同学都要写)必须完整包含下面内容:
a. 需求分析:测试上有哪些详细的需求?
b. 设计测试框架, 模拟测试数据:
- (1) 请给出计算模块的测试用例及运行结果
(2) 描述测试过程中遇到的问题以及解决的方案。
(3) 请展示上面描述的单元测试的每个环节。
c. 小结与感受:通过测试,是否有效发现了程序计算模块的问题,并给予改进?
d. 在隔了一周之后再看之前的代码,是否更能体会到下面这些东西
- (1) 良好的设计
(2) 编码规范
(3) 必要的注释
-
在随笔开头,备注两个同学的学号。
-
提供项目开发的coding.net 地址。
-
描述结对的过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。
-
提供此次结对作业的PSP。