大公司的软件开发人员如何检查程序中的错误?


15

我想知道大型软件开发公司如何检查程序中的错误。

他们只是在多台计算机上进行测试吗?


13
释放它们。 (从主要机构发出的大量越野车中判断)
Orbling

他们进行了非常激进的销售和营销活动,将开发外包给其他国家,并摆脱了他们可能遇到的任何错误……直到他们“意外地”失去了巨大的市场份额。
Job

您为什么认为大公司与小公司有什么不同?
JohnFx 2012年

Answers:


30

以下是Google使用的一些技术。

  1. 雇用可能产生可靠代码的优秀开发人员。
  2. 大量进行单元测试
  3. 使用代码审查
  4. 设置连续构建以捕获集成问题。
  5. 有专门的质量检查部门。意味着人员测试和模拟最终用户的自动化程序(例如,使用Selenium)。
  6. 在生产过程中进行监控,以发现异常情况的证据。

我对这些问题的排名以我怀疑是捕获bug的有效性降序排列。


2
虽然这不是一个不好的答案,但是您会使用诸如“ QA”,“单元测试”和“连续构建”之类的许多术语,这些术语对于提出这样的问题的人来说可能是未知的。链接或给出定义会更好。
加布

@gabe:我添加了所用术语的指针。
btilly 2011年

3
+1-实际上,这也是捕获错误的最佳时间(即最便宜,时间和复杂度最高)的顺序(1-> 6)。
ozz 2011年

1
也许还进行了可用性测试,在90%的单词功能请求针对单词已具有的功能之前,用户根本找不到它们
jk。

@jk:那是谁的统计数据?请引用。
JBR威尔金森

19

较大的公司通常拥有整个Q / A部门,负责测试代码并确保其按预期的方式工作。通常就像您描述的那样-一群人测试很多机器。有时测试是自动化的,有时则不是。参见质量保证-维基百科

很多时候,开发人员自己会在开发过程中发现错误。此外,客户通常是第一个发现错误的人。

较小的公司(例如我目前正在工作的公司)使用敏捷测试实践


1
是的,还有质量检查人员来制定测试计划。
Job

+1:这正是我们的工作方式,测试小组(我正在研究)编写测试计划并编写所有测试代码,但琐碎的单元测试除外(开发人员编写了这些代码,其中一些练习使用TDD,但是它不是强制性的)。我们专注于接受,整合和回归。当开发人员发现错误时,他们会记录下来,修复它,我们将对其进行测试并为其编写自动化程序。
史蒂文·埃弗斯

18

我要说的是公司的成熟度,而不是规模:)有大型公司的开发实践不佳,而小型公司则处于发展的前沿。

通常,一个成熟的开发团队将从事以下活动1;尽量减少向系统中引入新的错误; 2 在现有系统中查找错误。

单元测试:这些是单个方法的“微型驱动程序”,以确保方法按其声明的方式工作。这些始终是自动化测试。

集成测试:这些测试旨在检查系统中是否有较大的功能单元。这可能涉及测试数据库集成或与第三方库的集成。这些也是自动测试。

验收测试:验收测试用于测试用户需求。这些通常只是测试“幸福之路”。在我的团队中,这些测试旨在表明,如果用户使用了设计使用的功能,则不会有任何麻烦。可以是手动或自动的。

功能测试:这些测试类似于验收测试,但它们也测试“不愉快的道路”。这些测试意味着测试不太明显的场景。可以是手动或自动的。

回归测试:我们使用此术语对系统发布给客户之前,对其进行“全面测试”。手动或自动。

大猩猩测试:(仅限手册)。当非常聪明的人有意尝试破坏应用程序时,这是一种测试。

性能测试旨在确保性能可以接受并且不会随时间降低。通常是自动化的。

稳定性测试:这些测试旨在确保系统随时间推移保持稳定。自动化的。

持续集成:这是一个系统,可以自动签出您的代码,对其进行编译并运行自动测试。您的更快的测试(单元,集成)将在开发人员每次提交代码时运行。其他一些则是每晚(接受,功能)或每周(性能,稳定性)运行。

代码覆盖率报告:向您显示测试了多少代码。没有测试覆盖率的代码更有可能被破坏。

分析代码的不同工具:这些工具通常显示需要在何处重构代码,以减少潜在错误的发生。

配对编程:两个开发人员一起交付功能。“有凝聚力的一对要好于其各部分的总和。”

最重要的是:自动化持续集成


对于公司的成熟度持有不同意见-软件开发负责人也很可能在意小型/年轻公司的质量,并且这种信息自上而下地传递。工程师的成熟,是的,这是可能的。
JBRWilkinson 2012年

1
@JBRWilkinson:我想我们可以开始谈论公司“成熟”的意义了。我并不是要暗示它与年龄有关,更像是“智慧”。即使只有一两年的历史,初创公司也可以成熟/明智。
c_maker 2012年

4

这取决于公司及其开发的产品。

首先,许多公司强制执行诸如代码审查和强制掉毛(自动错误检测工具)之类的编码实践,以减少进入存储库的错误数量。许多公司还通过了单元测试。我在Google(Google)工作时就是这种情况。检入代码后,将对所有内容进行测试,以确保不引入新的错误。

其次,许多公司都有质量检查部门来负责验证行为。这在财务中特别常见(错误可能代价高昂且验证规则复杂),但在向召回成本高昂的用户出售产品的公司中也存在(例如英特尔,微软等)。

第三,只要有可能,公司就会进行Dogfooding(有自己的用户在内部使用该产品),然后发布有限的beta。在此阶段捕获了许多错误。例如,在Microsoft工作的人们使用的Office,Windows和DevStudio内部版本比您在外部使用的版本要新。然后,有限的用户群体或合同公司可以对其进行采样。同样,在Google发行之前,我们使用GMail和Docs的内部版本。游戏公司组织公开测试版以测试其产品和服务器上的负载等。


1

当然,答案是“无足轻重”,但是我将提供迄今为止最大的项目的示例,该项目在高峰时期大约有50名开发人员参与其中。

基本设置:用于使用BizTalk处理大量数据的后端软件。

第一道防线是单元测试。在我们的案例中,这些代码每天都会对签入源代码管理中的所有内容执行,通常其中一些是由开发人员在签入之前手动执行的。单元测试主要由开发人员编写,但有时会由测试人员进行补充测试。

下一步是每周建立Virtual PC,测试人员根据每个组件的规范文档,对数据流进行一系列主要的自动化的端到端测试。

之后,同一台Virtual PC充实了非常接近真实事物的一些业务数据,并再次使用某些特定用例进行了测试。

然后将Virtual PC与其他部门的其他系统组件(大部分也是虚拟的)组合在一起,以基于从用户输入数据到数据流结束的端到端测试进行集成测试。

在另一个轨道上,系统提供商对安装包进行了测试,以查看安装包是否在类似生产的环境中正确安装,以及在发生故障时是否可以回滚。

在类似生产环境中安装后,我们在此处进行负载和压力测试以测试整体稳定性(当您在10台BizTalk服务器,8台SQL Server和一堆其他专用硬件(例如XML加速器)上运行时,不要轻描淡写和专用的归档文件-当然都是集群的)。

当我们对所有测试都满意时,该代码就投入了生产。修复代码中的错误会产生很大的延迟(整个测试周期需要4至6周的时间),并且进行所有这些测试的成本都很高,但是总体稳定性还是不错的。实际上,到目前为止我所见过的最好的。同样,在每天处理价值几百万美元的系统上,这非常重要。您的要求可能会有所不同,但这就是我们做到的方式和成功的方式。


1

最初的问题在概念上似乎比所提供的大多数高度详细的答案更通用。

让我们从更高的层次(不太详细)来看。开发软件是为了满足某人(个人,公司或其他)的特定需求。

需要将这些需求映射到各个故事/需求中,这些故事/需求将在源代码中实现(在构建阶段)。

正确定义故事/需求对于质量保证(QA)团队(实际的软件测试人员)在执行最终代码时验证最终代码是否符合这些故事和需求至关重要。因此,为此目的,质量检查小组会创建“测试用例”来进行验证。

该代码一旦发布给质量检查小组,便会经过测试并找出错误。不同类型和严重性的错误。跟踪这些错误,并分配给开发人员最终修复它们。

如今,虚拟机的使用允许一个测试人员在一个相同的真实硬件中运行不同的环境。但是有时您最终需要一些专用于质量检查阶段的计算机。

我希望这可以帮助您(大致)了解整个过程。


0

好吧,我讨厌愤世嫉俗,但是由于某个“设备”操作系统中存在许多未解决的错误,因此公司规模越大,越丰富,他们能够创建并交付给最终用户的错误就越多。如果该软件可以正常工作并且看上去很酷,那么他们仍然会发布它。如果管理者认为它准备好了,那就准备好了。那时,真正令人讨厌的虫子开始从木制品中冒出来,最终用户成为豚鼠。大约十年后的今天,大多数错误将被解决(并增加了一些缺陷,可以很好地解决),该公司将准备继续进行下一个大创意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.