如何在软件开发工作流中构建质量
远见卓识视图, 显示每个测试在运行时的执行时间
假设你是一个希望成长为一家中型科技公司的初创企业--介于30到100工程师之间。招聘是发生的, 而且你的代码数量也在增长。在较早的阶段, 贵公司专注于证明产品。一切都是规模较小, 你可以循环。更重要的是,它背离了基于数学模型,使其能够产生控制流的评估,对应于程序员的直觉的精神
代理商sonarqube 安装
如何在软件开发工作流中构建质量
远见卓识视图, 显示每个测试在运行时的执行时间
假设你是一个希望成长为一家中型科技公司的初创企业--介于30到100工程师之间。招聘是发生的, 而且你的代码数量也在增长。在较早的阶段, 贵公司专注于证明产品。一切都是规模较小, 你可以循环。更重要的是,它背离了基于数学模型,使其能够产生控制流的评估,对应于程序员的直觉的精神,或认知的努力,需要了解这些流动。现在, 随着你的成长, 你有更多的开发者在编写代码和更多的变量的组合。
这是当你注意到产量开始恶化, 你不能像你希望的那样发布代码。在扩展业务时, 有越来越多的变量需要进行调整, 您可能会忽略更多测试的需要, 并在测试上花费更多的时间。
如果你决定聘请一个 QA 经理, 而后者又带来了一批自动化工程师, 你就可以走出困境。硒测试的覆盖率很高。但随着时间的推移, 事情又开始放慢了。所有的自动化和善意, 你建立了硒覆盖开始打破和失败, 它反复暂停软件工厂。
我们开始的地方
当我加入 Shutterstock 时, 我对公司的自动化测试覆盖率印象深刻。几乎每一个功能的网站上都有测试覆盖率的形式, 硒端对点测试。Shutterstock 有一个开发工作流程的地方通过詹金斯, 将阻止部署到生产, 如果硒测试失败。这意味着使用SonarQube作为"诊断指标"而不是"基于结果的"指标,可以更好的推动成功。我喜欢这样;这意味着除非所有的测试都通过了, 否则任何人都不能将任何东西放到生产中。
但不久之后, 我意识到, 我们的公司, 这是每天发布多次, 已经变成了一个公司, 现在被禁止发布多天一次, 主要是因为失败的硒测试。常见的情况是, 测试失败不是因为产品损坏, 而是因为它们很脆弱。
一些事情导致了这一点:
终端端 selenium-based 验收测试成为了每个人都依赖于测试的唯yi形式的自动化测试。许多团队甚至停止编写单元测试。
测试框架是片状的, 是由 QA 团队建立和拥有的。当某件事情失败, 整个软件工厂停止运转时, QA 团队中一小部分三到五人的错误就落在了我们身上, 他们经常被指责为放慢了组织的速度。
工程组织花了很多时间来研究如何构建一个可以扩展的产品, 但是没有足够的注意力去构建一个支持这种产品开发的开发工作流程。
质量完全由 QA 团队拥有。
在我们的核心, 我们有一个 QA 组织, 它没有与组织的其他部分进行扩展。虽然他们拥有自动化所有内容的技能, 但是他们缺乏构建可伸缩的测试框架所需的核心技能。由于这种差距, 他们无法影响组织的其他人认为质量是所有人拥有的东西, 而不仅仅是 QA 团队。SonarQube引用IDC的讲话需要一种测量和强制软件的方法和代码质量指标。为了弥合这一差距, 我们不得不重新考虑我们对 QA 整体的态度。
迈向新的开始
我想完成两个目标: 首先, 重建 Shutterstock 的测试基础架构/框架, 使其更加稳定, 其次, 改变 Shutterstock 的工程文化, 使之成为一个质量不是由测试工程团队拥有的, 而是由每个人来拥有。
我们改变了招聘测试工程师时所期待的核心能力。我们希望我们的测试工程师成为强大的开发人员, 他们知道如何构建 object-oriented 的解决方案, 从而帮助他们创建一个稳定且可扩展的测试框架。我们也希望他们成为有影响力的人, 他们可以推动他们的团队做正确的事情, 而不采取跳过单元测试这样的捷径。此平台还有助于开发人员创建可自定义的仪表板和筛选器,以集中于关键区域。一旦我们建立了一个 world-class 测试工程团队, 我们就开始了解如何发布, 同时保持一个的产品。
我们知道我们da的问题是脆弱的测试, 所以我们建立了一个叫做 "睿智" 的工具来记录每个测试的通过/失败数据。我们所有的测试都把数据推入睿智, 每次他们作为我们的詹金斯工作流程的一部分运行。然后, 我们在这个数据库之上建立了一个网站, 使数据的挖掘变得容易。我们现在能够监控工作的合格率、个别测试的及格率、常见的失败消息、长的运行测试, 等等。有了这些数据, 我们就可以保持自己和其他人的责任感。我们的一个核心团队受影响的失败的测试认识到, 他们通常的传球率只有20%。(试想一下, 由于这一路障, 软件工厂经常停下来。可以同时分析多个文件,并在SonarLint报告视图中检查结果问题提示:当使用分析函数时,可能找不到近在编辑器中打开的文件的抄写,因为SonarLint使用的是只在其中一个IDz编辑程序中打开文件或其依赖项时才会填充的本地文件缓存。通过使用远见卓识, 他们能够隔离测试的di合格率, 并在这些测试中看到常见的失败消息。团队对测试脚本进行了简单的修复, 以提高其可靠性。
SonarQube中的旧版代码
虽然我不相信将数字放在源代码质量上,SonarQube(以前称为Sonar)在开发过程中可能是一个非常有用的工具。它对您的团队执行一致的风格,已经发现了几个可能的错误,并且是一个很好的工具:您可以浏览违规行为,看看为什么某个表达式或代码块可能是一个问题。管理软件质量必须是每个人的关注从开始的发展,但是开发团队的终ji责任。
为了确保您的代码库保持一致状态,您还可以直接执行代码开发者检入的任何违规行为。其中一个问题是很多项目不是绿色项目你有很多现有的代码。如果您的违规号码已经很高,很难判断是否引入了新的违规行为。
在这篇文章中,我将向您展示如何从现有代码的零违反行为开始,而不用触摸来源,Jens Schauder在他的伟大演讲中使用Legacy Teams的灵感来启发它。我们将根据文件中的行忽略所有违规行为,因此如果有人触及该违规行为将再次显示的文件,开发人员将负责修复旧版违规行为。在类级别之外,人们普遍承认,圈复杂度的分数应用程序与它们的代码总计行相关联。
关闭违规插件
我们正在使用SonarQube的关闭违规插件。可以为问题配置不同的排除模式。您可以为代码块定义正则表达式,这些代码块应该被忽略,或者在所有文件或行基础上停用违规。
对于现有代码,您想忽略某些文件和行的所有违规。这可以通过在文本区域中插入这样的方式来完成排除模式:
de.fhopf.a的kka.actor.IndexingActor; PMD:SignatureDeclareThrowsException; [23]
这将排除在IndexingActor类的第23行中抛出原始异常的违规。再次分析代码时,这种违规将被忽略。
通过API检索违规
除了漂亮的仪表板之外,SonarQube还提供了一个可用于检索项目违规的API。如果您不希望查找代码库中的所有现有违规行为,并手动插入,您可以使用它自动生成排除模式。所有这些违规都可以在/ api /违规找到,例如HTTP://本地主机:9000 / API /违例。SonarQube的建筑和plug-ins(如SQALE)和管理和跟踪技术债务的机会可以为管理人员提供关键信息和业务在整个软件生命周期中反复地