【问题标题】:What are the Pros and Cons of Manual Unit Testing against the Automated Unit Testing?手动单元测试相对于自动化单元测试的优缺点是什么?
【发布时间】:2010-06-01 08:46:01
【问题描述】:

自动化流程相比,我能否了解手动单元测试优点和缺点

【问题讨论】:

  • 只有我一个人,还是像考试题一样措辞?

标签: unit-testing


【解决方案1】:

奇怪的问题 - 单元测试应该是自动的,因此可重复且易于运行。对于许多人(包括我)来说,“手动单元测试”是一个自相矛盾的术语。

在无法进行自动化测试的情况下,手动测试可能很有用。这些通常不在单元测试级别,但更高 - 例如集成、GUI、压力等测试。

通过单元测试,您可以一次测试一小段代码(通常是单个方法/类)。测试本身是用代码编写的,因此它们可以(几乎总是)由单元测试框架自动运行。

更新:既然你为你的问题提供了更具体的背景,那么给出一个具体的答案就更容易了:-)

我确信自动化单元测试在软件项目的整个生命周期中几乎总是会为自己付出很多倍的代价。设置它们比手动测试成本更高,但运行它们的次数越多,您节省的时间就越多 - 并且您越早获得关于代码因新更改而中断的位置的反馈。

用单元测试覆盖遗留代码绝对不容易,但如果产品对您的公司有价值并且预计会持续数年,那么它仍然是值得努力的。尤其如此,因为在现实生活中,生产系统的寿命往往会超过其预期寿命。

一方面是,您“尝试检查我们编写的所有代码路径” - 通过自动单元测试与代码覆盖工具相结合,您可以自动查看 - 通常就在您的 IDE 中,如果集成了覆盖工具好吧 - 您最新的单元测试未涵盖哪些代码路径。

我推荐Working Effectively with Legacy Code - 它包含有关如何为纠结、写得不好的遗留代码编写单元测试的大量宝贵知识。

【讨论】:

  • 是的,在我们的例子中,我们有一个大型应用程序,我们将在其中使用自动化 UT。目前我们准备好我们的测试数据并尝试检查我们编写的所有代码路径。为此,我们需要进行比较分析,从长远来看,自动化是否对我们有帮助。
  • 因此,如果我手动执行此操作,那我就是在浪费时间。我可以通过 VS 测试或 Pex 等 UT 框架轻松做到这一点。
  • @Debajyoti,从长远来看,是的。再加上手动测试不是很有动力,而且容易出错。
  • 我明白你的意思,彼得。它肯定会对我有很大帮助。非常感谢。
【解决方案2】:

“手动单元测试”几乎是不可能的。单元测试被定义​​为单独测试小单元代码。您不能真正手动执行此操作。

现在,如果您谈论的是集成测试,那就另当别论了:

专业手动集成测试:

  • 测试人员比开发人员便宜
  • 测试人员可以根据应用程序的变化智能地调整测试 - 它们不像自动化测试那样天生脆弱
  • 测试人员可以发现自动化测试可能遗漏的错误(例如未明确测试的缺失或不正确的值,或布局问题)
  • 不需要额外的测试软件,这些软件可能很昂贵和/或需要大量时间来学习
  • 总是可能的;您无需满足任何技术要求
  • 你可以开始了;进行单个测试的初始成本远低于设置和实施自动化测试的成本。

Con 手动集成测试:

  • 每次你都必须付钱给一个人。从长远来看,这是非常、非常昂贵的。
  • 在错误修复后进行全面回归测试基本上是不可能的(太贵了)。
  • 这意味着您必须非常保守地处理开发周期后期的更改,以及一般情况下的重大更改。没有持续的重构 - 使用糟糕的代码比冒灾难性的副作用更好。
  • 您必须非常仔细地计划何时进行测试以获得最大的性价比。在某种程度上,您必须调整您的开发实践以反映这一点。

总而言之,最好同时进行手动和自动集成测试;这些有时可以很好地相互补充,因为实际上有些事情可以更容易地以自动化方式进行测试,而另一些则根本无法自动化。

【讨论】:

    【解决方案3】:

    我认为您问题的唯一真正答案是没关系,因为您必须同时拥有两者

    自动化单元测试将允许您的开发人员编写能够根据他们对规范的理解自动验证代码的测试。由于它们是自动化的,它们可以一遍又一遍地运行,每次几乎没有变化。根据定义,这些单元测试将知道软件如何在底层工作,因此可以被视为白盒测试——测试知道一些(如果不是全部)底层代码.

    另一方面,手动测试会从用户的角度揭示问题。您将能够找出不熟悉底层代码和结构的实体会遇到哪些错误,以及程序的可用性是否存在问题。这被认为是黑盒测试

    【讨论】:

    • 谢谢乔恩。这对我有很大帮助。
    【解决方案4】:

    我认为“手动测试”意味着在没有测试库的情况下进行测试。

    “手动测试”的

    优点

    • 一次性项目
    • 无需学习图书馆规则

    缺点“手动测试”:

    • 可能会在团队环境中造成混乱/痛苦
    • 大量工作已经进入测试库

    共识:

    请使用测试库

    不使用流行的测试库是一个非常糟糕的习惯,你肯定会后悔像我一样走这条路。现在我被旧代码的鬼魂刺痛了,我尽可能地使用 Jest。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      相关资源
      最近更新 更多