完美的软件是不存在的,每个程序都有潜在的故障点。软件测试是软件开发生命周期的一个阶段,在此期间团队会发现程序或系统中不需要的错误。不同的测试方法有助于查明几种类型的软件错误。了解每个软件测试模型的工作原理对于构建、部署和维护高质量的测试策略和软件至关重要。
为什么测试在SDLC中很重要?
测试阶段是软件开发生命周期中的关键阶段。它发生在软件实施之后,测试旨在发现和修复软件错误。软件测试至关重要,因为产品在测试后会投入生产。每个软件开发团队都必须交付高质量的软件,原因有二:
软件测试团队与开发人员分开对不同的问题进行各种检查。这种方法有助于让团队专注于发现问题并允许实施持续开发。
软件测试是由测试团队执行的正式过程,用于帮助确认程序在逻辑上正确且有价值。测试需要使用特定的测试程序并创建测试用例。
软件测试使用多种方法和模型来回答这两个问题。
在黑盒测试方法中,程序是一个封闭的(黑)盒,细节未知。测试人员唯一可见的组件是程序输入和输出。测试人员可以通过观察各种输入的结果输出来确定程序是否正常运行。黑盒测试不考虑程序的规范或代码,只考虑不同测试用例的预期行为。黑盒测试人员不必非常熟练,因为他们不与任何代码交互。黑盒测试既有优点也有缺点。黑盒测试的关键优势是不需要使用代码和编程逻辑。?测试所有输入组合是不可能的。三种类型的测试基于黑盒测试方法:功能测试、非功能测试和回归测试。
功能测试检查软件是否执行特定功能,而不考虑系统中的哪个组件负责操作。测试团队检查功能的好坏输入。一个示例函数是用户登录页面行为。功能测试检查用户是否可以使用正确的凭据登录或不能使用不正确的凭据登录。
随着软件复杂性的增加,软件中的功能数量也在增加。测试功能的顺序对于有效的功能测试策略至关重要。由于功能通常是嵌套的,因此软件的行为取决于人们在使用软件时所采取的步骤顺序。
功能测试的主要好处是测试团队可以在所有软件组件完成之前检查各个功能。在功能测试中检测到错误的可能性非常高,因为它从用户的角度显示了使用软件时的问题。
非功能测试方法除了功能和特性之外,还验证软件方面。这种测试方法侧重于程序如何在特定条件下执行某些操作。非功能测试有助于从用户的角度发现程序是否可用。该方法检查可用性问题,例如跨不同设备、浏览器或操作系统的交叉兼容性。
回归测试是一种软件测试方法,可确保所有新代码更改不会导致先前测试的组件出现问题并对系统稳定性产生负面影响。测试方法重复先前迭代的测试,确保最新的更改不会对现有代码造成不良影响。
在任何导致原始代码更改的程序操作之后,回归测试都是必要的,例如:
如果软件经常更改,最好的方法是使用自动化测试工具并为多次迭代和回归测试周期创建可重用测试。
白盒测试方法与黑盒测试相反。在这种方法中,程序是一个打开的(白色)盒子,测试人员知道其内部工作原理。
白盒测试分析源代码并需要以下技能:
测试人员根据程序的结构制定计划。例如,白盒测试可以包括创建脚本测试,这些测试遍历整个代码并运行每个功能。具体测试可以检查是否存在死循环或者代码不运行的情况。白盒测试的主要缺点是测试迭代次数,随着应用程序变得更复杂,迭代次数会增加。该方法需要创建一种策略,其中递归或循环对精心选择的代表性值执行次数更少。三种类型的测试基于白盒测试方法:语句测试、路径测试和分支测试。
语句测试是白盒测试中的一种测试技术。该方法至少评估一次代码中的所有可执行语句。例如,如果代码块包含多个条件语句,则语句测试技术涉及遍历所有输入迭代以确保代码的所有部分都执行。
语句测试技术发现未使用的代码部分、缺少引用的语句以及以前修订的剩余代码。因此,语句测试有助于清理现有代码并减少冗余代码或添加缺失的组件。
路径测试在整个代码中创建独立的线性路径。测试团队创建代码的控制流程图,这有助于设计单元测试以评估所有代码路径。分析不同的路径有助于发现应用程序的低效、中断或冗余流。
分支测试映射代码中的条件语句并标识单元测试的分支。分支类型有:
例如,以下代码包含多个嵌套语句:
测试人员识别所有条件分支。在示例代码中,条件分支是W,?X,和Z因为语句只在特定条件下运行。另一方面,Y是一个无条件分支,因为它总是在X语句之后执行。分支测试旨在执行尽可能多的分支并测试所有分支条件。
功能测试是黑盒测试的一种子类型,它考虑给定功能或程序的软件规范。该测试方法在不考虑内部软件结构的情况下提供各种输入并分析输出。功能测试包括4个不同的步骤,这些步骤从代码的更多次要部分开始,然后扩展到评估整个系统。该模型旨在分析组件或程序的合规性,并检查系统是否按照规范执行它应该执行的操作。
单元测试是一种软件测试方法,可验证源代码的各个部分。单元测试有助于确定特定模块(单元)的功能,并且该过程隔离各个部分以确定它们是否正常运行。
单元是一个单独的函数、过程或面向对象的编程类。通常,单元测试有助于验证前端接口。
单元测试的主要好处是在开发生命周期中尽早发现问题。在测试驱动的开发中,例如Scrum或极限编程,测试人员在任何代码存在之前创建单元测试。
应用单元测试的主要缺点是需要评估程序中的复杂执行路径。单元测试是本地化的并且不兼容,无法发现集成或系统范围的错误。
集成测试是单元测试之后的一个阶段。该方法将先前评估的单个程序单元(模块)组合成更大的组,并对聚合体进行测试。
有几种不同的集成测试方法:
集成测试验证前端接口和应用程序后端之间的连接。
系统测试对完全集成的系统进行测试。该步骤分析行为并将它们与预期要求(质量保证)进行比较,从而验证完全集成的软件。
系统测试旨在发现集成和单元测试遗漏的问题,并全面概述软件是否已准备好发布。系统测试中的不同测试方法考虑了软件在各种环境中的工作情况以及软件的可用性。
系统测试的主要挑战是设计一种适合可用时间和资源限制的策略,同时在集成后提供对整个系统的全面分析。
功能测试的最后一部分是验收测试。该测试方法旨在评估应用程序最终用户的认可度。该方法让最终用户参与测试过程,并收集用户对任何潜在可用性问题或任何先前测试阶段遗漏错误的反馈。
验收测试属于以下两个类别之一:
验收测试后,如果结果满足验收标准,则软件可以投入生产。否则,如果测试未通过阈值,软件将被推回到之前的开发和测试阶段。
非功能测试从用户的角度对软件进行评估,着重于用户体验。测试方法旨在发现与软件功能无关但对用户体验至关重要的任何问题。
非功能测试的重点是产品如何运行,而不是它在特定用例中的行为方式。这种测试模型是通过性能测试、安全测试、可用性测试和兼容性测试来进行的。
性能测试检查软件的速度、可扩展性和稳定性。存在几种不同的性能测试子类型,例如:
所有性能测试都旨在发现并修复会降低用户体验的低延迟和性能问题。
安全测试检查软件中的任何安全问题,是最关键的软件测试方法之一。该方法检查系统内的任何漏洞和网络攻击的可能性。渗透测试和漏洞扫描等方法有助于发现和降低软件内部的安全风险,还有许多渗透测试工具可以使测试过程自动化。
可用性测试评估软件对用户的用户友好性和便利性。这些测试突出了未受指导的用户在程序或应用程序中做某事的速度有多快。可用性测试结果表明新用户可以多快学会使用该软件,以及是否有必要对界面进行改进。
兼容性测试显示系统在各种环境中以及与其他软件的行为。该方法侧重于与现有解决方案和技术的集成。
软件开发生命周期中的测试阶段并不是唯一可以识别和修复错误的地方。所有开发阶段都受益于包括软件测试。持续的软件开发也需要持续的软件测试。软件开发应与测试团队合作,尽早发现潜在问题或确定无法进行测试的地方。越早发现越好,随着步骤的推进,发现和修复错误的成本会增加。据IBM系统科学研究所称,在维护阶段发现和修复缺陷的相对成本要高出大约六倍。

瀑布模型是一种软件开发方法,分为顺序步骤或阶段。团队只有在完成前一阶段后才能进入下一阶段。测试团队在瀑布模型的需求阶段开始创建测试计划和策略。一旦软件进入实施阶段,测试人员将验证软件是否正常工作并符合规范。瀑布法在软件测试中的主要好处是需求定义明确并且在测试阶段很容易应用。该模型不适合条件经常变化和意外事件发生的项目。
V模型是瀑布模型的扩展和改进。该模型分为顺序步骤,每个开发阶段都有额外的测试步骤。V模型通过功能测试的所有阶段来验证和验证软件。
V模型的形状显示了与开发生命周期阶段对应的测试阶段。当从左到右查看时,模型展示了随着时间推移的步骤顺序,而从上到下查看则揭示了抽象级别。
敏捷方法是一种快速迭代的软件开发方法,它遵循敏捷宣言中定义的原则。它将软件开发分解为小的增量和多次迭代。敏捷模型允许与最终用户持续交互,并且需求不断变化。敏捷模型中的测试发生在每次迭代中。此环境中的软件测试需要通过自动化测试工具和测试框架对CI/CD管道进行持续测试。
Scrum模型是一种使用敏捷模型原则的项目管理方法。该模型以目标为导向,并在称为冲刺的迭代中受时间限制。每个冲刺都包含会议、里程碑和由scrum主管管理的事件。
Scrum模型没有测试团队,开发人员负责构建和实施单元测试。在每个冲刺中,最终用户也经常测试该软件。一些Scrum团队有功能测试员,在这种情况下,测试员必须在Scrum会议期间为每个测试会话提供时间估计。
DevOps模型将持续测试结合到每个开发阶段,同时在团队中也有专门的测试角色。DevOps管道中的测试目标侧重于软件质量和风险评估。自动化测试和测试驱动开发提高了代码可靠性,这有助于最大限度地降低新构建破坏现有代码的可能性。
迭代开发根据功能将软件开发步骤划分为子系统。该方法是增量的,每个增量都交付一个完整的系统。每一次新的迭代都会改进每个子系统中的现有流程。早期版本提供软件的原始版本,而随后的每个版本都会改进现有功能的质量。测试在早期阶段更简单,并且随着迭代的进行而增加复杂性。
螺旋模型是一种专注于风险评估的敏捷模型。该模型结合了自上而下和自下而上开发方法的优点。该方法使用瀑布模型阶段作为越来越复杂的原型。
由于风险分析是每一步的重点,因此螺旋模型可以及早发现故障和漏洞。该模型对问题进行早期评估,从长远来看,这可以降低安全测试的成本。
RAD(快速应用程序开发)模型是一种将原型制作与迭代开发相结合的敏捷方法。该方法侧重于收集用户需求,而其余的开发过程没有具体的计划或步骤。RAD是一种快节奏的技术,专注于创建可重用的组件,作为后续项目或原型的模板。测试团队在每次迭代中评估所有原型,并立即将组件集成到最终产品中。
极限编程(XP)是一种敏捷的软件开发方法,最适合中小型团队(6-20名成员)。该技术专注于为用户提供直接结果的测试驱动开发和短迭代。
XP没有供开发团队遵循的严格方法。相反,该方法提供了一个灵活的框架,其中的过程或步骤顺序会根据活动而变化。敏捷宣言原则和?结对编程等技术是XP中的重要组成部分。
高质量的软件测试是区分高质量软件和乏善可陈的项目的关键。软件测试的重要性对开发至关重要,这就是为什么有这么多的测试方法和途径。开发团队应该遵循软件测试的趋势,并准备好从根本上改变他们的方法,以便从新的软件测试方法和模型中获利。
本文来源:国外服务器--软件测试方法和模型(软件测试有哪几种常用模型)
本文地址:https://www.idcbaba.com/guowai/5463.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



