当前位置: 首页 > news >正文

软件工程知识梳理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. 初始化和终止错误

  1. 等价划分:

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

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

调试

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

调试途径:

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

软件可靠性

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

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

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

——————————————————————————————————

小结

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

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

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

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

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

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

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

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

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

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

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

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

相关文章:

  • 浅谈MySQL3种日志
  • 如何通过 Nginx 反向代理提高网站安全性和性能?
  • 【常用工具】7-Zip 解/压缩软件——基本使用方法
  • Spark性能调优
  • 2024年航海制造工程与海洋工程国际会议(ICNMEME2024)
  • git仓库批量备份
  • LeetCode 54 螺旋矩阵
  • 扩展学习|商业智能和大数据分析的研究前景(比对分析)
  • 【Vue.js设计与实现】第一篇:框架设计概览-阅读笔记(持续更新)
  • 【Linux笔记】文件描述符与重定向
  • 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树(代码python实践)
  • ingres nginx 反向代理常见配置(持续更新)
  • 盘点Python网页开发轻量级框架Flask知识
  • C++ 数论相关题目 博弈论 Nim游戏
  • 微信小程序(二十五)条件判断语句与结构隐藏
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Angular 响应式表单之下拉框
  • centos安装java运行环境jdk+tomcat
  • ECS应用管理最佳实践
  • git 常用命令
  • golang 发送GET和POST示例
  • MD5加密原理解析及OC版原理实现
  • vue总结
  • 编写符合Python风格的对象
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 好的网址,关于.net 4.0 ,vs 2010
  • 简单数学运算程序(不定期更新)
  • 跨域
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 网页视频流m3u8/ts视频下载
  • 再谈express与koa的对比
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​linux启动进程的方式
  • #{}和${}的区别?
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #LLM入门|Prompt#3.3_存储_Memory
  • %@ page import=%的用法
  • (2.2w字)前端单元测试之Jest详解篇
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (学习日记)2024.02.29:UCOSIII第二节
  • (循环依赖问题)学习spring的第九天
  • (转)JAVA中的堆栈
  • .bat文件调用java类的main方法
  • .Net - 类的介绍
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net FrameWork总结
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)