代码之家  ›  专栏  ›  技术社区  ›  Ryu

测试性设计和测试驱动开发的物理世界示例[关闭]

  •  1
  • Ryu  · 技术社区  · 15 年前

    我将要做一个关于单元测试的演示,在这个过程中,我将涉及“可测试性设计”模式。换句话说,使用IOC容器、依赖注入、避免静态方法等。

    我有一种感觉,我的团队会很冷,开始用不同的代码来适应测试。所以我想知道是否有人知道任何真实世界的例子,为了让测试变得更容易,没有其他的原因而改变某个东西的设计。
    我假设这个概念在制造业、工程和其他专业中并不少见,我只是不熟悉任何困难的例子。

    我想土星五号火箭,航天飞机,汽车,机器人等的发展必须有一些记录在案的例子,一些设计的可测试性,或可能缺乏,导致问题。

    想到的例子

    • 我认为拥有可替换的部件是依赖注入的一种形式,因为将所有部件焊接在一起不允许单独测试它们。
    • 也许现代汽车上的obd2端口,因为它可以很容易地检查任何系统是否有问题。
    2 回复  |  直到 12 年前
        1
  •  1
  •   Stefano Borini    15 年前

    许多电气浪涌保护器都有一个测试按钮来检查其功能是否正确。它是一种非常聪明的测试形式,因为它不仅在开发人员手中,而且在最终用户手中。

    另一个例子是:许多控制报告灯(特别是在关键环境中,如核电站等)都有一个按钮来打开它们,并检查它们是否仍然工作。对于许多使用LED显示屏的设备也是如此。

    电池有电源指示灯,所以你可以在购买前对其进行测试。

    在糖精加工中,您监控生产的许多步骤(有点断点),以评估产品的质量。工厂的设计目的是为了提供这些测试断点,方便人工取样器(通常费用不高)。

    最后,汽车制造商包括所有类型的诊断。汽车修理厂有一台计算机来全面检查汽车的状态。它是一种“事后”的调试日志,所以不是真正的“预防性测试”,但仍然非常有用,它的包含是一个现实世界的“测试性设计”。

    然而,现实世界测试和软件世界测试之间的主要区别在于,现实世界测试可以破坏产品,达到破坏性的极限。因此,通过破坏性抽样和分析来评估故障与良好比率。在软件测试中,你从来没有破坏性的测试(除非你是一个有邪恶意图的虐待狂程序员)

        2
  •  0
  •   Rich Seller    15 年前

    如果已经构建了一组组件以便对它们进行测试,那么它们很可能会更模块化,并且松耦合。例如,可以简单地模拟和注入使用IOC容器而不是服务定位器作为合作者的代码,这样更容易测试代码。

    这种分离伴随着发展。由于类型不依赖于它的合作者,因此它允许以不同的结构组合这些部件,这意味着重构/响应新需求更简单。您还将对任何重构更有信心,因为您有一套测试来验证您的更改。

    综上所述,这意味着在我的经验中,为测试而编写的代码更快、更容易修改,从而减少了我所喜欢的工作。

    一些设计用于测试(自身或其他事物)以避免更大问题的组件的现实世界示例:

    • 烟雾探测器
    • 剩余电流装置
    • 航空飞行前发动机检查
    • 个人呼吸器