【系统架构设计师】九、软件工程(软件测试)

news2024/9/17 7:05:08

目录

八、软件测试

8.1 测试分类

8.2 静态方法

8.2.1 静态测试

8.2.2 动态测试

8.2.3 自动化测试

8.3 测试阶段

8.3.1 单元测试

8.3.2 集成测试

8.3.3 确认测试

8.3.4 系统测试

8.3.5 性能测试

8.3.6 验收测试

8.3.7 其他测试

8.4 测试用例设计       

8.4.1 黑盒测试用例 

8.4.2 白盒测试用例

8.5 测试模型

8.5.1 W模型

8.5.2  H模型

 8.5.3 敏捷测试模型

8.6 调试(debug)

相关推荐

历年真题练习


八、软件测试

        软件测试是确保软件的质量,确认软件以正确的方式做了用户所期望的事情。软件测试通常在规定的时间和成本内完成,以尽量多地发现漏洞,但不能保证发现所有的漏洞
        测试原则:
                ●应尽早并不断的进行测试;
                ●测试工作应该避免由原开发软件的人或小组承担;
                ●在设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期的输出结果;
                ●既包含有效、合理的测试用例,也包含不合理、失效的用例;
                ●检验程序是否做了该做的事,且是否做了不该做的事;
                ●严格按照测试计划进行;
                ●妥善保存测试计划和测试用例;
                ●测试用例可以重复使用或追加测试。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1916896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Python 绘制美国选举分级统计图

「AI秘籍」系列课程: 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 如何创建美国选举结果的时间序列分级统计图 数据地址为源地址,如果失效请与我联系。 2024 年美国大选将至,…

算法通关:004_1选择排序

代码一定要自己手敲理解 public class _004 {//选择排序,冒泡排序,插入排序//交换public static void swap(int[] arr,int i ,int j){int temp arr[i];arr[i] arr[j];arr[j] temp;}//选择排序public static void selectSort(int[] arr){if(arr null…

C++ | Leetcode C++题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack { public:queue<int> q;/** Initialize your data structure here. */MyStack() {}/** Push element x onto stack. */void push(int x) {int n q.size();q.push(x);for (int i 0; i < n; i) {q.push(q.front());…

LabVIEW实现LED显示屏视觉检测

为了满足LED显示屏在生产过程中的严格质量检测需求&#xff0c;引入自动化检测系统是十分必要的。传统人工检测方式存在检测强度高、效率低、准确性差等问题&#xff0c;自动化检测系统则能显著提高检测效率和准确性。视觉检测系统的构建主要包含硬件和软件两个部分。 视觉系统…

JDK中不能继承的类:final类的作用与意义

JDK中不能继承的类&#xff1a;final类的作用与意义 1、 为什么要用final类&#xff1f;2、JDK中有哪些final类&#xff1f;3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程中&#xff0c;有些类被标记为final&#xff0c…

前端面试题47(在动态控制路由时,如何防止未授权用户访问受保护的页面?)

在Vue中&#xff0c;防止未授权用户访问受保护页面通常涉及到使用路由守卫&#xff08;Route Guards&#xff09;。路由守卫允许你在路由发生改变前或后执行一些逻辑&#xff0c;比如检查用户是否已登录或者有访问某个页面的权限。下面是一些常见的路由守卫类型及其使用方式&am…

MapReduce底层原理详解:大案例解析(第32天)

系列文章目录 一、MapReduce概述 二、MapReduce工作机制 三、Map&#xff0c;Shuffle&#xff0c;reduce阶段详解 四、大案例解析 文章目录 系列文章目录前言一、MapReduce概述二、MapReduce工作机制1. 角色与组件2. 作业提交与执行流程1. 作业提交&#xff1a;2. Map阶段&…

IntelliJ IDEA社区版在Windows电脑中的下载、安装方法

本文介绍IntelliJ IDEA软件Community&#xff08;社区版&#xff09;在Windows操作系统中的下载、安装、运行与使用方法。 IntelliJ IDEA软件是一款由JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java语言的开发&#xff0c;但同时也支持其…

面试经验之谈

优质博文&#xff1a;IT-BLOG-CN ​通常面试官会把每一轮面试分为三个环节&#xff1a;① 行为面试 ② 技术面试 ③ 应聘者提问 行为面试环节 面试开始的5~10分钟通常是行为面试的时间&#xff0c;面试官会参照简历和你的自我介绍了解应聘者的过往经验和项目经历。由于面试官…

读书笔记-Java并发编程的艺术-第4章(Java并发编程基础)-第4节(线程应用实例)

文章目录 4.4 线程应用实例4.4.1 等待超时模式4.4.2 一个简单的数据库连接池示例4.4.3 线程池技术及其示例4.4.4 一个基于线程池技术的简单 Web 服务器 4.4 线程应用实例 4.4.1 等待超时模式 开发人员经常会遇到这样的方法调用场景&#xff1a;调用一个方法时等待一段时间(一…

postgres 的dblink使用,远程连接数据库

一.安装下载 dblink create extension if not exists dblink 查看是否已经安装 select * from pg_extension;二.运行&#xff0c;查询数据 其中&#xff0c;第一个参数是dblink名字&#xff0c;也可以是连接字符串。 第二个参数是要执行的SQL查询语句。AS子句用于指定返回结…

网桥与以太网交换机:功能与区别解析

在传统的共享式局域网中&#xff0c;所有站点共享一个公共的传输媒体。随着局域网规模的扩大、网络中站点数目的不断增加&#xff0c;这样的网络通信负载加重&#xff0c;网络效率急剧下降。随着技术的发展、交换技术的成熟和成本的降低&#xff0c;具有更高性能的交换式局域网…

kali安装vulhub遇到的问题及解决方法(docker及docker镜像源更换)

kali安装vulhub&#xff1a; 提示&#xff1a;项目地址 https://github.com/vulhub/vulhub 项目安装&#xff1a; git clone https://github.com/vulhub/vulhub.git 安装docker 提示&#xff1a;普通用户请使用sudo&#xff1a; 首先安装 https 协议、CA 证书 apt-get in…

Apache Flink 运行时架构

Flink 运行时架构 Flink整个系统由两个主要部分组成JobManager和TaskManager&#xff0c;Flink架构也遵循Master-Slave架构设计原则&#xff0c;JobManager为Master节点&#xff0c;TaskManager为worker&#xff08;Slave&#xff09;节点&#xff0c;所有组件之间通讯都是借助…

内容协商源码解析与自定义 MessageConverter

目录 内容协商 1、引入xml依赖 2、postman分别测试返回json和xml 3、开启浏览器参数方式内容协商功能 4、内容协商原理 5、自定义 MessageConverter 综上 内容协商 根据客户端接收能力不同&#xff0c;返回不同媒体类型的数据。 若客户端无法解析服务端返回的内容&#…

CinemachineBrain的属性简介

CinemachineBrain的属性简介 CinemachineBrain是Unity Cinemachine的核心组件&#xff0c;它和Camera组件挂载在一起&#xff0c;监控场景中所有的virtual camera。CinemachineBrain在inspector中暴露的属性如下&#xff1a; Live Camera和Live Blend分别表示当前active的virtu…

深度学习和NLP中的注意力和记忆

深度学习和NLP中的注意力和记忆 文章目录 一、说明二、注意力解决了什么问题&#xff1f;#三、关注的代价#四、机器翻译之外的关注#五、注意力&#xff08;模糊&#xff09;记忆&#xff1f;# 一、说明 深度学习的最新趋势是注意力机制。在一次采访中&#xff0c;现任 OpenAI 研…

矩阵分解及其在机器学习中的应用

阵分解是一种广泛应用于数据挖掘和机器学习领域的技术&#xff0c;它通过将一个高维数据集分解为多个低维的数据集&#xff0c;以降低数据的复杂性、提高计算效率&#xff0c;并发现数据中的隐含结构。本文将详细介绍矩阵分解的基本概念、主要方法及其在机器学习中的应用。 一、…

Spark项目通用开发框架

文章目录 1. 大数据项目结构2. 类说明2.1 公共接口类2.2 TaskNameEnum指定每个任务的名称2.3 TaskRunner中编写任务的业务逻辑 3. 任务执行脚本 每个公司内部都有一套自己的架子&#xff0c;一般新人来了就直接在已有的架子上开发业务。 以下仅仅作为记录下自己使用的架子&…