跳到主要内容

系统实施

测试原则和方法

系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。 测试是为了找出错误,调试是为了找出错误发生的原因。

测试原则

  • 应尽早并不断的进行测试
  • 测试工作应该避免由原开发软件的人或小组承担。
  • 在设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期的输出结果。

输出结果

  • 既包含有效、合理的测试用例,也包含不合理、失效的用例。
  • 检验程序是否做了该做的事,且是否做了不该做的事;
  • 严格按照测试计划进行;
  • 妥善保存测试计划和测试用例;
  • 测试用例可以重复使用或追加测试。

软件测试方法

软件测试方法可分为静态测试和动态测试。

提示

静态和动态针对的是程序是否运行。

静态测试: 指被测试程序不在机器上运行,而采用人工检测和计算机辅助静态分析的手段对程序进行检测,包括对文档的静态测试和对代码的静态测试。对文档的静态测试主要以检查单的形式进行,而对代码的静态测试,包括桌前检查、代码审查、代码走查的方式。使用这种方法能够有效地发现 30%~70% 的逻辑设计和编码错误。

动态测试: 指在计算机上实际运行程序进行软件测试,一般采用白盒测试和黑盒测试方法。

黑盒测试法:功能性测试,不了解软件代码结构,根据功能设计用例,测试软件功能。

白盒测试法:结构性测试,明确代码流程,根据代码逻辑设计用例,进行用例测试。 做白盒测试的人是需要读软件代码的,可以把代码里面所有的分支都走完。

测试阶段

  1. 单元测试:也成为模块测试,测试的对象是可独立编译或汇编的程序模块、软件构件或 OO 软件中的类(统称为模块),测试的依据是软件详细设计说明书

  2. 集成测试:目的是检查模块之间,以及模块和已集成的软件之间的关系,并验证已集成的软件是否符合设计要求。测试的依据是软件概要设计文档

  3. 系统测试:测试对象是完整的、集成的计算机系统;测试的目的是在真实系统工作环境下,验证完成的软件配置项是否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。测试依据是用户需求或开发合同。主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等,其中,最重要的工作是进行功能测试和性能测试。功能测试主要指标有响应时间、吞吐量、并发用户数和资源利用率等

提示

系统测试是在确认测试之前,内部进行的一个测试。

  1. 确认测试:主要用于验证软件的功能、性能和其它特性是否与用户需求一致。测试依据是需求文档。根据用户的参与程度,通常包括以下类型:
    1. 内部确认测试:主要由软件开发组织内部按照 SRS 进行测试
    2. Alpha 测试:用户在开发环境下进行测试
    3. Beta 测试:用户在实际使用环境下进行测试,通过测试后,产品才能交付用户。
    4. 验收测试:针对 SRS ,在交付前以用户为主进行的测试。其测试对象为完整的、集成的计算机系统。验收测试的目的是,在真实的用户工作环境下,检验软件系统是否满足开发技术合同或 SRS。验收测试的结论是用户确认是否接受该软件的主要依据。除应满足一般测试的准入条件外,在进行验收测试之前,应确认被测试软件系统已通过系统测试。

下面两个没有顺序

  • 配置项测试:测试对象是软件配置项,测试目的是检验软件配置项与 SRS 的一致性。测试的依据是 SRS。在此之间,应确认被测试软件配置项已经通过单元测试。

  • 回归测试:测试的目的是测试软件变更之后,变更部分的正确性和对变更需求的符合性,以及软件原有的、正确的功能、性能和其它规定的要求不损害性

测试策略

自底向上:从最底层模块开始测试,需要编写驱动程序,而后开始逐一合并模块,最终完成整个系统的测试。优点是较早验证了底层模块。(先单元测试,后集成测试)

自顶向下:先测试整个系统,需要编写桩程序,而后逐步向下直至测试最底层模块。优点是较早的验证了系统的主要控制和判断点

三明治:既有自底向上也有自顶向下的测试方法,二者都包括。兼有二者的优点,缺点是测试工作量大

测试用例的设计

黑盒测试用例

将程序看作一个黑盒子,只知道输入输出,不知道内部代码,由此设计出测试用例,分为以下几类:

  1. 等价类划分:把所有的数据按某种特性进行归类,而后在每类数据里选取一个即可。等价类测试用例的设计原则:设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
  2. 边界值划分:将每类的边界值作为测试用例,边界值一般为范围的两端值以及在此范围之外的与此范围间隔最小的两个值,如年龄范围为 0-150,边界值为 0,150,-1,151 四个
  3. 错误推测:没有固定的方法,凭经验而言,来推测有可能产生问题的地方,作为测试用例进行测试。
  4. 因果图:由一个结果来反推原因的方法,具体结果具体分析,没有固定方法。

白盒测试用例

知道程序的代码逻辑,按照程序的代码语句,来设计覆盖代码分支的测试用例,覆盖级别从低至高分为下面几种:

  1. 语句覆盖 SC : 逻辑代码中所有的语句都要被执行一遍,覆盖层级最低 ,因为执行了所有的语句。(执行了所有的语句,不代表执行了所有的判断条件),语句覆盖只需要走完一个测试用例即可。
  2.  判定覆盖 DC:逻辑代码中的所有判断语句的条件的真假分支都要覆盖一次 。一个 IF 语句表示一个判断,但是一个 IF 里面有很多的条件。 image-20240915123258904
  3. 条件覆盖 CC:针对每一个判断条件内的每一个独立条件都要执行一遍真和假。满足条件覆盖不一定满足判定覆盖,是两种不同的方式。
提示

判定覆盖和条件符号是不一样的,满足了判定条件覆盖不一定满足判定覆盖。判定覆盖比条件覆盖覆盖率高。

  1. 条件判定组合覆盖 CDC:同时满足覆盖和条件覆盖。

  2. 路径覆盖:逻辑代码中的所有可行路径都覆盖了,覆盖层级最高。走完所有执行路线的组合,比如下图有四种路线。 image-20240915133423708

提示

找路径就是从开始到结束挨个划线。

调试

  • 测试是发现错误,调试是找出错误的原因和代码
  • 调试需要确定错误的准确位置;确定问题的原因并设法改正;改正后要进行回归测试
  • 调试的方法有:蛮力法、回溯法(从出错的位置开始,向回找)、原因排除法(找出所有可能的原因,逐一进行排除,具体的包括演绎法、归纳法、二分法)

软件度量

软件的两种属性:外部属性指向面向管理者和用户的属性,可直接测量,一般为性能指标。内部属性值指软件产品本身的属性,如可靠性等,只能间接测量

McCabe 度量法(每年都要考):又称为环路复杂度,假设有向图中有向边数为 m,节点数为 n,则此有向图的环路复杂度为 m-n+2

注意 m 和 n 代表的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支边(连线)就是一条有向边,每一条语句(框:包括开始、结束、选择框)就是一个顶点。