我想知道大型软件开发公司如何检查程序中的错误。
他们只是在多台计算机上进行测试吗?
我想知道大型软件开发公司如何检查程序中的错误。
他们只是在多台计算机上进行测试吗?
Answers:
以下是Google使用的一些技术。
我对这些问题的排名以我怀疑是捕获bug的有效性降序排列。
较大的公司通常拥有整个Q / A部门,负责测试代码并确保其按预期的方式工作。通常就像您描述的那样-一群人测试很多机器。有时测试是自动化的,有时则不是。参见质量保证-维基百科
很多时候,开发人员自己会在开发过程中发现错误。此外,客户通常是第一个发现错误的人。
较小的公司(例如我目前正在工作的公司)使用敏捷测试实践
我要说的是公司的成熟度,而不是规模:)有大型公司的开发实践不佳,而小型公司则处于发展的前沿。
通常,一个成熟的开发团队将从事以下活动1;尽量减少向系统中引入新的错误; 2 在现有系统中查找错误。
单元测试:这些是单个方法的“微型驱动程序”,以确保方法按其声明的方式工作。这些始终是自动化测试。
集成测试:这些测试旨在检查系统中是否有较大的功能单元。这可能涉及测试数据库集成或与第三方库的集成。这些也是自动测试。
验收测试:验收测试用于测试用户需求。这些通常只是测试“幸福之路”。在我的团队中,这些测试旨在表明,如果用户使用了设计使用的功能,则不会有任何麻烦。可以是手动或自动的。
功能测试:这些测试类似于验收测试,但它们也测试“不愉快的道路”。这些测试意味着测试不太明显的场景。可以是手动或自动的。
回归测试:我们使用此术语对系统发布给客户之前,对其进行“全面测试”。手动或自动。
大猩猩测试:(仅限手册)。当非常聪明的人有意尝试破坏应用程序时,这是一种测试。
性能测试旨在确保性能可以接受并且不会随时间降低。通常是自动化的。
稳定性测试:这些测试旨在确保系统随时间推移保持稳定。自动化的。
持续集成:这是一个系统,可以自动签出您的代码,对其进行编译并运行自动测试。您的更快的测试(单元,集成)将在开发人员每次提交代码时运行。其他一些则是每晚(接受,功能)或每周(性能,稳定性)运行。
代码覆盖率报告:向您显示测试了多少代码。没有测试覆盖率的代码更有可能被破坏。
分析代码的不同工具:这些工具通常显示需要在何处重构代码,以减少潜在错误的发生。
配对编程:两个开发人员一起交付功能。“有凝聚力的一对要好于其各部分的总和。”
最重要的是:自动化和持续集成。
这取决于公司及其开发的产品。
首先,许多公司强制执行诸如代码审查和强制掉毛(自动错误检测工具)之类的编码实践,以减少进入存储库的错误数量。许多公司还通过了单元测试。我在Google(Google)工作时就是这种情况。检入代码后,将对所有内容进行测试,以确保不引入新的错误。
其次,许多公司都有质量检查部门来负责验证行为。这在财务中特别常见(错误可能代价高昂且验证规则复杂),但在向召回成本高昂的用户出售产品的公司中也存在(例如英特尔,微软等)。
第三,只要有可能,公司就会进行Dogfooding(有自己的用户在内部使用该产品),然后发布有限的beta。在此阶段捕获了许多错误。例如,在Microsoft工作的人们使用的Office,Windows和DevStudio内部版本比您在外部使用的版本要新。然后,有限的用户群体或合同公司可以对其进行采样。同样,在Google发行之前,我们使用GMail和Docs的内部版本。游戏公司组织公开测试版以测试其产品和服务器上的负载等。
当然,答案是“无足轻重”,但是我将提供迄今为止最大的项目的示例,该项目在高峰时期大约有50名开发人员参与其中。
基本设置:用于使用BizTalk处理大量数据的后端软件。
第一道防线是单元测试。在我们的案例中,这些代码每天都会对签入源代码管理中的所有内容执行,通常其中一些是由开发人员在签入之前手动执行的。单元测试主要由开发人员编写,但有时会由测试人员进行补充测试。
下一步是每周建立Virtual PC,测试人员根据每个组件的规范文档,对数据流进行一系列主要的自动化的端到端测试。
之后,同一台Virtual PC充实了非常接近真实事物的一些业务数据,并再次使用某些特定用例进行了测试。
然后将Virtual PC与其他部门的其他系统组件(大部分也是虚拟的)组合在一起,以基于从用户输入数据到数据流结束的端到端测试进行集成测试。
在另一个轨道上,系统提供商对安装包进行了测试,以查看安装包是否在类似生产的环境中正确安装,以及在发生故障时是否可以回滚。
在类似生产环境中安装后,我们在此处进行负载和压力测试以测试整体稳定性(当您在10台BizTalk服务器,8台SQL Server和一堆其他专用硬件(例如XML加速器)上运行时,不要轻描淡写和专用的归档文件-当然都是集群的)。
当我们对所有测试都满意时,该代码就投入了生产。修复代码中的错误会产生很大的延迟(整个测试周期需要4至6周的时间),并且进行所有这些测试的成本都很高,但是总体稳定性还是不错的。实际上,到目前为止我所见过的最好的。同样,在每天处理价值几百万美元的系统上,这非常重要。您的要求可能会有所不同,但这就是我们做到的方式和成功的方式。
最初的问题在概念上似乎比所提供的大多数高度详细的答案更通用。
让我们从更高的层次(不太详细)来看。开发软件是为了满足某人(个人,公司或其他)的特定需求。
需要将这些需求映射到各个故事/需求中,这些故事/需求将在源代码中实现(在构建阶段)。
正确定义故事/需求对于质量保证(QA)团队(实际的软件测试人员)在执行最终代码时验证最终代码是否符合这些故事和需求至关重要。因此,为此目的,质量检查小组会创建“测试用例”来进行验证。
该代码一旦发布给质量检查小组,便会经过测试并找出错误。不同类型和严重性的错误。跟踪这些错误,并分配给开发人员最终修复它们。
如今,虚拟机的使用允许一个测试人员在一个相同的真实硬件中运行不同的环境。但是有时您最终需要一些专用于质量检查阶段的计算机。
我希望这可以帮助您(大致)了解整个过程。
好吧,我讨厌愤世嫉俗,但是由于某个“设备”操作系统中存在许多未解决的错误,因此公司规模越大,越丰富,他们能够创建并交付给最终用户的错误就越多。如果该软件可以正常工作并且看上去很酷,那么他们仍然会发布它。如果管理者认为它准备好了,那就准备好了。那时,真正令人讨厌的虫子开始从木制品中冒出来,最终用户成为豚鼠。大约十年后的今天,大多数错误将被解决(并增加了一些缺陷,可以很好地解决),该公司将准备继续进行下一个大创意。