下载本文的PDF版本 PDF

使用免费和开源工具管理软件质量

敏捷过程实施


Phelim Dowling 和 Kevin McGrath,电信软件与系统组

敏捷软件开发的原则更加强调个人和互动,而不是流程和工具。它们引导我们远离繁重的文档要求,并引导我们走上一条有效应对变化的道路,而不是rigidly坚持预定义的计划。为了支持这种灵活的运营方法,拥有合适的应用程序来管理团队的活动非常重要。实施有效的框架以确保尽早地在产品的各个层面构建质量也至关重要。考虑到这些问题,并从预算意识的角度出发,本文将探讨一个组织在其围绕项目和产品构建流程和质量的过程中使用的免费和开源应用程序和工具。

软件开发团队如何实施流程以及如何处理其应用程序生命周期管理,可能对他们正在开发的产品的成功产生巨大影响1。精益和高效的运营模式是关键,特别是对于早期初创公司而言。许多商业级产品和框架可用于集成开发过程的各个方面:需求管理、项目规划、缺陷管理、测试用例创建和执行、自动化测试、负载测试等。但这些工具可能很昂贵,并且对于某些组织对敏捷性的理解来说可能负担过重。

存在其他解决方案,可以支持您的敏捷理念,并且完全不会影响您辛辛苦苦赚来的利润。长期以来,已经有大量的免费和开源工具可用。许多公司和组织正在使用开源工具来满足其业务需求2。这些应用程序通常拥有庞大的活跃且积极参与的贡献者社区,他们记录产品的功能并定期发布增强功能。我们建议进行适当的尽职调查,以检查这些工具是否适合您的需求,并确定其在性能、维护和增长方面的记录。如果它们通过了检查,开源工具完全可以满足小型项目团队、资助的研发团队、早期初创公司甚至更大规模企业的需求。

项目管理和问题跟踪

电信软件与系统组(TSSG)3 以前使用过 XPlanner 等工具进行项目规划,使用 Bugzilla 进行缺陷管理。虽然这些工具单独使用时功能齐全,但在收集需求、规划、记录缺陷等方面的缺乏集成成为我们渴望更精简和敏捷的工作方式的障碍。期望开发人员查看一个系统来查找要修复的错误,并查看另一个系统来确定要处理的功能是低效的。验证和确认 (VnV) 团队努力将缺陷与功能联系起来,但这既是手动的又是费力的。由于工具的独立性,每日和每周活动的计划变得更加困难。

这种困难导致成立了一个由技术主管和流程负责人组成的小组,以审查可能更适合我们需求的可用工具。他们的职责是找到一种工具,使我们能够有效地管理跨多个项目的活动,适应我们灵活的敏捷精神,并且零成本。

这最终导致 Redmine 作为组织项目管理和问题跟踪的主要工具推出。Redmine 是一个开源应用程序,根据 GNU 通用公共许可证 v2 发布,使用 Ruby on Rails Web 应用程序框架编写。我们已将我们的实施安装在 Ubuntu VM 上。TSSG 工作人员利用开源 Apache Web 服务器,通过任何常用浏览器访问该工具。该应用程序的 MySQL 数据库会定期备份,因为该工具在组织内得到广泛使用并且具有关键地位。Redmine 在 TSSG 敏捷流程中的集成性质以及我们使用的其他工具如图 1 所示。

Using Free and Open Source Tools to Manage Software Quality: Open Source and Free Tools Mapped to the TSSG Agile Process

在需求收集阶段,所有项目需求都在 Redmine 中记录为用户故事。这些用户故事最初存储在项目积压中,然后分配给特定的工程版本和双周迭代。然后将用户故事分解为子任务和子功能,以便计划和执行明确且可衡量的工作要素,以实现总体目标。这些工作分配给团队中的个人,以便在特定时间段内完成。

Redmine 工具促进了我们工程团队使用的许多其他敏捷方法,包括时间管理、缺陷跟踪、电子邮件集成、任务板、冲刺卡等。

虽然有一个活跃的开发人员社区在 Redmine 上工作并创建有价值的插件,但这在某种程度上是一把双刃剑。我们过去发现,由于这些插件,升级核心产品可能会出现问题。这些插件并不总是与较新版本兼容,这导致升级期间出现问题,并导致团队以前使用的功能出现功能损坏。

代码仓库和持续集成

项目团队的首要任务之一是建立源代码控制框架。维护一个中心区域供团队检入代码并定期备份代码至关重要。跟踪代码版本将允许您在需要时回滚到以前的版本。随着项目增长而生成分支以及标记构建以允许热修复可能是可能的必要条件。在 TSSG 中,我们使用了 Apache Subversion 系统和 Git 存储库的本地托管版本,这两种工具都满足了我们项目的需求。

我们为项目设置的另一个方便的集成点是 Git 和 Redmine 之间的集成。这使我们能够直接从我们的项目管理系统查看 Git 存储库、提交和统计信息。

我们目前正在探索的一个概念是在提交之前对代码进行同行评审。这尤其适用于与更有经验的同事配对的初级开发人员。我们正在检查 Gerrit 和 Review Board 等工具在这方面的适用性。虽然它可能会在提交之前带来额外的开销,但我们认为从长远来看,它可以为我们的产品增加额外的质量。代码审查和结对编程是 TSSG 提倡的理念,但由于时间限制,常常被忽视。如果这些工具能够以相对无缝的方式促进代码审查和结对编程,我们预计将在部分项目上试用它们,然后再推广到通用用途。

我们敏捷流程的关键要素是定期构建代码。持续集成将在构建时执行所有单元测试和验收测试,并使定期构建可在测试环境中进行验证。在 TSSG 中,我们使用了 Hudson,更频繁地使用了 Jenkins。Jenkins 易于安装和配置,可以通过代码检入(到上述存储库)或定期触发构建。用户友好的基于 Web 的界面使查看构建列表(包括最新构建)变得容易。您可以查看任何构建中所做的更改,并且还提供了每个构建的测试结果的全面概述。Jenkins 还可以配置为在构建通过和/或失败时向团队成员发送电子邮件。当然,在底层,Ant 和 Maven 等开源工具实际上正在生成构建。

在 TSSG 中,我们提倡测试驱动开发的概念,虽然单元测试工具的选择会因所使用的技术而异,但 JUnit 是最常见的。在此基础上,我们使用 Cobertura 等工具来衡量代码的测试覆盖率百分比。Jenkins 的 Cobertura 插件允许从 Jenkins 构建网页分析代码覆盖率。我们流程的这一要素通常会在 VnV 团队和工程团队之间引发最激烈的讨论。我们的目标是 90% 的代码覆盖率水平,但对于使用某些技术实现此目标的难度总是存在争议。此外,达到最后几个百分点所需的时间和资源通常会因投资回报率而受到质疑。但是,我们敏捷理念中提倡的团队心态意味着始终可以达成共识。

TSSG 敏捷流程方法的另一个方面是独立的代码审查团队。该团队使用本节中描述的工具审查项目构建框架的实施情况,目的是从根本上提高代码质量。他们还可以建议开发人员使用 Checkstyle、Gmetrics 或 CodeNarc 等开源工具实施代码分析。

自动化测试

TSSG 中的大多数项目都从资助研究开始。但是,随着项目的发展以及解决方案的稳定和成熟,产品通常会呈现出更商业化的性质。随着这个阶段的临近,我们发现对迄今为止开发的组件实施 Selenium 自动化测试套件是有益的。

我们的后端实施是 Selenium 2.0 WebDriver,在 Windows 服务器上运行。Selenium IDE 作为 Firefox 浏览器插件安装,用于记录测试用例。为了允许将测试套件的结果通过电子邮件发送给相关团队成员,我们安装了另外两个免费软件:MDaemon Free 邮件服务器和 SendEmail,一个轻量级命令行电子邮件客户端。

测试在 Firefox 浏览器中执行,并通过 Selenium IDE 记录。然后将测试保存在服务器端。创建单个文件以列出作为测试套件一部分执行的所有单独测试用例。开发批处理文件以执行整个套件,并计划在所需的时间间隔运行。批处理文件调用 Selenium 工具,并告诉它要运行哪个套件(以及在哪个浏览器上运行)以及在哪里保存结果。最后一步是将结果通过电子邮件发送到分发列表。

您经常会发现其他用户在自动化测试元素时遇到了障碍。为了克服这个问题,他们可能为 Selenium 编写了“用户扩展”,并使其公开可用。这些由个人贡献者提供的编码解决方案包含在本地环境中配置的平面文件中,证明非常有用。我们使用的最早的扩展之一是 beatnicClick 函数。这个方便的扩展充当了某些本机点击活动超时故障问题的解决方法,允许测试无缝地执行所需的功能。我们在框架中实施的另一个用户扩展示例是用于流程控制逻辑。轻松包含 goto 语句和 while 循环的能力有助于提高自动化测试套件的稳健性和覆盖率。

在 TSSG 中实施的 Selenium 框架允许我们在浏览器会话中执行功能,记录这些步骤,然后自动重放它们。然后可以扩展测试步骤,以包括检查站点上的特定文本或元素。您可以捕获和存储变量以在测试套件中重复使用。可以添加暂停和等待以复制真实的用户行为。可以捕获屏幕截图。支持数据驱动测试;也就是说,可以将包含参数列表的外部文件馈送到测试中。其他更高级的功能包括使用 Javascript 代码片段,例如操作数据或字符串。

虽然必须在 Firefox 中进行测试记录,但 Selenium WebDriver 支持的测试执行允许我们针对 Firefox、IE、Chrome、Safari 和其他常用浏览器运行测试。

在某些项目中,我们遇到了 Selenium 无法与 Windows 特定的弹出对话框交互的问题。虽然 Selenium 提供了一个处理浏览器弹出窗口的功能(通过 getWindowHandles 和 switchTo.window),但该框架无法处理非浏览器组件。为了解决这个问题,我们使用了另一个开源自动化工具 iMacros。使用 iMacros 处理与外部对话框的交互,iMacro 脚本另存为浏览器中的书签,并从 Selenium 调用,从而实现整个测试的无缝自动化。

Selenium 非常适合我们的 VnV 测试团队,他们利用其测试的记录/回放编写以及之前描述的一些扩展。但它也可以成为开发人员的强大工具,他们需要使用 Selenium API 以 Java、Ruby、Python 和其他语言创建测试。

TSSG 最重要的 Selenium 自动化测试实施是在 FeedHenry 项目上。在积极的双周发布周期4 中工作,VnV 团队维护的全面自动化测试套件使这家羽翼未丰的公司有信心和空间每两周为其企业移动应用程序平台发布功能。RedHat 以 6350 万英镑收购5 FeedHenry (feedhenry.com),该项目最初只是一个小型研究项目,这证明了 TSSG 的研究和创新模式以及我们敏捷流程和工具的成功实施。

负载测试

性能监控是 TSSG 软件生命周期的一个重要组成部分,因为我们的许多产品将进行现场试用和全面商业化。我们通过两种方式进行负载测试。耐久性测试包括评估系统在较长时间内处理适度工作负载的能力。另一方面,容量测试使系统在有限的时间内承受重负载。这两种方法都发现了某些项目中的瓶颈、错误和组件限制。

Apache JMeter 是一种开源负载测试工具,旨在负载测试功能行为和测量性能。它最初是为测试 Web 应用程序而设计的,但后来扩展到其他测试。JMeter 提供了测试所需的控制,并使用多个线程来模拟多个用户。虽然 JMeter 不是浏览器,也不像浏览器那样工作,但它可以模拟浏览器行为,包括缓存、Cookie 管理和标头管理。

JMeter 包括一个 HTTP 代理,启用后,可在测试网站时用于记录脚本。其想法是将浏览器指向 JMeter 代理,以便 JMeter 可以嗅探通过浏览器发出的请求,并将它们存储在 JMeter 中指定的控制器下。派生的信息可用于创建测试计划。然后,JMeter 将向服务器回放 HTTP 请求,但我们可以模拟任意数量的用户这样做。我们还使用 Fiddler 和 Firebug 来深入挖掘 Web 流量(如果需要)。

不幸的是,JMeter 不会执行 HTML 页面中找到的 Javascript。它也不会像浏览器那样呈现 HTML 页面(可以将响应视为 HTML)。因此,根据 Web 应用程序的不同,如果您要测试客户端业务逻辑并使用 JMeter 进行后端组件测试,则可能有必要在单独的测试运行中合并 Selenium 测试。JMeter 还拥有大量的第三方插件,这些插件通过一系列图形、新的负载交付控制器和其他充当原始 JMeter 包附加组件的功能来扩展其功能。

最近,我们有一个需求,即跨 Openfire IM 服务器实例执行负载测试,以测试我们正在作为新项目一部分创建的策略引擎中的规则。在这种情况下,我们使用 Mockaroo 生成大量具有真实特征的测试用户。然后,我们使用 Tsung 测试脚本向测试环境发送负载。Tsung 的 Erlang 基础意味着它使用的线程比 JMeter 少,从而允许更大规模的测试,但它被 JMeter 卓越的 GUI 所超越,JMeter 的 GUI 可以轻松配置测试和分析结果。

测试用例管理

TSSG 已选择 Klaros 测试管理系统来创建和执行手动测试用例。免费无限使用的社区版提供了跨多个项目维护手动测试用例所需的所有功能。

Windows 和 Linux 版本都可用,我们将实例安装在 Windows 服务器上。可下载的可执行文件将安装 Apache Tomcat 应用程序服务器和基于文件的数据库 Apache Derby(尽管可以将其更改为更强大的解决方案,例如 MySQL 或 PostgreSql)。用户可以通过任何常用 Web 浏览器与测试用例系统交互。

Klaros 的免费版支持同时维护多个项目。在这些项目中,测试用例管理器可以构建全面的测试步骤、测试用例和测试套件。可以为每个项目维护不同的测试环境,例如,针对不同的操作系统或应用程序服务器。此外,通过跟踪被测系统 (SUT) 的概念,支持被测产品的版本控制。

在执行时,测试人员可以决定完成单个测试或完整的测试套件。测试运行可以根据需要暂停和恢复。每个步骤都会捕获每个测试的结果(通过或失败)以及观察到的任何错误。测试套件完成后,将以各种格式(pdf、html、csv)生成易于阅读的报告。此报告将显示日期、测试环境、被测系统、测试用例结果的摘要表、结果的饼图以及更详细的单个测试用例列表,其中包含执行时间等详细信息。

社区版中还提供了与其他开源测试工具的集成。本文前面描述的 Redmine 可以配置为问题管理工具,以便可以直接在选定的错误跟踪和项目管理工具中创建工单。持续集成服务器 Hudson 和 Jenkins(前面已描述)也可以与 Klaros 集成。通过在 Hudson 或 Jenkins 中安装 Klaros 插件,可以在构建时生成的测试用例的结果可以通过 REST 接口导入到 Klaros 中。导入会使用适当的项目、测试环境和 SUT ID 进行标记,然后可以根据需要报告和分析结果。同样,来自 Selenium 等测试自动化工具的测试结果也可以导入并添加到手动测试结果中。

挑战

支持我们的项目生成的应用程序和功能的移动使用是我们质量产品的重要组成部分。当您想要涵盖 iOS、Android 和其他平台上的手机和平板电脑时,测试场景矩阵可能会变得非常庞大。再加上拥有自己变体的制造商范围,全面验证应用程序质量可能是一个挑战。

在某些项目中,我们涉足了商业产品池,这些产品提供了广泛的设备以及自动化测试功能,Device Anywhere 和 Perfecto Mobile 是最受欢迎的。但是,长期使用这些产品在预算紧张的项目中在财务上不可持续。我们尝试使用 ADB 和 monkeyrunner 自动化和编写针对 Android 设备的测试脚本。MonkeyTalk 看起来也是 iOS 和 Android 的合理前景。但是,构建和维护自动化移动测试套件所需的资源并不总是被证明是合理的。具有敏捷要求和紧迫期限的移动项目尚未被证明适合大规模自动化测试,而对模拟器测试缺乏信心也是一个担忧。另一方面,眼镜和手表等可穿戴技术的出现进一步拓宽了视野,可能需要更具战略性的方法。

我们在流程中确定的另一个需要改进的方面是安全测试。我们的许多项目都涉及电子健康、金融和个人数字数据领域,并且在保护用户数据方面有明显的要求。保护我们自己的知识产权和托管服务也是持续关注的问题。我们已在某些项目中使用 Netsparker 社区版以及其他免费工具,以尝试识别跨站点脚本、注入攻击等的漏洞。前面提到的代码审查团队会检查项目是否使用 Checkstyle 和 FindBugs 等静态分析工具来查找该级别的缺陷。但是,我们认为利用 TSSG 在该领域的现有专业知识可以帮助为更可靠的整体 VnV 流程产品提供框架和流程。

结论

TSSG 在没有基线资金的情况下运营,必须在国内外竞争以资助项目。凭借对产品卓越性的承诺,VnV 团队在所有项目中都发挥着作用,使用免费和开源工具在我们的应用程序中构建质量层是必然的选择。所描述的工具之间的许多集成点是在追求应用程序生命周期管理的零成本解决方案方面的额外好处。本文中描述的工具只是 TSSG 流程中使用的一部分工具。监控现有和新的零成本工具的演变是我们免费软件和开源战略的一项持续任务。

参考文献

 

1. Clarke, P. 和 O'Connor, R. 2012。SPI 对软件中小企业业务成功的影响:一项实证研究。《系统与软件杂志》85 (10), 2356-2367。

2. Baldwin H. 2014。公司对开源说“是”的 4 个理由。computerworld.com (2014 年 1 月 6 日)

3. TSSG tssg.org

4. Dowling, P. 2014。使用敏捷软件流程成功地将研究项目过渡到商业衍生项目。Euro SPI 2012 工业程序。《软件杂志:进化与过程》26 (5 月), 468-475。doi: 10.1002/smr.1611

5. Kepes, B. 2014。红帽收购 FeedHenry 以进军移动领域。《福布斯》(2014 年 9 月 18 日)。forbes.com

喜欢还是讨厌?请告诉我们

[email protected]

Phelim Dowling 在 IT 行业拥有 18 年的经验,曾在各种职位和公司工作。他的职业生涯始于英特尔,并在英特尔位于俄勒冈州的研发机构晋升为技术/项目主管。在那里,他负责协调和执行众多关键任务产品的开发、测试和部署到英特尔在全球的制造基地。

回到沃特福德后,他曾在沃特福德科技公司担任测试工程师。此后,他担任顾问项目经理,专门从事高度监管的制药行业的 IT 项目交付。2006 年,Phelim 加入了 TSSG 验证和确认团队,并在 Muzu、FeedHenry、Kodacall 以及最近由欧盟 FP7 资助的 OpenLab 计划等项目中提供了帮助。   

Kevin McGrath 毕业于沃特福德理工学院,获得商业研究学士学位。在公司获得爱尔兰第二个 GSM 许可证后不久,他加入了 Esat Digifone(后来成为 o2 Ireland),担任运营分析师。随着新计费系统的引入,Kevin 担任了计费协调员的角色,并负责公司推出的新产品的持续测试。2000 年,Kevin 加入 Openet Telecom 担任高级测试工程师。在此职位上,他最初在公司位于都柏林和世界各地各种客户站点的开发中心开发和执行手动和自动化测试用例。

2006 年,Kevin 加入了沃特福德理工学院 TSSG 内的商业化团队,担任验证和确认工程师。他曾参与多个爱尔兰企业项目,包括 FeedHenry SWAGGER、COIN、SSGS 和 EGP。他还参与了 Billing4Rent,这是一个由欧盟资助的项目,该项目为 Intec 的 Single.eView 计费产品提供了 SaaS 接口。

© 2015 1542-7730/15/0400 $10.00

acmqueue

最初发表于 Queue vol. 13, no. 4
数字图书馆 中评论本文








© 保留所有权利。

© . All rights reserved.