目录
八、软件测试
软件测试是确保软件的质量,确认软件以正确的方式做了用户所期望的事情。软件测试通常在规定的时间和成本内完成,以尽量多地发现漏洞,但不能保证发现所有的漏洞。
测试原则:
●应尽早并不断的进行测试;
●测试工作应该避免由原开发软件的人或小组承担;
●在设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期的输出结果;
●既包含有效、合理的测试用例,也包含不合理、失效的用例;
●检验程序是否做了该做的事,且是否做了不该做的事;
●严格按照测试计划进行;
●妥善保存测试计划和测试用例;
●测试用例可以重复使用或追加测试。
8.1 测试分类
(1)根据程序执行状态可分为静态测试(Static Testing,ST)和动态测试(Dynamic Testing,DT)。
(2)根据是否关注具体实现和内部结构可分为黑盒测试、白盒测试和灰盒测试。
(3)根据程序执行的方式来分类可分为人工测试(Manual Testing,MT)和自动化测试
(Automatic Testing,AT)。
(4)从阶段上划分,软件测试可以分为单元测试、集成测试、系统测试、性能测试(通过自动化测试工具模拟,包括负载和压力测试)、验收测试、其他测试(补充内容)。
8.2 静态方法
8.2.1 静态测试
静态测试指被测试程序不在机器上运行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测,包括对文档的静态测试和对代码的静态测试。对文档的静态测试主要以检查单的形式进行,而对代码的静态测试,包括桌前检查、代码审查、代码走查的方式。使用这种方法能够有效地发现30%-70%的逻辑设计和编码错误。
8.2.2 动态测试
动态测试指在计算机上实际运行程序进行软件测试,一般采用白盒测试、黑盒测试和灰盒测试方法。
黑盒测试:功能性测试,不了解软件代码结构,根据功能设计用例,测试软件功能。
白盒测试:结构性测试,明确代码流程,根据代码逻辑设计用例,进行用例覆盖。
灰盒测试:灰盒测试介于黑盒与白盒测试之间。灰盒测试除了重视输出相对于输入的
正确性,也看重其内部的程序逻辑。
8.2.3 自动化测试
自动化测试就是软件测试的自动化,即在预先设定的条件下自动运行被
测程序,并分析运行结果。总的来说,这种测试方法就是将以人驱动的测试行为转化为机器执
行的一种过程。
8.3 测试阶段
从阶段上划分,软件测试可以分为单元测试、集成测试、确认测试、性能测试(通过自动化测试工具模拟,包括负载和压力测试)、系统测试、验收测试、其他测试(补充内容)。
8.3.1 单元测试
单元测试也称为模块测试,测试的对象是可独立编译或汇编的程序模块、软件构件或OO(面向对象)软件中的类(统称为模块),测试依据是软件详细设计说明书。
8.3.2 集成测试
集成测试目的是检查模块之间,以及模块和已集成的软件之间的接口关系,并验证已集成的软件是否符合设计要求。测试依据是软件概要设计文档。
8.3.3 确认测试
确认测试主要用于验证软件的功能、性能和其他特性是否与用户需求一致。根据用户的参与程度,通常包括以下类型:
内部确认测试:主要由软件开发组织内部按照SRS(Software Requirements Specification,软件需求规格说明书)进行测试
Alpha测试:用户在开发环境下进行测试。
Beta测试:用户在实际使用环境下进行测试,通过改测试后,产品才能交付用户。
8.3.4 系统测试
系统测试测试对象是完整的、集成的计算机系统;测试的目的是在真实系统工作环境下,验证完成的软件配置项能否和系统正确连接,并满足系统/设计文档和软件开发合同规定的要求。测试依据是用户需求或开发合同。
主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试安装与反安装测试等,其中,最重要的工作是进行功能测试与性能测试。
功能测试主要采用黑盒测试方法;
性能测试主要指标有响应时间、吞吐量、并发用户数和资源利用率等。
8.3.5 性能测试
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项
性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,
确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化
情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大
服务级别的测试。
8.3.6 验收测试
验收测试主要是针对SRS,在交付前以用户为主进行的测试。其测试对象为完整的、集成的计算机系统。验收测试的目的是,在真实的用户工作环境下,检验软件系统是否满足开发技术合同或SRS。验收测试的结论是用户确定是否接收该软件的主要依据。除应满足一般测试的准入条件外,在进行验收测试之前,应确认被测软件系统已通过系统测试。
8.3.7 其他测试
配置项测试测试对象是软件配置项,测试目的是检验软件配置项与SRS的一致性。测试的依据是SRS。在此之间,应确认被测软件配置项已通过单元测试和集成测试。
回归测试测试目的是测试软件变更之后,变更部分的正确性和对变更需求的符合性,以及软件原有的、正确的功能、性能和其他规定的要求的不损害性。
AB测试是为Web 或 App 界面或流程制作两个 (A/B)或多个 (A/B/n) 版本,在同一时间维度,分别让组成成分相同(相似)的访客群组(目标人群)随机的访问这些版本,收集各群组的用户体验数据和业务数据,最后分析、评估出最好版本,正式采用。
Web测试是软件测试的一部分,是针对Web 应用的一类测试。由于 Web 应用与用户直接相关,又通常需要承受长时间的大量操作,因此Web 项目的功能和性能都必须经过可靠的验证。通过测试可以尽可能地多发现浏览器端和服务器端程序中的错误并及时加以修正,以保证应用的质量。由于Web 具有分布、异构、并发和平台无关的特性,因而它的测试要比普通程序复杂得多,包含的测试种类也非常多。
链接测试。链接是Web 应用系统的一个主要特征,它是在页面之间切换和指导用户去一些未知地址页面的主要手段。链接测试可分为3个方面。
首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;
其次,测试所链接的页面是否存在;
最后,保证 Web 应用系统上没有孤立的页面。
表单测试。当用户通过表单提交信息的时候,都希望表单能正常工作。如果使用表单来进行在线注册,要确保提交按钮能正常工作,当注册完成后应返回注册成功的消息。如果使用表单收集配送信息,应确保程序能够正确处理这些数据,最后能让用户收到信息。要测试这些程序,需要验证服务器是否能正确保存这些数据,而且后台运行的程序能否正确解释和使用这些信息。当用户使用表单进行用户注册、登录、信息提交等操作时,必须测试提交操作的完整性,从而校验提交给服务器的信息的正确性。如果使用默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。
8.4 测试用例设计
8.4.1 黑盒测试用例
将程序看做一个黑盒子,只知道输入输出,不知道内部代码由此设计出测试用例,分为下面几类:
等价类划分:把所有的数据按照某种特性进行归类,而后在每类的数据里选取一个即可。等价类测试用例的设计原则:
设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
边界值划分:将每类的边界值作为测试用例,边界值一般为范围的两端值以及在此范围之外的与此范围间隔最小的两个值,如年龄范围为18-100,边界值为18、100、17、101四个。
错误推测:没有固定的方法,凭经验而言,来推测有可能产生问题的地方作为测试用例进行测试。
因果图:由一个结果来反推原因的方法,具体结果具体分析,没有固定方法。
判定表驱动法:通过表格形式展示输入条件、输出动作以及它们之间的对应关系,从而设计测试用例的方法。
正交试验设计法:研究多因素多水平的一种设计方法,由试验因素的全部水平组合中挑选出部分有代表性的点进行试验,找出最优的水平组合。
8.4.2 白盒测试用例
知道程序的代码逻辑,按照程序的代码语句,来设计覆盖代码分支的测试用例,覆盖级别从低至高分为下面几种:
(1)语句覆盖SC:逻辑代码中的所有语句都要被执行一遍,覆盖层级最低,因为执行了所有的语句,不代表执行了所有的条件判断。
(2)判定覆盖DC:逻辑代码中的所有判断语句的条件的真假分支都要覆盖一次。
(3)条件覆盖CC:针对每一个判断条件内的每一个独立条件都要执行一遍真和假。
(4)条件判定组合覆盖CDC:同时满足判定覆盖和条件覆盖。
(5)路径覆盖:逻辑代码中的所有可行路径都覆盖了,覆盖层级最高。
8.5 测试模型
8.5.1 W模型
W模型是对V模型的一个重要改进,充分体现了尽早开展测试的原则,并将V模型中以发现缺陷为目标上升为保证软件质量为目标。
如图所示,W模型实际上是两个V的叠加,一个V 描述开发过程,另外一个V描述测试过程。但测试的起,始时机不再是编码结束之后,而是从需求分析时开始,且与开发的每一个阶段活动同步进行。
8.5.2 H模型
H模型改进了W和V模型高度依赖于开发的瀑布模型的缺陷。
H 模型把测试活动从软件开发过程中独立出来, 在软件过程的任何一个时间点上,只要测试条件满足即开展测试。测试的流程与其他流程是并行的。H模型比W模型更好的地方是能够兼顾测试的效率和灵活性,适合于各种规模及类型的软件项目。
8.5.3 敏捷测试模型
敏捷测试源于敏捷开发。敏捷测试是敏捷开发的组成部分,需要与开发流程良好融合。
敏捷测试在整个敏捷开发过程中,需要与项目的其他人员甚至用户保持紧密协作,时刻关注需求变化并实施测试,以体现测试的时效性和适应性,这对测试人员有比较高的能力要求。
8.6 调试(debug)
测试是发现错误,调试是找出错误的代码和原因。
调试需要确定错误的准确位置;确定问题的原因并设法改正;改正后要进行回归测试。
调试的方法有:蛮力法、回溯法(从出错的地方开始,向回找)、原因排除法(找出所有可能的原因,逐一进行排除,具体包括演绎法、归纳法、二分法)。
相关推荐
【系统架构设计师】九、软件工程(软件工程定义|软件过程模型|能力成熟度模型)-CSDN博客文章浏览阅读831次,点赞19次,收藏19次。历年真题考情:本章节每年单项选择考13分左右,下午案例、论文也会有涉及,在系统架构设计师中本章节绝对是重点中的重点。主要学习软件工程、需求工程、系统分析与设计、净室软件工程、基于构件的软件工程、软件项目管理等内容。很少涉及超纲题。https://shuaici.blog.csdn.net/article/details/140095679【系统架构设计师】九、软件工程(需求工程|系统分析与设计|DFD|DD|高内聚低耦合)-CSDN博客文章浏览阅读516次,点赞14次,收藏12次。系统设计方法:结构化设计方法,面向对象设计方法。系统设计的主要内容:概要设计、详细设计。概要设计基本任务:又称为系统总体结构设计,是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。详细设计的基本任务:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计(代码、输入/输出格式、用户界面)、编写详细设计说明书、评审。https://shuaici.blog.csdn.net/article/details/140259207【系统架构设计师】九、软件工程(面向对象方法|逆向工程)-CSDN博客文章浏览阅读603次,点赞8次,收藏6次。面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。与逆向工程相关的概念有重构、设计恢复、再工程和正向工程。https://shuaici.blog.csdn.net/article/details/140287834
历年真题练习
1.在白盒测试中,测试强度最高的是()
A.语句覆盖
B.分支覆盖
C.判定覆盖
D.路径覆盖
2.在黑盒测试方法中,()方法最适合描述在多个逻辑条件取值组合所构成的负载情况下,分别
要执行哪些不同的动作。
A.等价类
B.边界值
C.判定表
D.因果图
3.( )通常为一个迭代过程,其中的活动包括需求发现、需求分类和组织、需求协商、需求文档化。
A.需求确认
B.需求管理
C.需求抽取
D.需求规格说明
人工分割线-答案
1. D
解析:测试强度从低到高:语判条路,最强的为路径覆盖。
2. C
3. C
文章评论