acm-header
登录

ACM通信

实践

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


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

来源:iStockPhoto.com

回到顶部

敏捷软件开发的原则更加强调个体和交互,而不是过程和工具。它们引导我们远离沉重的文档需求,并引导我们沿着一条有效地对变化做出反应的道路前进,而不是严格地坚持预先定义的计划。为了支持这种灵活的操作方法,有合适的应用程序来管理团队的活动是很重要的。实施有效的框架,以确保产品在早期和所有级别都被构建到产品中,这也是必不可少的。考虑到这些问题并从预算意识的角度出发,本文将探索一个组织在围绕其项目和产品构建过程和质量时使用的免费和开源应用程序和工具。

软件开发团队如何实现过程并处理其应用程序生命周期管理,对所开发产品的成功有着巨大的影响。2精益和高效的运营模式是关键,尤其是对初创企业而言。许多商业级别的产品和框架可用于集成开发过程的所有方面:需求管理、项目计划、缺陷管理、测试用例创建和执行、自动化测试、负载测试,等等。但是这些工具可能很昂贵,对于一些组织的敏捷性概念来说可能是一个太大的负担。

还有其他的解决方案可以支持您的敏捷哲学,而不会对您辛苦挣来的底线造成任何影响。大量的免费和开源工具已经出现了很长一段时间。许多公司和组织正在使用开源工具来满足他们的业务需求。1这些应用程序通常有大量活跃的贡献者社区,他们记录产品的特性,并定期发布增强功能。我们建议在检查工具是否适合您的需求时进行适当的尽职调查,并确定它们的性能、维护和增长的跟踪记录。如果它们通过了检查,那么开源工具可以满足小型项目组织、受资助的研发团队、早期初创企业,甚至更大规模的企业的需求。

回到顶部

项目管理和问题跟踪

电信软件和系统集团(TSSG)5以前使用的工具,如用于项目计划的XPlanner和用于缺陷管理的Bugzilla。虽然这些工具单独来说功能相当强大,但是在收集需求、计划、记录缺陷等方面缺乏集成,这成为了我们渴望更精简和敏捷的工作方式的障碍。期望开发人员在一个系统中寻找要修复的bug,而在另一个系统中确定要开发哪些功能是低效的。验证与验证(VnV)团队努力将缺陷与特性联系起来,但这是手工的和费力的。由于工具的独立特性,每日和每周活动的计划变得更加困难。

这个困难导致创建了一个由技术领导和过程领导者组成的子团队,以审查可能更适合我们需求的可用工具。他们的任务是找到一种工具,使我们能够有效地跨多个项目管理我们的活动,适应我们的流动敏捷精神,并且零成本。

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

在需求收集阶段,所有的项目需求都作为用户故事记录在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构建Web页面分析代码覆盖率。我们过程中的这个元素经常在VnV团队和工程团队之间产生最热烈的讨论。我们的目标是90%的代码覆盖率,但是对于使用某些技术实现这一目标的难度一直存在争论。此外,完成最后几个项目所需的时间和资源也经常受到投资回报方面的质疑。然而,我们敏捷哲学中提倡的团队精神意味着我们总是能达成共识。

TSSG敏捷过程方法的另一个方面是一个独立的代码评审团队。这个团队使用本节中描述的工具来检查构建框架的项目实现,目的是从头开始将质量构建到我们的代码中。他们还可能建议开发人员使用诸如Checkstyle、Gmetrics或CodeNarc等开源工具来实现代码分析。

回到顶部

自动化测试

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

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

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

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

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项目上。按照积极的两周发布周期工作,3.VnV团队维护的全面自动化测试套件给了这家羽翼未丰的公司信心和空间,每两周发布一次企业移动应用平台的功能。红帽公司6350万欧元的收购4FeedHenry (www.feedhenry.com),这是从一个小型研究项目开始的,它证明了TSSG的研究和创新模式,以及我们敏捷过程和工具的成功实现。

回到顶部

负载测试

性能监控是TSSG软件生命周期的重要组成部分,因为我们的许多产品都将进入实时试用和完全商业化。我们用两种方式进行负载测试。持久性测试包括评估系统在较长时间内处理中等工作负载的能力。另一方面,批量测试使系统在有限的时间内处于高负载状态。这两种方法都确定了某些项目中的瓶颈、bug和组件限制。

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所击败,后者允许轻松地配置测试和分析结果。

回到顶部

测试用例管理

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

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

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

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

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

回到顶部

挑战

支持移动使用的应用程序和功能生产的项目是我们的质量提供的一个基本要素。当您想要覆盖iOS、Android和其他平台上的手机和平板电脑时,测试场景矩阵可能会变得相当大。再加上各种不同的制造商,全面验证应用质量可能是一项挑战。

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

我们已经确定的用于改进流程的另一个方面是安全性测试。我们的许多项目都位于电子医疗、金融和个人数字数据领域,在保护用户数据方面有明显的需求。保护我们自己的知识产权和托管服务也是我们一直关注的问题。我们在某些项目中使用了Netsparkers社区版和其他免费工具,试图识别跨站点脚本、注入攻击等的漏洞。前面提到过,代码评审团队检查项目使用静态分析工具(如Checkstyle和FindBugs)的情况,以发现该级别的缺陷。然而,我们认为利用现有的TSSG在这一领域的专业知识可以帮助提供一个框架和流程,为整个VnV流程提供更防弹的产品。

回到顶部

结论

TSSG在没有基线资金的情况下运作,必须在国内和国际上竞争为项目提供资金。VnV团队在所有项目中的作用体现了对产品卓越的承诺,使用免费和开源工具在我们的应用程序中构建质量层是必要的。所描述的工具之间的许多集成点是追求零成本应用程序生命周期管理解决方案的额外好处。本文中描述的工具只是TSSG过程中使用的工具中的一部分。在我们的免费软件和开源战略中,监控现有和新的零成本工具的发展是一项持续的任务。

ACM队列的q戳相关文章
queue.acm.org

在质量保证中采用DevOps实践
詹姆斯罗氏
http://queue.acm.org/detail.cfm?id=2540984

在ide中构建协作
程立德,等。
http://queue.acm.org/detail.cfm?id=966803

打破主要释放习惯
达蒙普尔
http://queue.acm.org/detail.cfm?id=1165768

回到顶部

参考文献

1.Baldwin H.公司同意开源的原因。(2014年1月6日);http://bit.ly/1uJ7uYK

2.科技进步指数对软件中小企业商业成功的影响:实证研究。J.系统与软件, 10(2012), 2356-2367。

3.使用敏捷软件过程成功地将一个研究项目转变为一个商业衍生项目。在J.软件:演进与过程(2014年5月),468 - 475;doi: 10.1002 / smr.1611

4.Red Hat收购FeedHenry进军移动领域。《福布斯》(2014年9月18日);http://onforb.es/1CXd4WF

5.TSSG;www.tssg.org/

回到顶部

作者

Phelim道林在IT行业有18年的经验。他于2006年加入TSSG验证和验证团队,并协助了Muzu、FeedHenry、Kodacall等项目,以及最近由欧盟fp7资助的OpenLab项目。

凯文·麦格拉思2006年加入沃特福德理工学院TSSG的商业化团队,担任验证和验证工程师。他曾参与FeedHenry SWAGGER、COIN、SSGS、EGP和Billing4Rent(欧盟资助的项目)。

回到顶部

数据

UF1数字映射到tsssg敏捷过程的开源和免费工具。

回到顶部


版权归作者所有。授权ACM出版权利。

数字图书馆是由计算机协会出版的。版权所有©2015 ACM, Inc.


没有发现记录

Baidu
map