初尝单元测试(JAVA),如何制定切实可行的计划?
2009-12-24 07:40
267 查看
问:
测试新手,根据自己理解写的单元测试用例模板,但是开发人员(JAVA语言)反映难以实施,不知道到底应该如何改正,我原本的想法是以类为单位,为确保测试覆盖率,先画控制流图,依据独立路径确定输入输出,有了输入输出就算一个用例了,但大家反映,一类为单位画控制流图不好画,类中可能涉及很多函数,每个函数复杂度都不同都有独自的控制流图,无从下手。
迷茫啊,跪求高手指点,到底应该怎样计划,我完全困惑了~
答:
一,以类为单位实施测试,是脱离实际的。一个函数的测试就可能很复杂,以类为单位是不可行的,建议改为以函数为单位,并且只测试算法密集的函数,功能简单的函数没必要测试。
二,用例设计以基路径法为主也是不实用的。原因:
1)效率太低,太麻烦,五十行以上的函数,你画个流程图看看,保证晕掉。
2)覆盖强度太低,只是语句覆盖;
3)这是脱离程序功能的用例设计方法,如果用例没有根据功能设定正确的预期输出,测试将失去意义,而且,纯白盒方法不能发现代码缺失错误,所以,用例应首先从功能的角度设计。
三,模板和测试过程建议改为:
a. 列出函数的功能点;
b. 每个功能点设计一个用例;
c. 找个覆盖率工具,统计覆盖率,然后为未覆盖的逻辑单位设计用例。
四,书本往往脱离实际,单元测试领域是重灾区,尽信书不如无书。
五,建议看看这篇文章,这是C++的,但道理一样:白盒方法在用例设计中的正确应用。
问:
谢谢你~~~~恍然大悟,之前也看过有人说先依功能点黑盒测;再统计覆盖率;最后再补充用例覆盖未测单位。当时没在意,现在听你一说还真是这么回事,太感谢了~
看了你的帖子我还有点问题,这样看来借助工具完全可以省去写驱动模块、桩模块的工作了吧,
如果是针对JAVA语言用JUnit包就能在EClipse实现自动生成用例数据以及覆盖率统计了吗?还是有其他的配合使用的工具呢?
这是有输入输出的情况,假如是没有输入输出的或者是执行其他操作的要怎么测呢?恳求再次指点迷津~
答:
抱歉,我主要搞C/C++的单元测试,没做过JAVA的单元测试,不熟悉相关工具。
总的来说,JAVA的单元测试容易一些,因为这种比较新的语言,在设计时就考虑了对单元测试的支持。相关的工具也挺多的,自己找一下吧。
JUnit好像不能生成桩和驱动吧?我没用过。生成桩和驱动是重复劳动,最适合工具来做,这种工具应该有吧。覆盖率统计应该有专门的工具,好像有开源的。
输入输出不仅仅是参数和返回值。输入还包括:成员变量、全局变量,内部输入。内部输入就是调用子函数获得的输入,以及局部静态变量。输出还包括:输出参数、成员变量、全局变量、内部输出。内部输出就是中间结果,例如程序计算好一个数据直接发出去了,没有返回,但是也要判断它对不对。
如果以上输入输出全都没有,这种函数通常只是起一个集成作用,没有什么计算,例如:
void func()
{
func1();
func2();
func3();
}
这种函数没必要单元测试,读一下代码就可以了。单元测试适用于算法密集的函数。
另外,给你提个建议:
单元测试并不是容易的工作,不要一下子推广,要自己找些代码测一下,把工具和流程磨合好,去掉不必要的环节,可能的话先找一两个程序员一起探讨和尝试,成熟了才能推广。
测试新手,根据自己理解写的单元测试用例模板,但是开发人员(JAVA语言)反映难以实施,不知道到底应该如何改正,我原本的想法是以类为单位,为确保测试覆盖率,先画控制流图,依据独立路径确定输入输出,有了输入输出就算一个用例了,但大家反映,一类为单位画控制流图不好画,类中可能涉及很多函数,每个函数复杂度都不同都有独自的控制流图,无从下手。
迷茫啊,跪求高手指点,到底应该怎样计划,我完全困惑了~
答:
一,以类为单位实施测试,是脱离实际的。一个函数的测试就可能很复杂,以类为单位是不可行的,建议改为以函数为单位,并且只测试算法密集的函数,功能简单的函数没必要测试。
二,用例设计以基路径法为主也是不实用的。原因:
1)效率太低,太麻烦,五十行以上的函数,你画个流程图看看,保证晕掉。
2)覆盖强度太低,只是语句覆盖;
3)这是脱离程序功能的用例设计方法,如果用例没有根据功能设定正确的预期输出,测试将失去意义,而且,纯白盒方法不能发现代码缺失错误,所以,用例应首先从功能的角度设计。
三,模板和测试过程建议改为:
a. 列出函数的功能点;
b. 每个功能点设计一个用例;
c. 找个覆盖率工具,统计覆盖率,然后为未覆盖的逻辑单位设计用例。
四,书本往往脱离实际,单元测试领域是重灾区,尽信书不如无书。
五,建议看看这篇文章,这是C++的,但道理一样:白盒方法在用例设计中的正确应用。
问:
谢谢你~~~~恍然大悟,之前也看过有人说先依功能点黑盒测;再统计覆盖率;最后再补充用例覆盖未测单位。当时没在意,现在听你一说还真是这么回事,太感谢了~
看了你的帖子我还有点问题,这样看来借助工具完全可以省去写驱动模块、桩模块的工作了吧,
如果是针对JAVA语言用JUnit包就能在EClipse实现自动生成用例数据以及覆盖率统计了吗?还是有其他的配合使用的工具呢?
这是有输入输出的情况,假如是没有输入输出的或者是执行其他操作的要怎么测呢?恳求再次指点迷津~
答:
抱歉,我主要搞C/C++的单元测试,没做过JAVA的单元测试,不熟悉相关工具。
总的来说,JAVA的单元测试容易一些,因为这种比较新的语言,在设计时就考虑了对单元测试的支持。相关的工具也挺多的,自己找一下吧。
JUnit好像不能生成桩和驱动吧?我没用过。生成桩和驱动是重复劳动,最适合工具来做,这种工具应该有吧。覆盖率统计应该有专门的工具,好像有开源的。
输入输出不仅仅是参数和返回值。输入还包括:成员变量、全局变量,内部输入。内部输入就是调用子函数获得的输入,以及局部静态变量。输出还包括:输出参数、成员变量、全局变量、内部输出。内部输出就是中间结果,例如程序计算好一个数据直接发出去了,没有返回,但是也要判断它对不对。
如果以上输入输出全都没有,这种函数通常只是起一个集成作用,没有什么计算,例如:
void func()
{
func1();
func2();
func3();
}
这种函数没必要单元测试,读一下代码就可以了。单元测试适用于算法密集的函数。
另外,给你提个建议:
单元测试并不是容易的工作,不要一下子推广,要自己找些代码测一下,把工具和流程磨合好,去掉不必要的环节,可能的话先找一两个程序员一起探讨和尝试,成熟了才能推广。
相关文章推荐
- 如何制定一份可执行的年终计划
- 软件项目销售计划如何制定
- java junit (单元测试)测试工具如何使用?
- 如何给自己制定计划
- Java单元测试进阶之如何打桩(用easymock轻松打桩)
- 如何制定有效的产品测试计划
- java程序员如何编写更好的单元测试的7个技巧
- 如何通过制定计划提高工作效率
- 如何克服拖延,制定计划
- 如何制定软件项目测试计划
- 如何制定软件项目测试计划
- 如何制定和编写软件项目计划
- java中如何制定自定义异常
- 如何制定一份详尽的性能测试计划
- java单元测试之如何实现异步接口的测试案例
- 敏捷教练如何辅导发布计划的制定之统一思想
- 如何制定成功的测试计划
- 1 如何制定详尽的SEO计划
- 如何制定目标和计划?
- 如何制定计划