软件工程知识梳理5-实现和测试

编码和测试统称为实现。

****编码:****把软件设计结果翻译成某种程序设计语言书写的程序。是对设计的进一步具体化,是软件工程过程的一个阶段。

****测试:****单元测试和集成测试,软件测试往往占软件开发总工作量的40%以上。

****编码:****选择编程语言、规范编码风格

****测试方法:****白盒测试(结构测试)、黑盒测试(功能测试)

测试步骤:

  1. 模块测试
  2. 子系统测试
  3. 系统测试
  4. 验收测试
  5. 平行运行

****单元测试:****一般使用白盒测试、结合详细设计文档对重要模块进行测试。

  1. 模块接口
  2. 边界条件
  3. 出错处理通路
  4. 重要的执行通路
  5. 局部数据结构

****代码审查:****本人(非正式)和审查小组(正式)。

审查小组参与者:组长、程序的设计者、程序的编写者、程序的测试者(如果一个人即是程序的设计者又是编写者,或既是编写者又是测试者,审查小组种应该再增加一个程序员)


集成测试:

非渐增式测试方法:先进行模块测试,再把所有模块按设计要求结合成索要的程序进行测试。(测试时会遇到很多错误,改正错误也很困难,测试者面对的情况十分复杂、庞大的程序想要诊断定位一个错误非常困难)

渐增式测试方法:把程序划分成小段来构造和测试,里面包含单元测试和集成测试,测试完以后再把下一个应该测试的模块结合进来测试,每次增加一个模块的方法进行测试。(普遍采用渐增式测试方法)

****渐增式集成策略有2种:****自顶向下集成和自底向上集成,各自的优缺点不一样,目前基本都是混合使用两种集成策略。

****回归测试:****集成测试过程中新模块结合进来时,程序就发生了变化,此时数据流可能发生变化,这里就应该进行回归测试,重新执行已经做过的测试的某个子集,保证上述这些变化没有带来非预期的副作用。(这里要注意的式,回归测试用例的数量可能会变得非常大,因此,应该把回归测试集设计成只包括可以检测程序每个主要功能中的一类或多类错误的测试用例)

****确认测试:****也称验收测试,目标式验证软件的有效性。

****软件有效性:****如果软件的功能和性能如同用户所合理期待的那样就是有效的。

****确认测试范围:****必须用户积极参与并以用户为主,用户应该参与设计测试方案,使用用户界面输入测试数据并且分析评价测试的输出结果。此阶段一般使用黑盒测试。

软件配置复查:保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。

Alpha测试:用户在开发者场所进行,并且在开发者的指导下尽心个测试。开发者负责记录测试结果。

Beta测试:在软件的最终用户的一个或多个客户场所进行。用户记录测试结果并报告给开发者。

白盒测试技术:

逻辑覆盖:

  1. 语句覆盖
  2. 判定覆盖
  3. 条件覆盖
  4. 判定/条件覆盖
  5. 条件组合覆盖
  6. 点覆盖
  7. 边覆盖
  8. 路径覆盖

控制结构测试:

  1. 基本路径测试
  2. 条件测试
  3. 循环测试

黑盒测试技术

黑盒测试着重测试软件功能。力图发现以下类型的错误:

  1. 功能不正确或遗漏了功能;

  2. 界面错误。

  3. 数据结构错误或外部数据库访问错误

  4. 性能错误

  5. 初始化和终止错误

  6. 等价划分:

把程序的输入域划分为若干个数据类,据此导出测试用例。一个理想的测试用例能独自发现一类错误。

  1. 边界值分析:
  2. 错误推测:

调试

调试时在测试发现错误之后排除错误的过程。调试就是把症状和原因联系起来的尚未被人深入认识的智力过程。

调试途径:

  1. 蛮干法
  2. 回溯法
  3. 原因排除法

软件可靠性

可靠性:程序在给定的事件间隔内,按照规格说明书的规定成功地运行地概率。

可用性:程序在给定地时间点,按照规格说明书地规定,成功地运行的概率。

估算平均无故障时间的方法

------------------------------------------------------------------------------------------------------

小结

实现包括编码和测试两个阶段。

按照传统的软件工程方法学,编码是在对软件进行了总体设计和详细设计之后进行的,它只不过是把软件设计的结果翻译成用某种程序设计语言书写的程序,因此,程序的质量基本上取决于设计的质量。但是,编码使用的语言﹐特别是写程序的风格,也对程序质量有相当大的影响。

大量实践结果表明,高级程序设计语言较汇编语言有很多优点。因此,除非在非常必要的场合,一般不要使用汇编语言写程序。至于具体选用哪种高级程序设计语言,则不仅要考虑语言本身的特点,还应该考虑使用环境等一系列实际因素。

程序内部的良好文档资料,有规律的数据说明格式,简单清晰的语句构造和输入输出格式等,都对提高程序的可读性有很大作用,也在相当大的程度上改进了程序的可维护性。

目前软件测试仍然是保证软件可靠性的主要手段。测试阶段的根本任务是发现并改正软件中的错误。

软件测试是软件开发过程中最艰巨最繁重的任务,大型软件的测试应该分阶段地进行,通常至少分为单元测试﹑集成测试验收测试3个基本阶段。

设计测试方案是测试阶段的关键技术问题,基本目标是选用最少量的高效测试数据,做到尽可能完善的测试,从而尽可能多地发现软件中的问题。

应该认识到,软件测试不仅仅指利用计算机进行的测试,还包括人工进行的测试(例如,代码审查)。两种测试途径各有优缺点,互相补充,缺一不可。

白盒测试和黑盒测试是软件测试的两类基本方法,这两类方法各有所长,相互补充。通常﹐在测试过程的早期阶段主要使用白盒方法﹐而在测试过程的后期阶段主要使用黑盒方法。为了设计出有效的测试方案,软件工程师应该深入理解并坚持运用关于软件测试的基本准则。

设计白盒测试方案的技术主要有,逻辑覆盖和控制结构测试;设计黑盒测试方案的技术主要有,等价划分.边界值分析和错误推测。

在测试过程中发现的软件错误必须及时改正,这就是调试的任务。为了改正错误,首先必须确定错误的准确位置,这是调试过程中最困难的工作,需要审慎周密的思考和推理。为了改正错误往往需要修正原来的设计,必须通盘考虑统筹兼顾,而不能"头疼医头、脚疼医脚",应该尽量避免在调试过程中引进新错误。

测试和调试是软件测试阶段中的两个关系非常密切的过程,它们往往交替进行。程序中潜藏的错误的数目,直接决定了软件的可靠性。通过测试可以估算出程序中剩余的错误数。根据测试和调试过程中已经发现和改正的错误数,可以估算软件的平均无故障时间;反之,根据要求达到的软件平均无故障时间,可以估算出应该改正的错误数,从而能够判断测试阶段何时可以结束。

相关推荐
不止会JS14 小时前
软考:系统架构设计师教材笔记(持续更新中)
系统架构·软件工程·软考
Theodore_10221 天前
4 软件工程——总体设计
java·开发语言·数据库·算法·java-ee·软件工程·设计
Theodore_10221 天前
1 软件工程——概述
java·开发语言·算法·设计模式·java-ee·软件工程·个人开发
shinelord明1 天前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
人才程序员3 天前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
Theodore_10223 天前
3 需求分析
java·开发语言·算法·java-ee·软件工程·需求分析·需求
做人求其滴3 天前
GDPU软件工程习题(挖空版)
软件工程
MrFlySand_飞沙3 天前
软件工程
软件工程
jokr_3 天前
【软件工程复习】
软件工程
云空3 天前
《软件工程文档攻略:解锁软件开发的“秘籍”》
软件工程