diff --git a/OperatingSystem/Chapter2/README.md b/OperatingSystem/Chapter2/README.md index 1bd6cab833fe8b48a002aad2be43edf9a34d8630..c9f0ab329731d50d2f8dd00c67bf234fbae18bb8 100755 --- a/OperatingSystem/Chapter2/README.md +++ b/OperatingSystem/Chapter2/README.md @@ -107,7 +107,7 @@ - **进程是程序的一次执行** - 进程是一个程序及其数据在处理机上顺序执行时所发生的活动 -- **进程是具有独立功能的程序再一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位** +- **进程是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位** ## 3.2 组成 @@ -148,7 +148,7 @@ ## 3.7 挂起与激活 -挂起的是指是进程不能被继续执行,即时挂起后的进程处于就绪状态,被挂起的进程处于静止状态,没被挂起的叫活动状态。 +挂起的是指是进程不能被继续执行,被挂起的进程处于静止状态,没被挂起的叫活动状态。 处于静止状态的进程,只有通过激活操作才能变为活动状态。 diff --git a/OperatingSystem/Chapter5/README.md b/OperatingSystem/Chapter5/README.md index 5e2e864c7a664275fd69c2e5a7d393e6d4ea1469..909fa0742a4d130f4192736b081b6e1a3ca8ff02 100755 --- a/OperatingSystem/Chapter5/README.md +++ b/OperatingSystem/Chapter5/README.md @@ -72,7 +72,7 @@ 也叫`FIFO`置换算法,总是选择最先进入内存的页面予以淘汰,实现简单。 ## 3.3 最近最久未使用置换算法 也叫`LRU`置换算法,赋予每个页面一个访问字段,用来记录相应页面自上次被访问依赖所经历的时间`t`,淘汰一个页面时,选择所有页面中其`t`值最大的页面,也就是内存中最近一段时间内最长时间未被访问的页面。 -## 3.4 最少使用占用算法 +## 3.4 最少使用置换算法 也叫`LFU`置换算法,选择最近一段时间内内存中访问次数最少的页面进行淘汰。 ## 3.5 `Clock`置换算法 一种常用的近似`LRU`的算法,为每个页设置一位访问位,再将内存中的所有页面通过链接指针链成一个循环队列。某页被访问时,访问位置1,从替换指针指向下一个页面,若访问位为1,将它置0,并继续向下查找。又叫`NRU`算法。 diff --git a/SoftwareTesting/Chapter2/README.md b/SoftwareTesting/Chapter2/README.md new file mode 100644 index 0000000000000000000000000000000000000000..597e619d106ce6455f8b61c6c67d4030111f0540 --- /dev/null +++ b/SoftwareTesting/Chapter2/README.md @@ -0,0 +1,175 @@ +# Table of Contents + +* [1 测试流程概述](#1-测试流程概述) +* [2 单元测试](#2-单元测试) + * [2.1 定义](#21-定义) + * [2.2 内容](#22-内容) + * [2.3 步骤](#23-步骤) +* [3 集成测试](#3-集成测试) + * [3.1 定义](#31-定义) + * [3.2 任务](#32-任务) + * [3.3 方法](#33-方法) + * [3.3.1 非增量式集成测试方法](#331-非增量式集成测试方法) + * [3.3.2 增量式集成测试方法](#332-增量式集成测试方法) + * [3.3.2.1 自顶向下增量式测试](#3321-自顶向下增量式测试) + * [3.3.2.2 自底向上增量式测试](#3322-自底向上增量式测试) + * [3.3.2.3 三明治集成测试](#3323-三明治集成测试) +* [4 确认测试](#4-确认测试) + * [4.1 定义](#41-定义) + * [4.2 内容](#42-内容) +* [5 验收测试](#5-验收测试) + * [5.1 定义](#51-定义) + * [5.2 内容](#52-内容) + * [5.2.1 `alpha`测试](#521-alpha测试) + * [5.2.2 `beta`测试](#522-beta测试) + * [5.2.3 回归测试](#523-回归测试) + * [5.2.3.1 定义](#5231-定义) + * [5.2.3.2 实施前提](#5232-实施前提) + * [5.2.3.3 回归测试的两个策略](#5233-回归测试的两个策略) + * [5.2.3.4 流程](#5234-流程) + +# 1 测试流程概述 +软件测试流程包括: + +- 测试计划:测试计划是指根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,使得随后所有的测试工作都围绕着测试需求来进行,同时适当选择测试内容,合理安排测试人员、测试时间和测试资源等 +- 测试设计:测试设计是指将测试计划阶段制订的测试需求分解,细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例,保证测试结果的有效性 +- 测试开发:测试开发是指建立可重复使用的自动测试过程 +- 测试执行:测试执行是指执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理,一般有单元测试、集成测试、确认测试等步骤组成 +- 测试评估:测试评估是指结合量化的测试覆盖域及缺陷跟踪报告,对应用软件的质量和开发团队的工作进度以及工作效率进行综合评价 + +其中测试执行由以下步骤组成: + +- 单元测试:通过对每个最小的软件模块进行测试,对源代码的每一个程序单元实行测试,来检查各个程序模块是否正确地实现了规定的功能,确保其能正常工作 +- 集成测试:对已测试过的模块进行组装集成,目的在于检验与软件设计相关的程序结构问题 +- 确认测试:检验软件是否满足需求规格说明中的功能和性能需求,确定软件配置完全、正确,并检验软件产品能否与实际运行环境中整个系统的其他部分协调工作 +- 验收测试:主要让用户对软件进行测试,并重新执行已经做过的测试的某个子集,保证没有引入新的错误 + +# 2 单元测试 +## 2.1 定义 +单元测试用于判断一小段代码的某个特定条件或场景下某个特定函数的行为,主要测试软件设计的最小单元在语法、格式、逻辑等方面的缺陷以及是否符合功能、性能等需求,程序的多个模块可以并行地进行单元测试工作。 + +## 2.2 内容 +主要包括5个任务: + +- 模块接口测试:通过对被测试模块的数据流进行测试,检查进出模块的数据是否正确,因此必须对模块接口,包括参数表、调用子模块参数、全程数据、文件输入输出操作进行测试 +- 局部数据结构测试:测试用例检查局部数据结构的完整性,如数据类型说明、初始化、缺省值等方面的问题 +- 执行路径测试:对模块中重要的路径进行测试,对基本执行路径和循环进行测试往往可以发现大量路径错误,测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误 +- 错误处理测试:检查模块的错误处理功能是否包含错误或者缺陷,例如,是否拒绝不合理的输入等 +- 边界条件测试:必须采用边界值分析方法来设计测试用例,测试在为限制数据处理而设定的边界处,测试模块是否能够正常工作 + +## 2.3 步骤 +一般单元测试需要辅助模块去帮助完成测试,辅助模块分为两种: + +- 驱动模块:用来模拟被测试模块的上一级模块,相当于被测模块的主程序,用于接收测试数据,并把这些数据传送给被测模块,启动被测模块并输出结果 +- 桩模块:用来模拟被测试模块工作过程中所调用的模块 + +被测试模块、驱动模块和桩模块共同构成了一个测试环境去进行测试。 + +# 3 集成测试 +## 3.1 定义 +将经过单元测试的模块连接起来,组成所规定的软件系统的过程称为集成,集成测试就是针对这个过程,按模块之间的依赖接口的关系图进行测试。 + +## 3.2 任务 +主要任务是解决如下问题: + +- 将各模块连接起来,检查模块相互调用时,数据经过接口是否丢失 +- 将各个子功能组合起来,检查能否到达预期要求的各项功能 +- 一个模块的功能是否会对另一个模块的功能产生不利的影响 +- 全局数据结构是否有问题,会不会被异常修改 +- 单个模块的误差积累起来,是否被放大,从而达到不可接受的程度 + +## 3.3 方法 +集成测试的方法,包括: + +- 非增量式集成测试方法 +- 增量式集成测试方法 + +### 3.3.1 非增量式集成测试方法 +非增量式集成测试方法采用一步到位的方法来进行测试,对所有模块单元进行个别的单元测试后,按程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。 + +### 3.3.2 增量式集成测试方法 +增量式测试集成方法可以分为: + +- 自顶向下增量式测试 +- 自底向上增量式测试 +- 三明治集成测试 + +#### 3.3.2.1 自顶向下增量式测试 +自顶向下增量式测试按照结构图自上而下逐步集成和逐步测试,模块集成的顺序首先是集成主控模块(主程序),然后按照软件控制层次结构向下进行集成,集成策略可以选择广度优先或深度优先。 + +优点包括: + +- 在测试过程中较早地验证主要的控制点 +- 功能性的模块测试可以较早地得到证实 +- 最多只需要一个驱动模块就可以进行测试 +- 支持缺陷故障隔离 + +缺点: + +- 随着底层模块不断增加,会导致底层模块的测试不充分 +- 每次组装都需要提供桩,导致桩的数据急剧增加,从而维护桩的成本会快速上升 + +#### 3.3.2.2 自底向上增量式测试 +从原子模块(软件结构中最底层的模块)开始,按结构图从下而上逐步进行集成和测试。 + +优点: + +- 总体上减少了桩模块的工作量 +- 允许对底层模块行为进行早期验证 +- 测试初期可以并行集成 + +缺点: + +- 随着集成到顶层,整个系统变得越来越复杂,对于底层的一些模块很难覆盖 +- 驱动模块的开发工作量大 + +#### 3.3.2.3 三明治集成测试 +也叫混合集成,将自顶向下和自底向上的优缺点集于一身,三明治集成就是把系统分为三层,中间一层为目标层,对目标层上层采用自顶向下的集成测试方式,对目标层下层采用自底向上集成策略,最后对目标层进行测试。 + +# 4 确认测试 +## 4.1 定义 +用于验证软件的有效性,也就是验证软件的功能和性能以及其他特性是否与用户要求一致。 + +## 4.2 内容 +内容包括: + +- 有效性测试:在模拟的环境下,运用黑盒测试的方法,验证被测试软件是否满足需求规格说明书列出的需求 +- 软件配置审查:保证软件配置的所有成分,包括与实际运行环境中整个系统的支持环境都应齐全,各方面的质量都符合要求 + +# 5 验收测试 +## 5.1 定义 +验收测试是以用户为主的测试,但是软件开发人员和质量保证人员也需要参加。由用户参加设计测试用例,通过用户界面输入测试数据,分析测试的输出结构。 + +## 5.2 内容 +内容包括: + +- `alpha`测试 +- `beta`测试 +- 回归测试 + +### 5.2.1 `alpha`测试 +`alpha`测试是由一个用户在开发环境下的测试,也可以是公司内部用户在模拟实际操作环境下进行的测试。这是在受控制环境下进行的测试,目的是评价软件产品的功能、可使用性、可靠性、性能和支持,尤其注重产品的界面和特色。 +### 5.2.2 `beta`测试 +`beta`测试由软件的多个用户在一个或多个用户的实际使用环境下进行的测试,与`alpha`测试不同,开发者通常不在测试现场。在`beta`测试中,由用户记录遇到的所有问题,包括真实的以及主观认定的问题,定期向开发者报告,开发者综合用户的报告后做出修改。 +### 5.2.3 回归测试 +#### 5.2.3.1 定义 +回归测试是一种验证已变更的系统的完整性与正确性的测试技术,是指重新执行已经做过的测试的某个子集,以保证修改没有引入新的错误或者发现由于更改而引起的之前未发现的错误。 + +#### 5.2.3.2 实施前提 +回归测试的实施前提包括: + +- 当软件中所含错误被发现时,如果错误跟踪和管理系统不够完善,可能会遗漏对这些错误的修改 +- 开发者对错误的理解不够透彻,也可能导致所做的修改只修正了错误的外在表现,而没有修改错误本身 +- 修改还有可能产生副作用,从而导致软件未被修改的部分产生新的问题 + +#### 5.2.3.3 回归测试的两个策略 +- 完全重复测试:选择完全重复测试是指将所有的测试用例,全部再完全执行一遍,缺点是要把用例全部执行,会增加项目的成本以及影响项目的进度 +- 选择性重复测试:选择一部分测试执行,以确认问题修改的正确性和修改后周边是否受到影响,常见的方法包括覆盖修改法、周边影响法、指标达成法、基于操作剖面、基于风险选择测试 + +#### 5.2.3.4 流程 +- 在测试策略指定阶段,制定回归测试策略 +- 确定回归测试版本 +- 回归测试版本发布,按照回归测试策略执行回归测试 +- 回归测试通过,关闭缺陷跟踪单 +- 回归测试不通过,缺陷单返回开发人员,重新修改后再次回归测试 + diff --git a/SoftwareTesting/Chapter2/answer.md b/SoftwareTesting/Chapter2/answer.md new file mode 100644 index 0000000000000000000000000000000000000000..1d72447c6d73c76202a9b0aff6bad471e9f9ba8f --- /dev/null +++ b/SoftwareTesting/Chapter2/answer.md @@ -0,0 +1,37 @@ +# 1 +- 测试计划:根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,选择测试内容,合理安排测试人员,测试时间及测试资源等 +- 测试设计:将测试计划阶段制订的测试需求分解,细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例,保证测试结果的有效性 +- 测试执行:执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、集成测试、确认测试以及回归测试等步骤组成 +- 测试评估:结合量化的测试覆盖率以及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度以及工作效率进行综合评价 + +# 2 +- 测试的单元不同:单元测试是针对软件的基本单元(如函数)所做的测试,而集成测试是以模块和子系统为单位进行的测试,主要测试接口间的关系 +- 测试依据不同:单元测试是针对软件详细设计做的测试,测试用例主要依据的是详细设计,而集成测试是针对高层(概要)设计做的测试,测试用例主要依据是概要设计 +- 测试空间不同:集成测试主要测试的是接口层的测试空间,与单元测试不同,不关心内部实现层的测试空间 +- 测试方法不同:集成测试关注的是接口的集成,单元测试关注单个单元,因此具体的测试方法上不会相同 + +# 3 +- 测试性质不同:单元测试属于白盒测试,而系统测试属于黑盒测试 +- 时期不同:单元测试是早期的测试,发现问题可以较早定位,而系统测试是后期测试,发现错误后定位工作比较困难 + +# 4 +- 依据不同:集成测试主要依据是概要设计说明书,系统测试主要依据是需求设计说明书 +- 测试对象不同:集成测试是系统模块的测试,系统测试是对整个系统的测试,包括相关软硬件平台等 + +# 5 +- 大爆炸集成:又称为一次性组装或整体拼装,属于非增值集成,这种集成策略的做法就是把所有通过单元测试的模块一次性集成到一起进行测试,不考虑组件之间的相互依赖性以及可能存在的风险 +- 三明治集成:一种混合增量式测试策略 +- 自顶向下集成:就是按照系统层次的结构,以主程序模块为中心,自上而下对各个模块一边组装一边测试 +- 自底向上集成:从依赖性最小的底层模块开始,逐层向上集成 +- 高频集成:与软件开发过程同步,每隔一段时间堆开发团队的现有代码进行一次集成测试 + +# 6 +- `alpha`测试:在开发环境下或者公司内部用户在模拟实际操作,由用户参与的测试,测试的目的是评价软件产品的功能、可使用性、可靠性、性能等 +- `beta`测试:在实际使用环境下的测试,开发者通常不在现场,由用户记录遇到的所有问题,定期向开发者报告,开发者综合用户的报告后做出修改 + +# 7 +- 在修改范围内的测试 +- 在受影响范围内的测试 +- 根据一定的覆盖率指标选择回归测试 +- 基于操作剖面测试 +- 基于风险选择测试 diff --git a/SoftwareTesting/Chapter2/exercise.md b/SoftwareTesting/Chapter2/exercise.md new file mode 100644 index 0000000000000000000000000000000000000000..1e5dd14695d8834ae27d741bcf0cd31020a5717c --- /dev/null +++ b/SoftwareTesting/Chapter2/exercise.md @@ -0,0 +1,101 @@ +# 选择题 +# 1、软件测试是软件质量保证的重要手段,()是软件测试的最基础环节 +A、功能测试 + +B、单元测试 + +C、结构测试 + +D、确认测试 + +# 2、单元测试的测试对象是() +A、系统 + +B、程序模块 + +C、模块接口 + +D、系统功能 + +# 3、关于`alpha`测试中描述准确的是() +A、需要用户代表参加 + +B、不需要用户代表参加 + +C、是系统测试的一种 + +D、是验收测试的一种 + +# 4、对于`beta`测试,描述准确的是 +A、`beta`测试是公司内部展开的测试,由公司专业的测试人员执行的测试 + +B、`beta`测试是公司内部展开的测试,由公司非专业的测试人员执行的测试 + +C、`beta`测试是公司外部展开的测试,由专业的测试人员执行的测试 + +D、`beta`测试是公司外部展开的测试,由非专业的测试人员执行的测试 + +# 5、下列对于单元测试的说法,不正确的是() +A、单元测试的主要目的是针对编码过程中可能存在的各种错误 + +B、单元测试一般由程序开发人员完成 + +C、单元测试是一种不需要关注程序结构的测试 + +D、单元测试属于白盒测试的一种 + +# 6、软件测试计划描述了() +A、软件的性质 + +B、软件的功能和测试用例 + +C、软件的规定动作 + +D、对于预定的测试活动将要采取的手段 + +# 7、软件设计阶段的测试主要采取方式是() +A、评审 + +B、白盒测试 + +C、黑盒测试 + +D、动态测试 + +# 8、软件验收测试的合格通过准则是() +A、软件需求分析说明书定义的所有功能已全部实现,性能指标全部达到要求 + +B、所有测试项没有残余一级、二级和三级错误 + +C、立项审批表、需求分析文档、设计文档和编码实现一致 + +D、验收测试工件齐全 + +# 9、在集成测试用例设计中,要满足的基本要求是() +A、保证测试用例的正确性 + +B、保证测试用例能无误地完成测试项既定的测试目标 + +C、保证测试用例的简单性 + +D、保证测试用例能满足相应的覆盖要求 + +# 10、单元测试时用于代替被调用模块的是() +A、桩模块 + +B、通信模块 + +C、驱动模块 + +D、代理模块 + +# 简答题 +# 1、软件测试的生命周期是什么? +# 2、单元测试与集成测试有什么区别? +# 3、单元测试与系统测试有什么区别? +# 4、简述集成测试和系统测试的区别 +# 5、集成测试策略主要有哪些 +# 6、`alpha`测试和`beta`测试的区别是什么 +# 7、常用的回归测试的测试用例有几种选择方法 + +