软件工程中的验证和确认2025年5月19日 | 阅读 14 分钟 引言在软件工程传统中,验证与确认(V&V)发挥着重要作用,旨在提供高质量、可靠的软件产品。这些术语相似但不等同,它们是软件开发过程中具有不同目标的两个活动。 验证可以定义为确认在开发某些阶段所产生的工作满足规定的需求和设计特性。它回答了“是否正确构建”的问题。验证包括评审(如检查)以及静态分析,这些都有助于在开发的早期阶段指出缺陷。在这方面,验证使得给定的软件符合预期的需求,从而最大限度地减少了在开发后期修复问题所花费的成本和时间。 验证是检查最终交付成果的过程,并将其与最终用户所需规格进行比较。从而回答了“我们是否正在构建正确的产品?”的问题。简单的确认活动包括动态测试,在这种测试中,软件在受控环境中运行,以检查其功能、性能和可用性等特性。通过这种方式,可以保证最终的软件不仅满足功能的技术标准,而且还响应用户需求,并让用户满意。 验证和确认可以被描述为两个协同工作的过程,共同构成了软件工程领域系统化的过程。它们使组织能够开发满足功能和非功能性需求的软件,从而提高客户对所开发软件的满意度和信心。 验证过程(https://www.sciencedirect.com/topics/computer-science/software-verification) (https://visuresolutions.com/blog/requirements-verification/) (https://scalingsoftwareagility.wordpress.com/2010/11/28/software-verification-and-validation-in-high-assurance-agile-development/)  定义和目标- 软件开发中的验证是通过软件是否符合既定需求和其他设计文件来评估的步骤。验证的首要目的是确认正在开发的软件是否按照正确的标准开发。
- 这是质量维护的一种方式,因为它指出了成品与设想设计的偏差,简化了问题的纠正方案。因此,由于验证通过合规性和正确性标准指导开发过程,它是提供高质量软件产品的关键手段之一。
验证活动类型- 验证可以是审查、检查或静态分析活动,以确保系统满足需求。审查是评估文档、代码实现和设计的过程,以检查缺陷和是否符合设定的要求。检查是经过规划、受控的检查,由一组人员进行,目的是评估已开发软件工件的质量。
- 静态代码分析是在不实际运行程序的情况下分析源代码的过程,通过提供各种工具来检测代码中的多个缺陷。所有这些活动都在逐步构成一个完整的验证策略,从而涵盖软件程序的各个方面。
审查和检查- 审查和检查是在同一过程中验证信息的关键工具。在审查期间,团队成员审查共享的文档和代码,并与同行讨论他们发现或未发现的问题。另一方面,检查更为正式,并附带一套指南和清单,因为它们遵循特定的协议。
- 这两种方法旨在尽早发现开发生命周期中的缺陷,从而降低纠正成本。团队的审查和检查增强了团队成员之间的沟通,从而提高了软件的质量。
静态分析- 静态分析可以定义为一种在不执行程序代码的情况下分析和验证源代码的方法。它是一个通过工具自动扫描代码以查找错误、漏洞和是否符合编码标准的过程。这允许在代码投入使用之前检查内存泄漏、空指针解引用和安全漏洞等问题,从而使解决这些问题变得更具成本效益。
- 将静态分析集成到验证过程中,可以再次提高代码质量,并消除交付产品中的任何潜在缺陷。这种方法对于推进高质量软件非常重要,因为它可以在问题出现时对其进行检查。
可追溯性- 可追溯性概念是验证步骤中的一个基本要素,它保证了每个需求都与相关的验证步骤正确链接。这种链接还有助于团队在开发阶段的进展中了解需求的状y况,从而有助于确保所有需求都得到满足和确认。
- 因此,当组织实施和实践可追溯性时,很容易展示对标准和法规的合规性。此外,可追溯性的使用增加了与其他团队成员的协调,因为一个人可以轻松解释如何满足某个需求。
验证工具- 有一系列工具可以协助验证过程,提高效率和准确性。这些工具包括静态分析工具、代码审查工具和需求管理系统。这些工具可以帮助团队更快、更有效地找到缺陷,因为验证的某些方面是自动化的。
- 此外,它们还提供有关代码质量和合规性的重要信息,以便团队可以做出决策。验证工具的使用有助于简化流程,使组织能够交付更好的软件产品。
持续验证- 相辅相成的是,持续验证是当前的趋势,它将验证过程融入采购生命周期流中。可以将验证引入CI/CD 过程,从而在开发周期的每个步骤进行验证。这使得能够立即、及时地提供反馈,从而定位团队需要解决的问题。
- 持续验证还有助于提高已开发软件的整体质量,从而缩短最终测试时间,因此,持续验证已成为现代软件系统开发中的一项重要实践。
文档的重要性- 任何验证都应包含文档,提供有关验证过程、得出的结论和做出的决定的信息。验证过程的文档记录也有助于系统地维护组织在工作过程中的完整性,以便轻松审查团队或小组的工作以及需要改进的领域。
- 文档在未来的工作中起着重要作用,团队合作可能很有用,因为它提供了评估之前所做工作并改进所用验证技术风格的机会。在文档方面,已经看到组织可以优化验证和交付给他们的软件质量。
确认过程(https://www.sciencedirect.com/topics/computer-science/software-verification) (https://www.cs.wm.edu/~kemper/cs435/slides/l13.pdf) (https://www.parasoft.com/blog/verification-vs-validation-in-embedded-software/)  定义和目标- 它也称为验证,是通过它来确定软件是否适合用户使用的过程。确认是V模型阶段的最后一个阶段,它是一个检查正在开发的软件是否将有效地执行其计划要做的事情的指南。这包括识别软件如何工作以及它在必需的应用领域的效率和有效性。
- 因此,通过观察用户,确认能够确定软件所期望满足的用户需求是否被正在开发的软件有效地满足,从而满足消费者的期望。
确认活动类型- 确认包括各种活动,例如用户验收测试(UAT)、系统测试和 Beta 测试。这是一个真实用户在某些条件下使用软件进行测试的过程,以确保软件能够满足用户的需求。
- 系统级测试用于测试完整且集成的软件,以确认软件产品的 [functionality](https://www.techopedia.com/definition/5990/functionality)。在测试过程中,人们有机会在现实生活中使用该软件并报告他们的体验。所有这些活动对于确保已开发的软件符合用户需求和期望至关重要。
用户验收测试 (UAT)- 在系统集成测试之后进行的测试是用户验收测试,简称 UAT。它包括由最终用户使用该软件,以检查它是否能够满足或有能力满足用户的期望。UAT 通常在开发的最后阶段进行,并提供可能在系统中使用的真实用户案例。
- 此测试有助于了解是否存在某些问题或程序中的某些方面不起作用,并且应该修复。这样,用户在确认过程中参与以提高最终产品在市场上的可用性,从而带来成就感。
实际场景测试的重要性- 实际经验在确认过程中很重要,因为软件的测试基于其在现场的使用方式。它用于发现软件在受控环境中无法观察到的问题,例如运行缓慢或难以使用。在真实场景中进行测试非常有效,因为它有助于组织从用户那里获得反馈,从而确保软件足够且可靠。
反馈机制- 在确认过程中,我们不能过分强调反馈机制的使用,以从用户那里获取反馈。大多数用户填写并完成的问卷、一对一或小组访谈以及焦点小组讨论也可以用来收集用户对软件使用的反馈。这些反馈可用于评估功能并在未来的开发周期中通知开发团队进行改进。
- 同样,还可以注意到存在一些分析,它们侧重于用户的交互以及他们在参与组织中的任何活动时的行为;分析的这一部分是对组织收到的定性反馈的良好补充。
持续确认- 持续确认仍然是一个新概念,它将确认活动整合到软件开发周期中。它也意味着确认被纳入 CI/CD 的软件交付过程,以便在开发周期的每个阶段执行确认。
- 这种方法允许快速反馈以及快速识别问题,以便尽早解决。重复性确认提高了软件的总体质量,缩短了最终测试阶段花费的时间,并且在当代软件开发中值得应用。
文档和可追溯性- 文档可以定义为确认过程中的一个基本要素,它指出了确认活动、确认结果和确认决策等各个方面的记录。此外,确认过程的文档记录是标准化的,并为团队提供了一种简便的方法来监控确认过程和需要关注的领域。
- 此外,需求与确认之间的可追溯性还有助于组织提供足够的证据,证明他们已实施了某些行业标准或法规的要求。以下文档可作为组织未来工作的参考,因为它展示了团队如何根据他们的经验提出确认技术。
验证和确认中的挑战(https://fastercapital.com/topics/system-validation%3Achallenges-of-system-validation.html) (https://hogonext.com/how-to-apply-verification-and-validation-to-emerging-technologies-challenges-and-opportunities/)  需求不完整- V&V 的一个关键问题源于需求规范不足或不清晰。当需求没有得到很好的定义时,很难确定所开发的软件是否满足特定的需求集。缺乏适当的需求规范剥夺了利益相关者本可以帮助开发满足用户需求的产品所需的信息。为了应对上述问题,组织别无选择,只能在进入开发阶段之前投入足够的时间来吸引、识别和批准需求。
资源限制- 验证和确认过程涉及时间和精力,这对大多数公司来说可能是一个缺点。这反过来又源于多种因素,例如资源和时间不足,导致 V&V 活动仓促进行,从而遗漏了一些缺陷。这不是最好的过程,因为它可能导致最终产品质量低下,并且在后期可能需要更多的时间和资源来纠正。为了缓解这一挑战,应提供足够的资源,并将 V&V 活动整合到项目规划中。
软件系统的复杂性- 随着软件系统变得越来越复杂,V&V 成为一个更难处理的问题。这些潜在的分布式结构、众多的交互式子系统和系统依赖可能会阻碍确定系统是否满足需求。此外,很难测试组件之间可能发生的交互,这些交互可能导致系统中的新问题。为了克服这一挑战,此时组织应该考虑模块化设计实践并纳入自动化测试工具。
不断发展的技术- 随着最新技术的飞速发展,这是任何 V&V 过程的主要挑战。新兴的编程语言、框架和其他工具也可能出现在软件开发过程中,从而对 V&V 团队构成挑战。这会降低知识和技能,从而影响所进行的验证和确认的质量。还应注意到,为了应对特定的挑战,V&V 团队应接受培训并持续接受进一步教育,以便能够妥善处理新技术。
缺乏标准化- 缺乏具体的 V&V 流程会导致在不同项目中可能以不同的方式执行验证和确认。缺乏标准程序可能导致团队内形成子组,其中一个或多个团队可能使用不同的方法,从而难以进行基准测试和质量检查。这种合理化也导致缺乏标准实践,这可能会阻碍利益相关者之间的沟通实践。本质上,为了解决这个问题,需要制定所有组织都可以遵循的标准 V&V 程序。
用户参与- 确认确实涉及用户的积极参与,但这并不容易获得。测试或关注多个用户组可能很困难,因为一些用户可能无法参加测试或倾向于提供较少的反馈。这种缺乏参与可能导致开发出不适合满足用户需求和期望的产品。为了解决这一挑战,应采取以下措施,让用户积极参与开发过程,或者至少在测试中获得他们的意见和反馈。这种方法可以对改进确认过程产生积极影响。
实际案例研究和示例(https://ntrs.nasa.gov/citations/20040010327?) (https://florence20.typepad.com/files/boeing-787-case-study.pdf?) (https://developer.chrome.com/blog/chrome-for-testing?) NASA 的火星探测器项目- 对于火星探测器项目这类涉及深空探索、任何错误都无法纠正的风险来说,这一点尤其如此。在火星探测器被送往火星之前,进行了其他严格的 V&V 操作,以确保探测器在行星环境下的正常运行。它还包括对控制探测器移动和操作其仪器的软件算法进行广泛的检查和测试。
- 这些条件的创建使工程师能够在发射前测试探测器的功能。最近成功的火星探测器,或火星探索探测器,最近为科学家提供了关于火星的宝贵信息,这证明了全面的 V 和 V 程序有助于实现任务目标。
波音 787 梦想客机- 本文探讨了影响波音 787 梦想客机项目的软件问题,包括软件验证和确认领域的问题。尽管如此,由于波音飞机中使用了复杂的系统,波音公司采用了严格的 V&V 策略来实现其增强的安全目标,并避免违反航空规则和法规。
- 这包括对飞行控制软件进行重复测试,这对于飞机的运行尤其重要。为了确保用户满意度,该公司使用模拟和真实环境来测试软件的可靠性。尽管开发过程受到某些挫折的困扰,但 V&V 过程增强了飞机的认证及其后续部署。
微软 Windows 操作系统- 微软公司在 Windows 操作系统的开发中使用了各种方法,特别是在验证和确认方面。两个版本都经过多个测试阶段,例如 Alpha 和 Beta 测试,以帮助处理随之而来的各种问题。
- 该公司使用自动化测试工具来检查结果,包括对系统在不同机器上的服务、性能、安全性、兼容性等的测试。Beta 测试形式的反馈在确认中也很重要,可以告知微软根据实际使用需要进行更改的领域。这种系统的 V&V 方法也使微软能够展示一个更可靠、更安全的操作系统。
Google Chrome 浏览器- 验证和确认是 Google Chrome 进行的重要且可考虑的过程,旨在增强浏览器的性能和安全性以及用户满意度。开发团队还利用各种测试框架来确保新功能和更新以及它们的更改不会容易出现错误和漏洞。
- 此外,Chrome 中包含的 V&V 周期使得真实用户有可能报告测试人员未识别出的任何潜在问题。这种迭代 V&V 方法使 Google 能够为用户提供强大、安全且轻量级的浏览器,以满足其客户的需求。多年来,Google Chrome 一直是最常用的网络浏览器之一,这表明其 V&V 流程的效率。
IBM Watson- IBM Watson 是一个验证为什么验证和确认对于设计和实现 AI 系统至关重要的例子。作为一项预防措施,在部署 Watson 之前对其算法进行 V&V,以确保其性能最佳且没有错误。这些包括评估其与自然语言交互和“学习”的能力以及分析数据的能力。
- IBM 使用模拟测试方法,并呈现实际情况,以在健康或金融等领域使用真实的 Watson 应用程序。IBM 向如此高水平的 V&V 开放其系统这一事实表明 Watson 达到了适合决策支持系统的质量水平。
Tesla Autopilot- Autopilot 可以被视为 Tesla 对自动驾驶技术验证和确认重要性的证明。据强调,特斯拉在其自动驾驶算法的 V&V 方面采用了详细的方法。这主要是通过将软件暴露于各种驾驶场景,即模拟测试,来测试软件独立做出决策的能力。
- 来自特斯拉公路车辆的数据被纳入系统的改进中。严格的 V&V 过程对于确保 Autopilot 的安全性和有效性至关重要,从而极大地提升了特斯拉作为一家拥有卓越自动驾驶功能的公司。
结论总而言之,需要注意的是,软件验证和确认是软件工程过程中的两个关键阶段,旨在确保最终产品符合要求的标准并满足预期的客户需求。基本上,通过测试和评估,通常会在开发阶段发现许多问题,以帮助组织改进相关软件的质量。本文分析了不同领域的 V&V 执行方式,并举例说明了成功场景。这意味着随着技术的发展,V&V 的重要性日益增加,因为它使得开发高质量软件并确保客户的信任成为可能。
|