软件工程第七章——实现

一 、概述

编码和测试统称为实现。

  • 编码:把软件设计结果翻译成某种程序设计语言书写的程序。编码是对设计的进一步优化。
  • 测试:测试的目的就是在软件投入生产运行之前,尽可能多地发现软件中的错误。

但发现错误不是最终目的,软件工程根本目标是开发出高质量的完全符合用户需求的软件。因此通过测试发现错误后还必须诊断并改正错误,这就是调试的目的。


二、编码(熟读有印象)

编码主要实用标准:

A 系统用户的要求。B 可以使用的编译程序。C 可以得到的软件工具。D 工程规模。E 程序员的知识 。F 软件可移植性要求。 G 软件应用领域

编码风格:

a 程序内部的文档(包括恰当标识符,适当的注解,良好的视觉组织。)

b 数据说明

c 语句构造 

  • 不要为了节省空间把多个语句写在同一行
  • 避免复杂的条件测试
  • 减少对“非”条件的测试
  • 避免大量使用循环嵌套和条件嵌套
  • 利用括号使逻辑表达式或算数表达式运算次序清晰直观

d 输入输出

  • 对所有输入数据进行检验
  • 检查输入项组合的合法性
  • 保持输入格式简单
  • 使用数据结束标记
  • 明确提示交互式输入的请求,详细说明可用的选择或边界数值
  • 保持输入格式一致
  • 设计良好的输出报表
  • 给所有输出数据加标志

e 效率

  • 程序运行时间
  • 存储器效率(大型计算机要考虑操作系统页式调度特点
  • 输入输出效率

三、软件测试

目的:发现程序运行中的错误

准则:所有测试都能追溯到用户需求; 应远在测试之前就制定测试计划; 应从小规模测试开始,逐步扩展到大规模测试; 穷举测试不可能; 为达到最佳测试效果,应由第三方从事测试过程。

测试步骤:

(1)单元测试 (2)集成测试(子系统测试)(3)系统测试  (4) 验收测试(确认测试)

测试方法:白盒测试法,黑盒测试法

 (1)单元测试

单元测试是集中检测软件设计的最小单元---模块。

单元测试采用 人工测试➕计算机测试。人工测试是编写者本人非正式的对源程序的审查,模块不是独立的程序,因此计算机测试时须开发驱动软件和存根软件。 

人工测试于计算机测试两者互相补充,相辅相成。

(2)集成测试(子系统测试)

集成测试是测试和组装软件的系统化技术。

主要目标是发现与接口有关的问题。

由模块组装成程序时有两种方法->非渐增式测试

                                                          ->渐增式测试

当使用渐增式方式把模块结合到程序中去时,有自顶向下 和 自底向上 两种集成策略。

  • 自顶向下 :从主控制模块(桩模块)开始,沿着程序的控制模层向下移动,逐步把各个模块结合起来。------广度优先,深度优先
  • 自底向上 :从原子模块开始组装和测试,须设计驱动模块。

补:回归测试  

所谓回归测试是指重新执行已经做过的测试的某个子集,以保证变化没有带来非预期的副作用。

(3)系统测试

系统测试是把经过测试的子系统装配成一个完整的系统来测试。在这个过程中不仅要发现设计和编码的错误还要验证系统提供需求说明书中指定的功能。

(4)确认测试(验收测试)

确认测试以用户为主进行,必须使用户积极参与。

确认测试通常使用黑盒测试。测试过程规定了用来检测软件是否与需求一致的方案。通过测试要保证软件能满足所有功能要求,能达到每个性能要求,文档资料是准确而完整的。

确认测试的一个重要内容是:复查软件配置。(复查就是复查所有成分都齐全,质量符合要求,文档与程序完全一致)

 


四、白盒测试与黑盒测试

(1)白盒测试(结构测试)

1、逻辑覆盖

  • ❗️语句覆盖【一条路走到头,每个模块都要覆盖】

选择足够多的测试数据,使被测试程序中每个语句至少执行一次。

  • ❗️判定覆盖

判定覆盖又叫分支覆盖,不仅每个语句至少执行一次,而且每个判定的每种结果都应该至少执行一次。【例如有三个判定语句,则有2^3为8种判定结果,该8种判定结果都要执行至少一次。真真真,真真假,真假真,假真真…】

  • ❗️条件覆盖

不仅每个语句至少执行一次,而且判定表达式中的每个条件都取到各种可能的结果。  

  • 判定/条件覆盖
  • 组合条件覆盖
  • 点覆盖
  • 边覆盖
  • ❗️路径覆盖(最强的覆盖)

2、控制结构测试

  • 基本路径测试-----McCabe提出的,基于流图的测试。

首先根据设计结果画出相应的流图。

其次计算环形复杂度V(G)。(环形复杂度是指南,引领寻找独立路径)

最后确定线性独立路径的集合(要点)。~~~~独立路径条数🟰V(G)

‼️白盒测试小结:1⃣️是一种逻辑测试方法,由程序内部逻辑驱动 的一种单元测试

2⃣️只有对程序内部十分了解才能进行适度白盒测试

3⃣️不可能穷举所有的逻辑路径

4⃣️不同测试场景,有具体测试方法

5⃣️测试用例要尽可能覆盖

3、循环测试

  • 简单循环
  • 嵌套循环
  • 串接循环

(2)黑盒测试(功能测试)

黑盒测试与白盒测试互补,黑盒力图发现白盒不易发现的错误。

设计黑盒测试要找出某些具体类型的错误,而不是笼统的找到。

黑盒测试方法:

  • ❗️等价类划分

1、划分有效等价类与无效等价类

2、确定测试用例,尽可能多地覆盖尚未被覆盖的有效等价类,直到所有有效等价类都被覆盖。

3、设计一个新的测试用例,仅覆盖一尚未被覆盖的无效等价类,直到所有无效等价类被覆盖。

  • ❗️边界值分析

1、通常在划分好的等价类中采用边界值分析设计测试用例

2、选取刚好 等于,稍小于,稍大于 等价类的边界值数据作为测试数据

3、不要选取每个等价类内部典型值或任意值作为测试数据(会具有偶然性)

  • 错误推测 

 


五、调试

调试(也称为纠错)作为成功测试的后果出现,也就是说调试是发生在测试发现错误之后排出错误的过程  。

调试不是测试,它发生在测试之后。

调试过程:

  • 调试过程总会有两种情况之一:1⃣️找到了问题原因并把问题改正和排除了。2⃣️没找到问题的原因。在该情况下,调试人员可猜想一个原因并设计测试用例来验证该假设,重复此过程直至找到原因并改正错误。
  • 调试途径:

1)蛮干法。

2)回溯法。

3)原因排除法,包括对分查找法,归纳法,演绎法。

归纳法:从个别现象推断出一般性结论的方法。

演绎法:从一般原理或前提出发,经过排除和精化的过程推导出结论。

 


六、软件可靠性

1、软件可靠性:多数人承认的一个定义是,程序在 给定时间间隔内 ,按照规格说明书的规定成功运行的概率。

2、相关两个术语

  • 软件的可用性

⚠️区分:软件可用性是程序在 给定的时间点,按照规格说明书成功运行的概率。

可用性 Ass= MTTF/(MTTF+MTTR)/*MTTR是平均修复时间*/

  • 平均无故障时间(MTTF)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值