一、软件单元测试
软件单元测试
单元测试涉及测试软件应用程序的每个单元或单个组件,这是第一级软件测试。单元测试的目的是验证单元组件的性能,单元是软件系统的单个可测试部分,并在应用程序软件的开发阶段进行测试。
此测试旨在测试隔离代码的正确性,单元组件是应用程序的单独功能或代码,白盒测试方法用于单元测试,通常由开发人员完成。
在测试级别层次结构中,单元测试是在集成和其他剩余测试级别之前完成的第一级测试。它使用模块进行测试,减少了等待单元测试框架的依赖性,存根,驱动程序和模拟对象用于单元测试的辅助。
单元测试背后的原因
通常,软件属于四级测试:单元测试,集成测试,系统测试和验收测试,但有时由于时间消耗,软件测试人员进行的单元测试最少,但单元测试的跳过可能会导致集成测试,系统测试期间出现更高的缺陷 ,以及验收测试,甚至在完成软件应用程序后进行的Beta测试期间。
下面列出了一些重要原因:
1、单元测试可帮助测试人员和开发人员理解代码的基础,使它们能够快速更改导致代码的缺陷。
2、单元测试有助于文档。
3、单元测试在开发阶段很早就修复了缺陷,因此在即将到来的测试级别中可能会出现少量缺陷的原因。
4、它通过迁移代码和测试用例来帮助实现代码的可重用性。
单元测试技术
单元测试使用所有白盒测试技术,因为它使用软件应用程序的代码:
1、数据流测试
2、控制流程测试
3、分支覆盖测试
4、报告覆盖率测试
5、决策覆盖率测试
单元测试工具:
NUnit:NUnit是一个主要用于.Net语言的单元测试框架。它允许手动编写测试用例脚本并支持数据驱动的测试用例。
JUnit:JUnit是一个主要用于java语言的单元测试框架。JUnit提供了用于识别方法的断言。
PHPUnit:用于PHP语言的PHPUnit单元测试工具。它提供断言以使用断言方法(方法是预定义的)来确保系统以所需方式运行。
Parasoft Jtest:Parasoft Jtest是一个集成的IDE插件Junit,Mockito,PowerMock和Spring,只需轻松一键式活动即可扩展,创建和维护单元测试。
EMMA:EMMA是一种用于java语言编码的开源单元测试工具。它分析并报告java语言的代码。
如何通过单元测试获得最佳结果?
通过遵循下面列出的步骤,单元测试可以提供最佳结果而不会混淆并增加复杂性:
1、测试用例必须是独立的,因为如果需求有任何变化或增强,测试用例不会受到影响。
2、单元测试用例的命名约定必须清晰且一致。
3、在单元测试期间,必须先修复已识别的错误,然后再跳转到SDLC的下一阶段。
4、一次只能测试一个代码。
5、通过编写代码来采用测试用例,如果不这样做,将增加执行路径的数量。
6、如果任何模块的代码有变化,请确保该模块可以使用相应的单元测试。
单元测试的优点
1、单元测试使用模块方法,因为任何部件都可以在不等待完成另一部件测试的情况下进行测试。
2、开发团队专注于提供的单元功能以及单元测试套件中的功能应该如何理解单元API。
3、单元测试允许开发人员在几天后重构代码并确保模块仍然正常工作而没有任何缺陷。
单元测试的缺点
1、它无法识别集成或广泛级错误,因为它适用于代码单元。
2、在单元测试中,不可能对所有执行路径进行评估,因此单元测试无法捕获程序中的每个错误。
3、最适合与其他测试活动结合使用。
二、软件集成测试
软件集成测试
集成测试是单元测试后软件测试过程的第二个层次,在此测试中,软件的单元或单个组件在组中进行测试。集成测试级别的重点是在集成组件或单元之间交互时暴露缺陷。
单元测试使用模块进行测试,这些模块在集成测试中进行组合和测试。该软件使用许多软件模块开发,这些软件模块由不同的编码器或程序员编码,集成测试的目标是检查所有模块之间通信的正确性。
集成测试背后的原因
虽然软件应用程序的所有模块已经在单元测试中进行了测试,但由于以下原因仍然存在错误:
1、每个模块由个别软件开发人员设计,其编程逻辑可能与其他模块的开发人员不同; 集成测试对于确定软件模块的工作至关重要。
2、检查软件模块与数据库的交互是否是错误的。
3、在模块开发时可以更改或增强要求。这些新要求可能无法在单元测试级别进行测试,因此集成测试成为强制性要求。
4、软件模块之间的不兼容可能会产生错误。
5、测试硬件与软件的兼容性。
6、如果模块之间的异常处理不充分,则可能会产生错误。
集成测试技术
测试技术(黑盒测试,白盒测试和灰盒测试)都可用于集成测试; 一些列表如下:
黑盒测试
1、状态转换技术
2、决策表技术
3、边界值分析
4、成对测试
5、因果图
6、等价划分
7、错误猜测
白盒测试
1、数据流测试
2、控制流程测试
3、分支覆盖测试
4、决策覆盖率测试
集成测试方法
集成测试有两种基本方法:
1、大爆炸
2、增量
下面来了解这些方法。
大爆炸法
在这种方法中,通过一次集成所有模块来完成测试。它对于小型软件系统来说很方便,如果用于大型软件系统,很难识别缺陷。
由于该测试可以在完成所有模块之后完成,因为测试团队执行此过程的时间较少,因此可以轻松错过内部链接接口和高风险关键模块。
优点:
1、它适用于小型软件系统。
缺点:
1、缺陷的识别很困难。
2、小模块很容易丢失。
3、提供测试的时间非常少。
增量方法
在增量方法中,模块按升序逐个添加或根据需要添加。所选模块必须与逻辑相关。通常,添加两个或两个以上的模块并进行测试以确定功能的正确性。该过程一直持续到所有模块的成功测试。
增量方法通过进一步的方法进行:
1、自上而下
2、自下而上
3、混合测试
自顶向下 - 自上而下的测试策略处理使用较低级别模块测试更高级别模块的过程,直到成功完成所有模块的测试。由于首先测试了关键模块,因此可以及早发现并修复主要设计缺陷。
优点:
1、缺陷的识别很困难。
2、早期的原型是可能的。
缺点:
1、由于存根的数量很多,它变得非常复杂。
2、较低级别的模块测试不充分。
3、首先测试关键模块,以减少缺陷的可能性。
自下而上方法 - 自下而上测试策略处理下级模块使用更高级别模块进行测试的过程,直到成功完成所有模块的测试。顶级关键模块最后进行测试,因此可能会导致缺陷。
优点:
1、缺陷的识别很容易。
2、不需要等待所有模块的开发,因为它节省了时间。
缺点:
1、由于缺陷可能发生,最后对关键模块进行测试。
2、没有早期原型的可能性。
混合测试方法 - 在这种方法中,将自上而下和自下而上的方法结合起来进行测试。在此过程中,顶层模块使用低级模块进行测试,低级模块同时使用高级模块进行测试。由于每个模块接口都经过测试,因此发生缺陷的可能性较小。
好处:
1、混合方法提供自上而下方法和自下而上方法的功能。
2、它是减少方法的最佳时间。
3、它提供所有模块的完整测试。
缺点:
1、当该方法同时在两个方向上进行时,该方法需要更高的浓度水平。
2、复杂的方法。
集成测试指南
首先,确定测试用例策略,通过该策略可以根据测试数据准备可执行的测试用例。
检查应用程序的结构和体系结构,并确定首先测试它们的关键模块。
设计测试用例以详细验证每个接口。
选择输入数据以执行测试用例。输入数据在测试中起着重要作用。
修复缺陷并重新测试。
三、软件回归测试
软件回归测试
回归测试是测试的过程,如果在任何函数中更改代码不会影响软件应用程序的现有功能。该过程确认旧功能仍然适用于新修改的功能。
回归测试仅测试修改的或缺陷的固定功能和部分选择的功能,这些功能可能会因修改而受到不利影响。对已经执行的修改函数执行相同的测试用例,这背后的原因是,当任何软件的新版本发布时,它在旧的测试用例下进行测试,以确保所有旧功能仍然以正确性和相同的方式工作。如果任何功能无法正常工作,则意味着更改或添加新代码会引入新错误。
回归测试背后的原因
回归测试的要求是:
1、由于需求的更改或增强,更改或修改了代码。
2、通过添加新功能来增强软件。
3、缺陷解决或修复。
4、修复缺陷后的性能检查。
如何进行回归测试?
回归测试在软件应用程序的维护阶段出现,包括错误更正,增强,删除和优化现有功能。这些变化和修改可能会引入新的错误,这些错误可能导致系统的错误工作。这就是回归测试至关重要的原因。
回归测试通过以下技术进行:
回归测试选择
在这种技术中,重新执行选定的测试用例套件,而不是重新执行所有测试用例套件。选定的测试用例套件分为可重复使用的测试案例套件和过时的测试案例套件。可重复使用的测试用例套件用于后续的回归周期,但在后续周期中不使用过时的测试用例套件。
测试用例的优先顺序
在此技术中,根据关键和常用以及业务影响功能,测试案例套件的优先级。这种技术有助于减少回归测试用例套件的数量。
重新测试全部
在这种回归测试技术中,所有测试用例套件都重新执行,因为它需要耗费大量资源并且成本高昂。
回归测试的测试工具
当软件不断改进时,需要进行回归测试。手动执行测试用例会增加时间和成本,因此自动测试是明智的选择。
以下是用于回归测试的工具:
QTP
QTP代表Quick Test Professional 。它是一种用于回归和功能测试的自动化测试工具。它使用VBScript进行自动化。
Selenium
此工具用于Web应用程序的自动测试。它用于基于浏览器的回归测试。
RFT
RFT代表Rational Functional Tester。它用于合理的功能测试。它使用java语言来处理软件系统的自动化测试用例。
回归测试指南
1、收集已修复或修改的软件应用程序的缺陷列表。
2、根据关键和常用以及业务影响功能选择优先级测试用例。
3、如果需要进行回归测试,请选择剩余的测试用例。
4、使用自动化工具执行回归测试。
5、如果发现任何缺陷,则将其发送给开发团队。
四、软件功能测试
软件功能测试
功能测试是软件测试的一个分支,旨在验证软件应用程序的功能,而不管功能是否根据需求规范运行。通过给出适当的输入值,确定输出并使用预期输出验证实际输出来测试每个功能。
功能测试包括通过GUI(图形用户界面),API(应用程序接口),安全性,数据库,客户端应用程序,服务器应用程序和应用程序功能进行测试。黑盒测试方法用于功能测试,其中测试内部逻辑的工作而不窥视内部代码。
功能测试的目标
功能测试的目标是检查主要入口功能,基本可用功能,屏幕GUI的简单流程以及错误消息的显示,无论用户是否可以轻松地在整个应用程序中导航。
功能测试的各个步骤:
1、测试人员确认需求规范。
2、测试人员制定了测试计划。
3、根据功能设计的测试用例在此步骤中完成。
4、制作可追溯性的文档。
5、执行设计的测试用例。
6、进行覆盖率分析以检查应用程序的覆盖测试区域。
7、完成缺陷管理以管理缺陷解决。
如何进行功能测试
1、了解功能所需的任务。
2、识别输入值。
3、计算已识别输入值的预期输出。
4、逐个执行所有测试用例。
5、将实际输出与预期输出进行比较。
功能测试水平
1、单元测试
2、集成测试
3、用户验收测试
4、烟雾/健全测试
功能测试的优点
1、确保了客户或最终用户的满意度。
2、确保所有功能都符合他们的要求。
3、确保了软件应用程序的预期工作性能。
4、降低了与软件相关的风险。
5、确保安全性。
6、由于功能测试,可以生产无缺陷的软件应用程序。
功能测试的缺点
1、功能测试主要通过需要人力资源的手动测试来完成。
2、功能测试很费时间。
3、功能测试是昂贵的。
4、功能测试需要大量的浓度,因此如果测试仪失去浓度,那么系统中可能存在严重的缺陷。
5、功能测试需要熟练和经验丰富的测试人员。
五、系统测试和验收测试的区别
系统测试和验收测试的区别
系统测试和验收测试的区别如下表所示:
编号 | 系统测试 | 验收测试 |
---|
1 | 执行系统测试以测试软件的端到端功能。 | 执行验收测试以测试软件是否符合规定的要求和用户要求。 |
2 | 只有开发人员和测试人员才能执行系统测试。 | 它可以由测试人员,利益相关者和客户执行。 |
3 | 它可以是非功能性和功能性测试。 | 它只能是功能测试。 |
4 | 在系统测试中,可测试整个系统的性能。 | 在验收测试中,测试系统是否符合要求。 |
5 | 系统测试使用由测试团队选择的演示输入值。 | 验收测试使用用户提供的实际实时输入值。 |
6 | 在此测试中,包括完整规范的测试,包括软件和硬件,内存和用户数量。 | 测试软件是否满足用户的所有需求。 |
7 | 系统测试是系统测试和集成测试的组合。 | 验收测试是alpha测试和beta测试的组合。 |
8 | 它在验收测试之前执行。 | 它在系统测试后执行。 |
9 | 系统测试涉及非功能测试下的负载和压力测试。 | 验收测试涉及功能测试下的边界值分析,等价分配和决策表。 |
10 | 系统测试中发现的缺陷认为是固定的。 | 验收测试中发现的缺陷视为产品故障。 |
六、软件Alpha测试
软件Alpha测试
Alpha测试是一种软件测试中所使用的释放软件真正的用户或公众之前找到的错误。它在实际场景中提供了性能验证。它是一种验收测试。
alpha测试的目标是通过识别和修复以前测试过程中无法发现的错误来纠正软件产品。它是在开发结束时和软件beta测试之前完成的。
软件工程师或质量保证人员执行alpha测试。通常,它有两个阶段,在第一阶段,开发人员使用调试器软件或硬件辅助调试器,这有助于非常快速地捕获错误。在alpha测试期间,存在大量错误,缺少功能和崩溃。
在第二阶段,质量保证人员通过涉及黑白盒和白盒测试技术进行alpha测试。这是一个额外的测试环境。
Alpha测试被设想为可用的在线应用程序,该应用程序不能完整使用,但可以打开以检查性能并获得公众的初步反馈。它可以称为软件应用程序的早期版本或即将发布的版本。
如何进行alpha测试
Alpha测试在单独的计算机系统上的实验室测试环境中完成。由项目经理和开发人员组成的小组定义了alpha测试的目标,并整合了不断发展的项目的结果。
测试组的一些基本步骤如下:
1、检查软件的功能要求和设计规范。
2、根据功能开发测试用例。
3、执行所有测试用例。
4、发现缺陷。
5、修复缺陷。
Alpha测试的优点
1、它减少了项目的交付时间。
2、它提供了更全面的测试计划和测试用例。
3、快速释放团队,以便他们可以在另一个项目上工作。
4、它可以更好地了解软件的可靠性和可靠性。
5、反馈很快,因此可以进一步提高软件的质量。
Alpha测试的缺点
1、它需要一位熟练掌握白盒和黑盒测试的测试人员。
2、它需要软件工具来快速调试。
3、测试在开发后立即完成,因此必须立即使测试仪可用。
七、软件Beta测试
软件Beta测试
Beta测试是验收测试的一部分,旨在通过最终用户验证产品的可用性,功能,可靠性和兼容性。当用户通过提供实际输入值来验证软件时,它会为软件增加价值。
它有助于提高软件质量并使其走向成功。此外,有助于确定该软件是否值得在未来版本中进行更多投资。
它不是受控活动,因为它发生在用户身边。在将软件交付给客户之前,它视为最终测试。发布用于beta测试的软件称为测试版软件。
如何执行Beta测试
软件的用户通过向所有可执行功能提供实时输入值来执行beta测试。只有用户才能在所需的质量方面对应用程序进行认证。用户视图被视为测试结果,这些也有助于提高性能和提高质量。
Beta测试生命周期
Beta测试生命周期从Plan开始,到用作beta测试软件的产品发布时结束。设计,构建,测试,审查也是beta测试生命周期的一部分。
计划 - 包括软件规划。
设计 - 包括软件设计。
构建 - 包括软件的开发。
测试 - 包括软件测试。
复审 - 包括软件的alpha测试。
发布 - 包括推出测试版软件。
通常,软件应用程序部署在在线门户网站上,因此许多用户可以使用它并传达他们对应用程序的反馈。
Beta测试的优点
1、Beta测试会检测到先前测试过程中可能会遗漏的应用程序流和崩溃等问题。
2、Beta测试使用客户验证方法,可降低产品故障风险。
3、客户反馈有助于提高产品质量。
4、它比其他类似的数据收集方法便宜。
5、Beta测试侧重于客户的满意度。
Beta测试的缺点
1、Beta测试不会像正在开发的软件那样深入测试软件的功能。
2、通常,用户不测试不太有用的功能; 它只关注最有用的功能。
3、测试一些没有正确使用软件的用户的反馈,浪费了测试人员的时间和金钱。
八、软件非功能测试
软件非功能测试
非功能测试是一种软件测试,用于测试非功能性参数,例如:软件的可靠性,负载测试,性能和责任。非功能测试的主要目的是根据非功能参数测试软件系统的读取速度。在功能测试之前,从未测试过非功能测试的参数。
非功能性测试作为功能测试也非常重要,因为它在客户满意度中起着至关重要的作用。
例如,非功能性测试将测试有多少人可以同时在任何软件上工作。
为什么进行非功能性测试
功能和非功能测试对于新开发的软件都是强制性的。功能测试检查内部功能的正确性,而非功能测试检查在外部环境中工作的能力。
它为软件安装,设置和执行设定了方法。用于内部研究和开发的测量和度量是在非功能测试下收集和生成的。
非功能测试提供了产品行为和使用技术的详细知识。它有助于降低生产风险和软件的相关成本。
在非功能测试下测试的参数
性能测试
性能测试消除了软件性能缓慢和有限的原因。软件的读取速度应尽可能快。对于性能测试,需要定义关于预期速度的结构良好且清晰的规范。否则,测试的结果(成功或失败)将不会很明显。
负载测试
负载测试涉及测试系统的负载能力。负载能力表示尽可能多的人可以同时在系统上工作。
安全测试
安全测试用于检测软件应用程序的安全漏洞。测试是通过调查系统架构和攻击者的心态来完成的。通过查找最有可能发生攻击的代码区域来进行测试用例。
可移植性测试
软件的可移植性测试用于验证系统是否可以在不同的操作系统上运行而不会发生任何错误。当存在相同的操作系统但硬件不同时,测试还要测试软件是否正常工作。
问责制测试
进行问责测试以检查系统是否正常运行。函数应该提供与其创建相同的结果。如果系统给出预期的输出,它将在测试中传递,否则失败。
可靠性测试
可靠性测试假定软件系统是否在特定条件下正常运行。系统必须运行特定时间和数量的进程。如果系统在这些指定条件下发生故障,则可靠性测试将失败。
效率测试
效率测试检查开发软件系统所需的资源数量,以及使用了多少这些资源。它还包括对这三点的测试。
必须由软件系统满足客户的要求。
软件系统应该达到客户的规格。
应该做出足够的努力来开发一个软件系统。
非功能测试的优点
1、它提供更高级别的安全性。安全性是一项基本功能,因为系统可以免受网络攻击。
2、它确保了系统的加载能力,以便任意数量的用户可以同时使用它。
3、它提高了系统的性能。
4、测试用例永远不会更改,因此不需要多次编写它们。
5、与其他测试过程相比,总体时间消耗较少。
非功能测试的缺点
1、每次更新软件时,都会再次执行非功能测试。
2、由于软件更新,人们必须付费才能重新检查软件; 因此软件变得非常昂贵。
九、软件测试文档
软件测试文档
测试文档是在测试软件应用程序期间或之前创建的工件的文档,文档反映了流程对客户,个人和组织的重要性。包含所有文档的项目具有较高的成熟度,详尽的文档可以节省组织的时间和财富。
为什么需要文档?
如果测试或开发团队获得的软件无法正常工作并由其他人开发,那么为了找到错误,团队将首先需要一份文档。如果文档可用,那么团队将通过检查文档快速找出错误原因。但是,如果文件不可用,那么测试人员需要再次进行黑盒子和白盒测试,这将浪费组织的时间和金钱。不仅如此,缺乏文档成为接受的问题。
示例
以微软的实时为例,微软推出具有适当用户指南和文档的每个产品,这些指南和文档非常具有说明性,逻辑一致且易于理解。这些都是他们成功产品背后的原因。
使用文档的好处
1、档阐明了方法和目标的质量。
2、客户使用软件应用程序时,它确保内部协调。
3、确保了任务和性能稳定性的清晰度。
4、提供有关预防任务的反馈。
5、为计划周期提供反馈。
6、为质量管理体系的绩效创造了客观证据。
十、软件测试计划
软件测试计划
测试计划是描述软件测试领域和活动的详细文档。它概述了测试策略,目标,测试计划,所需资源(人力资源,软件和硬件),测试评估和测试可交付成果。
测试计划是每个软件测试的基础。这是最重要的活动,可确保以适当的顺序提供所有计划活动清单。
测试计划是用于将软件测试活动作为定义的过程进行的模板,该过程由测试经理完全监视和控制。
测试计划的类型
测试计划有三种类型
1、主测试计划
2、阶段测试计划
3、测试特定类型的测试计划
主测试计划
主测试计划是一种具有多级测试的测试计划。它包括一个完整的测试策略。
阶段测试计划
阶段测试计划是一种测试计划,可以解决测试策略的任何一个阶段。例如,工具列表,测试用例列表等。
具体的测试计划
为主要类型的测试设计的具体测试计划,如安全测试,负载测试,性能测试等。换句话说,为非功能测试设计的具体测试计划。
如何编写测试计划
制定测试计划是测试管理过程中最关键的任务。根据IEEE 829,按照以下七个步骤准备测试计划。
1、首先,分析产品结构和架构。
2、现在设计测试策略。
3、定义所有测试目标。
4、定义测试区域。
5、定义所有可用资源。
6、以适当的方式安排所有活动。
7、确定所有测试交付物。
测试计划指南
1、折叠测试计划。
2、避免重叠和冗余。
3、如果认为自己不需要上面已经提到的部分,那么请删除该部分并继续。
4、明确点。例如,当将软件系统指定为测试环境的一部分时,提及软件版本而不是名称。
5、避免冗长的段落。
6、尽可能使用列表和表格。
7、需要时更新计划。
8、请勿使用过时且未使用的文档。
十一、软件测试用例
软件测试用例
测试用例是一组条件,测试人员根据这些条件确定软件应用程序是否按照客户的要求工作,测试用例设计包括前提条件,用例名称,输入条件和预期结果。测试用例是第一级操作,源自测试场景。
测试用例提供有关测试策略,测试过程,前提条件和预期输出的详细信息。这些在测试过程中执行,以检查软件应用程序是否正在执行它是否已开发的任务。
编写测试用例是一次性尝试,可以在回归测试时使用,测试用例通过将缺陷与测试用例ID相关联来帮助测试人员进行缺陷报告。详细的测试用例文档可以作为测试团队的完全证据保护,因为如果开发人员遗漏了某些内容,那么可以在执行这些完全证明的测试用例时捕获它。通常,没有正式的模板用于编写测试用例,但每个测试用例中都包含以下组件:
1、测试用例ID
2、前提条件
3、目的
4、步骤
5、实际结果
6、预期结果
7、假设
8、产品模块
9、产品版本
10、修订记录
11、后置条件
测试套件
许多测试用例可以从一个测试场景中派生出来,有时候会为单个软件功能编写多个测试用例,这些多个测试用例称为测试套件。
示例
包含测试用例的表格如下:
在此表中,已创建用于登录系统的测试用例。所有:True,False和Result对都被视为测试用例。测试人员为每个特定功能开发这些类型的测试用例,以便测试其功能。
十二、软件测试可追踪性矩阵
软件测试可追踪性矩阵
可追踪性矩阵是一种表格类型的文档,用于开发软件应用程序以跟踪需求。它可用于向前(从需求到设计或编码)和向后(从编码到需求)跟踪。它也称为需求可追踪性矩阵(RTM)。
通常,这就像一个包含表格的工作表文档,但是还有许多用户定义的可追溯性矩阵模板。可追溯性矩阵中的每个要求都与其各自的测试用例相关联,以便可以根据具体要求顺序执行测试。
下面给出一个表作为示例,以便可以理解可追溯性矩阵的格式:
业务需求 | 技术要求 | 测试用例ID |
---|
B1 | T12 | 1 |
B2 | T13 | 2 |
B3 | T14 | 3 |
B4 | T15 | 4 |
我们可以在表中看到有三列和四行用于表示业务需求,技术要求和测试用例ID。
假设任何用户需要注册,而B1是此要求的标识,因此测试人员需要选择B1并且他可以使用T12的代码来开发注册功能。可以使用测试用例ID为1来测试此功能。
可追溯性矩阵的目标
1、它有助于跟踪在SDLC的各个阶段开发的文档。
2、它确保软件完全满足客户的要求。
3、它有助于检测任何错误的根本原因。