Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 降低大型软件开发项目中的缺陷注入率_Unit Testing - Fatal编程技术网

Unit testing 降低大型软件开发项目中的缺陷注入率

Unit testing 降低大型软件开发项目中的缺陷注入率,unit-testing,Unit Testing,在大多数软件项目中,缺陷源于需求、设计、编码和缺陷纠正。根据我的经验,大多数缺陷源于编码阶段 我感兴趣的是找出软件开发人员用来降低缺陷注入率的实用方法 我见过以下方法在不同的成功程度和相关成本下使用 代码审查 单元测试 静态代码分析工具 编程风格的使用 对等编程 首先,在需求时注入的bug远比编码bug要昂贵得多。正确实现的零值需求是一个零值、未使用或不可用的功能 有两件事可以减少bug的发生 敏捷。如果您在每个步骤中做的不多,那么在每个步骤需求、设计等方面注入bug的可能性就会降低。如果你试图

在大多数软件项目中,缺陷源于需求、设计、编码和缺陷纠正。根据我的经验,大多数缺陷源于编码阶段

我感兴趣的是找出软件开发人员用来降低缺陷注入率的实用方法

我见过以下方法在不同的成功程度和相关成本下使用

代码审查 单元测试 静态代码分析工具 编程风格的使用 对等编程
首先,在需求时注入的bug远比编码bug要昂贵得多。正确实现的零值需求是一个零值、未使用或不可用的功能

有两件事可以减少bug的发生

敏捷。如果您在每个步骤中做的不多,那么在每个步骤需求、设计等方面注入bug的可能性就会降低。如果你试图写下所有的要求,你会犯严重的错误。如果您试图为下一个sprint编写需求,那么您很可能会正确地编写这些需求

TDD。如果您必须先编写测试,那么您就不太可能遇到糟糕的需求或糟糕的设计。如果你不能弄清楚你在测试什么,你就有一个需求bug。停止编码。远离键盘

如果你不知道如何测试它,你就有一个设计缺陷。同样,停止编码。修改设计,使其可测试。然后往前走


首先,在需求时注入的bug远比编码bug要昂贵得多。正确实现的零值需求是一个零值、未使用或不可用的功能

有两件事可以减少bug的发生

敏捷。如果您在每个步骤中做的不多,那么在每个步骤需求、设计等方面注入bug的可能性就会降低。如果你试图写下所有的要求,你会犯严重的错误。如果您试图为下一个sprint编写需求,那么您很可能会正确地编写这些需求

TDD。如果您必须先编写测试,那么您就不太可能遇到糟糕的需求或糟糕的设计。如果你不能弄清楚你在测试什么,你就有一个需求bug。停止编码。远离键盘

如果你不知道如何测试它,你就有一个设计缺陷。同样,停止编码。修改设计,使其可测试。然后往前走


我认为注射速率的主要问题可能来自很多方面,而且环境各不相同

您可以使用许多最佳实践,如TDD、DDD、结对编程、持续集成等。但您永远不会没有bug,因为产生bug的是人,而不是过程


但在我看来,使用bug跟踪工具可以给你提示哪个问题更容易反复出现。从那里,你可以开始解决你的主要问题

我认为注射速率的主要问题可能来自很多方面,并且因环境而异

您可以使用许多最佳实践,如TDD、DDD、结对编程、持续集成等。但您永远不会没有bug,因为产生bug的是人,而不是过程


但在我看来,使用bug跟踪工具可以给你提示哪个问题更容易反复出现。从那里,你可以开始解决你的主要问题

根据我的经验,允许缺陷的是流程的错误,而不是开发人员的错误。请参阅有关流程如何影响bug的说明

竞争性测试

软件开发人员应该致力于防止测试人员发现他们编写的软件的问题。测试人员应该得到奖励,而不必为发现软件问题而付出金钱

签字

让一个对确保软件没有问题有既得利益的软件负责人负责。在该人员满意之前,软件不会发货

要求

避免更改需求。从开发人员那里获得实现需求所需时间的估计。如果时间与要求的交付时间表不匹配,请不要雇佣更多的开发人员。相反,消除一些特性

任务切换

允许开发人员在分配给其他人之前完成他们正在处理的任务。回到一个新任务后,要花很多时间熟悉该任务被放弃的位置以及完成该任务所需的剩余项目。在这个过程中,某些技术细节可能会被忽略

指标

收集尽可能多的指标。每个方法、每个类、依赖关系等的代码行

标准

确保每个人都遵守公司标准,包括:

源代码格式化。这可以自动化,而不是讨论。 命名约定变量 表、数据库实体、URL等。在可能的情况下使用工具,并每周进行代码审查。 代码必须在没有警告的情况下编译。记录并审查所有例外情况。 内部和外部开发的API的一致重用。 独立审查

雇佣第三方执行代码审查

有能力的程序员

雇佣你能负担得起的最好的程序员。放开那些逃避公司标准的程序员

传播信息

举行审查会议,开发人员可以与整个团队分享他们对框架的最新更改。允许他们自由地弃用代码的旧部分,以支持更高级的方法

任务跟踪

让开发人员在15分钟的括号内记录每个任务花费的时间。这不是用来衡量业绩的,必须强调的是,这与审查或工资无关。它只是一种度量特定技术任务执行所需时间的方法。从那里你可以看到,一般来说,在系统的不同方面花费了多少时间。这将允许您在必要时更改焦点

评估过程


如果许多问题仍在寻找软件的方法,考虑重新评估软件开发的过程。度量将有助于精确指出需要解决的领域。

根据我的经验,允许缺陷的是流程的错误,而不是开发人员。请参阅有关流程如何影响bug的说明

竞争性测试

软件开发人员应该致力于防止测试人员发现他们编写的软件的问题。测试人员应该得到奖励,而不必为发现软件问题而付出金钱

签字

让一个对确保软件没有问题有既得利益的软件负责人负责。在该人员满意之前,软件不会发货

要求

避免更改需求。从开发人员那里获得实现需求所需时间的估计。如果时间与要求的交付时间表不匹配,请不要雇佣更多的开发人员。相反,消除一些特性

任务切换

允许开发人员在分配给其他人之前完成他们正在处理的任务。回到一个新任务后,要花很多时间熟悉该任务被放弃的位置以及完成该任务所需的剩余项目。在这个过程中,某些技术细节可能会被忽略

指标

收集尽可能多的指标。每个方法、每个类、依赖关系等的代码行

标准

确保每个人都遵守公司标准,包括:

源代码格式化。这可以自动化,而不是讨论。 命名约定变量、数据库实体、URL等。在可能的情况下使用工具,并每周进行代码审查。 代码必须在没有警告的情况下编译。记录并审查所有例外情况。 内部和外部开发的API的一致重用。 独立审查

雇佣第三方执行代码审查

有能力的程序员

雇佣你能负担得起的最好的程序员。放开那些逃避公司标准的程序员

传播信息

举行审查会议,开发人员可以与整个团队分享他们对框架的最新更改。允许他们自由地弃用代码的旧部分,以支持更高级的方法

任务跟踪

让开发人员在15分钟的括号内记录每个任务花费的时间。这不是用来衡量业绩的,必须强调的是,这与审查或工资无关。它只是一种度量特定技术任务执行所需时间的方法。从那里你可以看到,一般来说,在系统的不同方面花费了多少时间。这将允许您在必要时更改焦点

评估过程


如果许多问题仍在寻找软件的方法,考虑重新评估软件开发的过程。度量将有助于精确定位需要解决的领域。

大多数缺陷可能发生在编码过程中,但编码缺陷的影响通常远低于理解需求过程中以及开发弹性架构时出错的影响。因此,使用短可执行文件生成迭代的重点是

识别和纠正含糊不清、不精确或完全不正确的需求 暴露次优和/或脆弱的体系结构 在一个大范围的项目中,可以节省大量的时间和集体胃衬

单元测试、场景测试和静态分析工具可以在缺陷创建后检测缺陷,但要减少首先创建的缺陷数量,请减少 开发人员必须承受的中断次数:

减少、取消和/或合并会议 提供无中断的工作环境 允许开发人员在发现缺陷时纠正缺陷,而负责的代码仍在他们的脑海中,而不是将其推迟到以后必须重新建立上下文时
大多数缺陷可能发生在编码过程中,但编码缺陷的影响通常远低于理解需求过程中以及开发弹性体系结构时出错的影响。因此,使用短可执行文件生成迭代的重点是

识别和纠正含糊不清、不精确或完全不正确的需求 暴露次优和/或脆弱的体系结构 在一个大范围的项目中,可以节省大量的时间和集体胃衬

单元测试、场景测试和静态分析工具可以在缺陷创建后检测缺陷,但为了首先减少创建的缺陷数量,减少开发人员必须忍受的中断数量:

减少、取消和/或合并会议 提供无中断的工作环境 允许开发人员在发现缺陷时纠正缺陷,而负责的代码仍在他们的脑海中,而不是将其推迟到以后必须重新建立上下文时 第1步-了解缺陷被注入的位置

使用一种技术,例如测量何时在软件生命周期中注入缺陷以及何时检测到缺陷。一旦您知道缺陷是何时注入的,并且确定了缺陷是何时发现的,您就可以开始了解您的流程中与缺陷注入和移除相关的差距

第2步-开发缺陷过滤器并调整流程

一旦您知道缺陷何时被注入,您就可以设计策略来防止它们进入系统。在软件生命周期的不同阶段,不同的策略是有效的。例如,静态分析工具对源自需求的缺陷没有帮助,相反,您应该研究某种同行评审或检查,甚至可能更改指定需求的方式,以便使用自动分析或实现更有意义的签核,等等

通常情况下,我使用检查、静态分析和测试多种不同类型的组合,在尽可能快地注入缺陷后,尽可能多地过滤缺陷。

步骤1-了解缺陷注入的位置

使用一种技术,例如测量何时在软件生命周期中注入缺陷以及何时检测到缺陷。一旦您知道缺陷是何时注入的,并且确定了缺陷是何时发现的,您就可以开始了解您的流程中与缺陷注入和移除相关的差距

第2步-开发缺陷过滤器并调整流程

一旦您知道缺陷何时被注入,您就可以设计策略来防止它们进入系统。在软件生命周期的不同阶段,不同的策略是有效的。例如,静态分析工具对源自需求的缺陷没有帮助,相反,您应该研究某种同行评审或检查,甚至可能更改指定需求的方式,以便使用自动分析或实现更有意义的签核,等等

通常,我使用检查、静态分析和测试多种不同类型的组合,在尽可能快地注入bug之后,尽可能多地过滤bug。

此外:

项目知识库。它说明了我们如何在这个项目中进行活动X,比如“表单验证”。这允许统一和重复使用测试的解决方案,防止在重新发明轮子时注入错误

生产缺陷监控。当生产缺陷发生时,将对其进行调查。为什么这只虫子没有被抓住?我们如何确保这种情况不会再次发生?然后我们相应地改变过程

此外:

项目知识库。它说明了我们如何在这个项目中进行活动X,比如“表单验证”。这允许统一和重复使用测试的解决方案,防止在重新发明轮子时注入错误

生产缺陷监控。当生产缺陷发生时,将对其进行调查。为什么这只虫子没有被抓住?我们如何确保这种情况不会再次发生?然后我们相应地改变过程