Skip to content


Test Smell

  1. 行为Smell
    Assertion Roulette
    Erratic Test –Fragile Test
    Frequent Debugging
    Manual Intervention
    Slow Tests
  2. 工程Smell
    Buggy Tests
    Developers Not Writing Tests
    High Test Maintenance Cost
    Production Bugs
  3. 代码Smell
    Obscure Test
    Conditional Test Logic
    Hard-to-Test Code
    Test Code Duplication
    Test Logic in Production

Assertion Roulette:断言复杂,影响测试用例的可读性,不利于维护

Erratic Test(Fragile Test):脆弱测试,测试用例非常容易因为代码变更而失败。具体原因有:

  1. 接口敏感Interface Sensitivity
  2. 行为敏感Behavior Sensitivity
  3. 数据敏感Data Sensitivity
  4. 上下文敏感Context Sensitivity

Frequent Debugging:频繁debug,这种情况指明测试用例很难作为bug的定位器,或者对bug的定位提供有效的帮助。

Manual Intervention: 手工干预,这种情况指测试用例的执行需要手工干预,例如需要手工介入gui的测试,数据准备,资源销毁等。这些与测试自动化的原则违背。

Slow Tests:慢速测试,这种情况指测试用例的执行效率很低,常常消耗大量的时间。慢速的测试往往导致开发人员执行测试用例的积极性下降。同时也给测试自动化带来麻烦。

Buggy Tests:有漏洞的测试,测试用例自身存在bug。这种情况下测试用例常常在执行过程中失败,而检查代码后发现生产代码并不存在问题。例如:测试用例排除了生产代码捕获error错误,而fail。

Developers Not Writing Tests: 开发人员不写测试,这种情况导致的原因往往是开发人员抱怨没有足够的时间编写测试用例,或者测试代码很难编写。

High Test Maintenance Cost: 高测试维护成本,这种情况导致的原因跟很多因素有关,例如:测试代码重复、测试用例很难编写、脆弱测试等。

Production Bugs: 生产环境bug多,这种情况一般指生产环境发现的bug比测试阶段和单元测试阶段的要多。这意味着存在一下情况:存在测试未覆盖的代码或者需求、测试未能有效的执行、未进行有效的单元测试、存在永不失败的测试用例。

Obscure Test: 晦涩的测试,这种情况下测试用例很难理解。一般引起的原因为:测试用例测试的功能和代码过多,使用的通用固件(fixture)太大、测试中存在不相关的信息、硬编码测试数据、间接测试。

Conditional Test Logic: 存在条件判断的测试逻辑,这种情况指测试用例中存在条件判断。导致很难理解测试用例的真正意图。一般引起这个问题的原因是:条件判断的验证逻辑(conditional verification logic)、弹性测试用例、复杂的测试条件。

Hard-to-Test Code: 代码测试困难,这个很容易理解,测试用例无法简单高效的书写。一般情况下这和SUT的的 高耦合有关。有时异步代码的测试以及未考虑可测试性的设计也会引起代码的测试困难。

Test Code Duplication: 测试代码冗余。这个就不说了,多半情况下是Ctrl+C和Ctrl+V的滥用造成的。也存在测试代码未考虑整体重用性的可能。

Test Logic in Production: 生产代码中包含测试逻辑。 导致这个问题的罪魁祸首就是存在测试环境无法测试的情况,为了测试覆盖率,不得不把测试逻辑放入SUT中。这样无形中增加了SUT的复杂度。

ref:xUnit Patterns

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • LinkedIn
  • description
  • TwitThis
  • MySpace
  • StumbleUpon
  • Google
  • FriendFeed
  • Mixx
  • Reddit

Posted in 全部, 开发技术, 读书笔记. Tagged with .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.

使用新浪微博登陆