51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2101|回复: 2
打印 上一主题 下一主题

[求助] 不可重入函数怎样测试?

[复制链接]
  • TA的每日心情
    慵懒
    2016-3-15 14:37
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2016-3-15 13:59:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 Papillon 于 2016-3-15 14:05 编辑

    现状:
    • 没有需求文档和设计文档;
    • 被测代码是纯 C, 多数函数是不可重入的(使用了全局变量),不像 Google Test 举的例子那样,只是简单地求平方根——况且还有函数没有返回值呢。
    • 多数函数都会依赖于外部库,某些外部库深入内核,即使测试程序退出后,仍会有内核资源残留。


    现在尝试的两种测试方法:
    关注过程的测试方法 (Google small tests (unit tests): does this code do what it is supposed to do?)
    • 站在开发者的角度,白盒;
    • 测试单个函数的行为;局部;
    • 通过打桩消除对外部模块的依赖,使二者隔离;
    • 需求有完善的需求和设计文档,作为测试的依据;
    • 工作量极大;

    举个例子,要测试从一个进程向另一个进程发送消息的函数,设计文档(假设有)要求:
    • 为消息分配内存;
    • 填充消息头和消息体;
    • 调用底层 API 把消息发送出去。

    那么测试时是这样的:
    • 检查被测试对象为消息分配了适当大小的内存;
    • 检查消息头和消息体正确地填充了;
    • 检查底层的那个 API 被调用了。


    关注结果的测试方法 (Google medium test (integration test): does a set of near adjacent functions operate with each other the way they are supposed to?)
    • 站在用户的角度,黑盒;
    • 测试多个函数串联起来后的行为;整体 ;
    • 不打桩,外部模块的错误可能导致最终结果的错误,可能偏离测试的主体;不适于测试单个模块。同样地,难以解除对不可控资源的依赖。
    • 工作量相对较小;

    还以上述进程间发送消息为例,这样验证测试结果:启动另一个进程,在那个进程里接收并检查消息。

    我一开始提出的是第一种测试方法,但同事们不赞同,要求使用第二种。
    现在我进退两难:第一种工作量大,而且测试结果难以服众;第二种则难以实话,因为对外部资源的依赖太大。

    Google test 举的例子太简单了,就测一下求平方根函数的返回值,这样的函数不管怎么测都很容易。
    但没有返回值,而且不可重入的函数,怎样测试其执行后产生的效果呢?
    求教,谢谢!

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-3-15 14:37
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
     楼主| 发表于 2016-3-15 14:33:44 | 只看该作者
    在 Google Mock Framework 的文档中,有这样一段话,是支持我的第一种测试方法的:

    假设你在开发一个图形程序,它依赖于一种类似于 LOGO 的 API 来绘图。那么怎样测试它做了正确的事呢?你可以把程序跑起来,与一个标准的截屏作对比。但不得不承认:这样的测试代码太高,而且不靠谱(如果你升级了一个酷炫的显卡,其抗锯齿效果出众呢?你将不得不更新所的的截屏)。这样的测试太痛苦了。

    如果你知道依赖注入,那就好办了:把绘图 API 封装到一个接口中,针对接口编程,而不是直接调用绘图 API。在发布的程序中,使用该接口的真正实现,而在测试中使用 mock 实现。这样就可以轻松地检查程序以什么参数、什么顺序、调用了哪些绘图原语。这样的测试更健壮(不会因抗锯齿效果不同而坏掉)、更易读、更易维护(测试的意图是通过代码个覅人,而不是二进制的图像)。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-22 12:21 , Processed in 0.065027 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表