测试与项目经济学

在我的工作中,我经常使用单元测试。 那你呢 以我的经验,大多数程序员都是很少见的。 在面试团队中的求职者时,我总是问一个问题:“您有测试经验吗?” 我最经常听到的回应是:“不。” 如果您问为什么,那么最常见的答案将是:“客户没有让我这样做。”

这种方法使我感到惊讶。 您能告诉建造者选择哪种品牌的混凝土建造房屋? 还是汽车修理工-如果发动机在车内闪动,则要修理发动机的哪一部分,而不要修理? 不太可能,因为这些都是严重的技术问题,必须将解决方案交给专业人员。 专业人员具有必要的技能和工具,可以使他更快,更便宜地解决问题。

为什么要数钱


民法典的概念是“通过经验和知识挽救承包商”。 其含义是,该工作由专业人士执行,该专业人士知道如何优化流程,如何做得更好,但同时又更便宜。 开发人员作为专业人员应该以最少的钱为客户提供最佳的解决方案。

但是实际上,程序员专注于其他方面。 他们中的许多人都确定软件开发是纯粹的技术过程,它当然具有其价值,但是程序员的工作是写而不是数钱。 但是,我认为,发展主要是一个经济项目,其背后是金钱和计算,只有在这之后才是技术任务。

这里的逻辑很简单:对于向我们订购公司软件开发服务的客户来说,业务实际上根本不需要软件。 商业需要金钱,这个软件将带来收益。

这意味着程序员不能不了解开发经济学,不了解技术解决方案的成本以及其中哪一种在技术和财务方面都是最佳的。

软件开发通常不是业务中最便宜的部分,但是质量差的软件可能会导致巨大的损失。 甚至停机也会导致利润损失,软件问题也可能导致数百万美元的损失。 因此,作为专业人士的开发人员必须对产品质量充满信心,并向其客户保证产品质量。 但是产品的质量是最重要的指标。 客户必须知道这种质量可以衡量并且对此有信心。 程序员的任务到底如何?

我和我的许多同事一样,相信程序员不应该与客户讨论工程解决方案。 通常,知道什么对客户端很重要,什么功能以及需要什么目的就足够了。 选择哪个决定是程序员的责任。 并且在这种责任的框架内,他必须以经济合理的成本为给定项目使用最佳工程实践。 因此,知道如何使开发过程变得更便宜的专业人士会获胜。

哪个测试更有利可图


测试是允许您控制产品质量的一种做法。 但是哪个测试更有利可图? 为了回答这个问题,比较几个参数就足够了。 所有测试不仅可以有条件地按技术类型划分,还可以按速度划分,最重要的是按成本划分。

单元测试 -测试生产单元。 单位是指程序单位,具体取决于类,函数(较少为文件)表示的语言。 使用TDD方法,首先将测试整合到产品开发过程中。 一个项目可以使用成千上万个这样的测试来测试各个代码段。 它们具有出色的速度指标-整套测试可以在几秒钟内完成。 这些是最便宜的测试。

集成测试 -一起测试2x-3x或更多单元。 一个项目中可能有成百上千个这样的测试,具体取决于程序员。 速度-整个测试套件的秒数或分钟数。 成本高于单元测试。

验收测试通过程序模拟用户的操作。 它们需要准备操作环境;因此,它们既复杂又昂贵。 每个项目的数量-通常对一个商业案例进行一次测试。 整套测试的工作速度通常从数十分钟到几小时不等。

最昂贵和最困难的是手动测试 。 您需要雇用一个人,对其进行培训,创建并给他一个业务历史图,以便他在上面测试新软件。 整个测试需要几天的时间。

任何类型的测试都需要准备,以及一定的金钱投入。 而且为了获得节省(并因此获得收益),我们必须首先考虑测试的速度及其发布的复杂性。 如果项目没有自动测试,则只有一种方法-手动测试,这是最昂贵且最慢的。

但是,现代的软件开发方法是一个连续的周期:一周内会创建新功能或新版本,并自动或手动进行检查。 也就是说,产品经常更改,并且所有这些更改都必须得到控制,以便程序员确定新功能和旧功能都能正常工作。 因此,手动测试立即失去所有指标。

对于不同类型的自动测试,还有三个要考虑的重要方面。

首先,它是可靠性 -打破测试的难易程度(这是单元测试的最佳指标)。

然后是运行测试所需的环境 。 单元测试非常简单,它们本身在被测单元周围创建了一个环境。 集成测试要求必须安装,运行等服务。 验收测试需要准备,因为应用程序必须在其环境中工作。

最后- 覆盖率 (测试覆盖率)。 单元测试具有良好的覆盖范围,并在整个项目中使用。 集成测试通常用于项目的某些部分,也就是说,它们不能完全覆盖程序。 验收测试的覆盖范围更糟-这是由于编写和运行它们的复杂性所致,大多数情况下,它们涵盖了主要业务案例,占项目总数的20-40%。

结论


因此,事实证明,在这种简短的比较分析的所有指标中,单元测试均处于领先地位。 在我的实践中,我经常使用它们,它可以提供足够的质量。 如果质量要求提高,那么我们继续接受。 集成测试的使用取决于客户,他们可能想测试项目的某些部分。

我当前的技术栈是angular和.net。 而且,如果在服务器端进行的测试没有引起什么大问题,那么在许多地方,对客户端应用程序的测试仍然不是每个人都显而易见的。 在我的客户项目中,单元测试的数量从几百到几千不等。 在下一篇文章中,我将尝试分享测试角度应用程序的关键技术。

Source: https://habr.com/ru/post/zh-CN476872/


All Articles