软件工程导论(四)软件编码测试与维护

一、软件编程

1.1良好的编程习惯

变量命名有意义并且使用统一的命名规则
编写自文档代码(序言性注释 or 行内注释)
提前进行可维护性考量(可以用常量的方式存在的数值最好以变量的方式存在)
良好的视觉安排可以提高代码的可读性(缩进/空行)

1.2代码集成

1.2.1一次性集成

驱动模块和存根模块

在这里插入图片描述

问题:

  1. 格外的驱动存根编写
  2. 错误隔离

1.2.2系统集成(SQA团队)

自顶向下集成

bfs和dfs的过程都是可以的
bfs更加方便控制系统的逻辑结构
dfs能够尽早的实现某一个分支的功能在这里插入图片描述

在这里插入图片描述

广度优先:控制整个系统的逻辑结果

深度优先:能尽早实现某个功能

优点:

  • 错误隔离
  • 存根模块不被浪费
  • 逻辑正确
  • 能够尽早发现设计(顶层)的错误
  • 逻辑组件的测试更加充分

缺点:

  • 较低层的软件测试的比较晚,而且测试不够充分

自底向上

bfs和dfs的过程都是可以的

优点:

  • 充分测试底层的重用概论非常大的操作组件
  • 驱动模块不用编写
  • 错误隔离

缺点:

  • 设计错误可能会发现的比较晚

三明治集成

逻辑组件自顶向下集成
操作组件自底向上集成
最终二者在接口处集成

面向对象过程中对对象进行自底向上,其他进行自顶向下

二、软件测试

软件测试过程遵循“自底向上,逐步集成”的方式,即从小规模测试开始,逐步进行大规模测试。

2.1软件测试分类

  • 黑盒测试

按照规格进行测试 (数据驱动、功能性测试或输入/输出驱动测试),忽略代码 - 使用规范来选择测试案例

  • 白盒测试

测试到代码 (逻辑驱动、结构化或面向路径的测试)- 忽略规范 - 使用代码来选择测试案例

通过工件的每个路径必须至少执行一次

检测了所有路径也不能证明程序就是正确的

结论

规格测试,代码测试,随机测试都不可靠

2.2黑盒测试(用户)

避免数据覆盖带来的庞大测试量(单元测试)

  • 等效值测试
  • 边界值分析测试

基于黑盒测试进行功能测试

2.3白盒测试(开发者)

  • 语句覆盖

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

  • 分支覆盖

不仅每个语句至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次

  • 条件覆盖

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

  • 分支+条件覆盖

选择足够多的测试数据,使判定表达式中的每个条件都取到各种可能的结果,而且每个判定表达式也都取到各种可能的结果。它同时满足判断覆盖和条件覆盖

  • 条件组合覆盖

选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。满足条件组合覆盖,也一定满足判定覆盖、条件覆盖和判断/条件覆盖

  • 路径覆盖

选取足够多的测试数据,使程序的每条可能路径都至少执行一次,如果程序图中有环,则要求每个环至少经过一次

总结

原则上进行语句覆盖,即每个处理数据的语句都覆盖一遍

语句覆盖和分支覆盖都不能检查出逻辑判断存在的问题

用例满足能条件覆盖又能分支覆盖,但是还是不能检查出逻辑判断存在问题

2.4单元测试

 2.5集成测试

2.6确认测试

2.7测试管理

SQA软件质量保证小组

  • GUI集成测试:鼠标点击、键盘输入
  • 产品测试:从用户的角度对整个产品进行测试,基于模拟数据
  • 验收测试:基于真正的用户数据(正确性、健壮性、性能、文档)(有效性

在这里插入图片描述

三、软件维护

3.1移交后的维护

广义上:整个软件声明周期过程中的维护过程
狭义上:软件完成递交之后发生的软件维护过程

  • 改正性维护:一些错误没能在验收和测试中发现,但是被用户或者维护人员发现了
  • 完善性维护:进一步提升质量引起的维护(增加功能、运行速度、优化模块的内聚耦合、优化文档、优化代码)
  • 适应性维护:因外部环境变化导致的(新的编译器、新的操作系统、新的平台)

维护工作难度最大,要求从业者了解软件全部生命周期

  • bug:小缺陷,不希望的偏差
  • defact:软件不能正确的完成需求
  • error & fault:故障,组件中异常的情况,error容易解决
  • failuer:失效,软件不具备设计的时候要求的功能
  • vulnerability:缺陷,存在于软件架构和设计中

缺陷报告:用户或维护人员需要将错误的表现和具体操作过程等信息填写到缺陷报告

3.2软件维护的特点

(1)结构化维护和非结构化维护差别巨大

  • 非结构化维护:唯一成分是程序代码,维护活动从艰苦地评价程序代码开始,需要付出很大代价
  • 结构化维护:有完整的软件配置存在,维护工作从评价设计文档开始

(2)维护的代价高昂(了解)

(3)维护存在很多问题(了解)

3.3维护管理工作

缺陷报告

由于人力物力的原因,每个缺陷有时候不能立即修复,需要进行调查管理过程

  • 提交缺陷报告
  • 查阅之前的缺陷报告,如果之前有过就直接反馈,如果没有过就修复并且找到解决方法,之后将缺陷报告、修改清单、设计文档、用户使用手册进行归档
  • 建立缺陷报告副本,并且分发给所有从业人员(修复的时间等信息),方便相同问题的统一解决

  

对软件产品的变更授权

改正性维护:

  • 指定维护人员进行分析和修复
  • 对修改进行测试,需要进行回归测试
  • 修改文档
  • 更新代码的序言注释

完善性维护 和 完善性维护:

  • 需求变更报告(需求的功能性或者性能方面的变更)

最后产品分发之前必须由SQA小组进行测试,必须遵循基线和私有副本原则

软件逆工程是一个从具体到抽象的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26326.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SOLIDWORKS技巧培训-绘制零件滚花的两种方法

最近常有朋友咨询SolidWorks零件如何做滚花的效果,下面给大家整理了绘制零件滚花的一个培训教程: 作为机械设计师,滚花应该都不陌生,真要说起来,滚花绘制其实也不算难,跟着我们一步一步来,应该…

ThreeJS 炫酷特效旋转多面体Web页 Demo 01《ThreeJS 炫酷特效制作》

本案例为一个 threejs 的特效网页,大小球体进行包裹,外球体为透明材质,但是进行了线框渲染,使其能够通过外球踢查看其内球体。 注:案例参考源于互联网,在此做代码解释,侵删 本案例除 ThreeJS 外…

chatgpt赋能python:Python如何分割列表

Python如何分割列表 介绍 在Python编程中,列表是一种非常常见的数据类型。有时候我们需要将一个大的列表分割成几个小的列表,以便更好地处理数据。Python提供了多种方法来实现这个目的。在本文中,我们将介绍Python中如何分割列表的几种方法…

活动预告 | 中国数据库联盟(ACDU)中国行定档深圳,一起揭秘数据库前沿技术

在当今数字化时代,数据库是各行各业中最核心的信息管理系统之一。随着技术的飞速发展,数据库领域也不断涌现出新的前沿技术和创新应用。数据库运维和开发人员需要紧跟前沿技术,才能保持竞争力,并实现更高效、更智能、更人性化的应…

pytorch实战 -- 神经网络

softmax的基本概念 交叉熵损失函数 模型训练和预测 在训练好softmax回归模型后,给定任一样本特征,就可以预测每个输出类别的概率。通常,我们把预测概率最大的类别作为输出类别。如果它与真实类别(标签)一致&#xff0…

Java 数组

文章目录 一、Java 数组总结 一、Java 数组 Java 语言中提供的数组是用来存储固定大小的同类型元素。 你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,…,number99。 Java 数组的声明、…

Linux内存初始化-启动阶段的内存初始化

本文代码基于ARM64平台, Linux kernel 5.15 在加载kernel 之前, kernel对于系统是有一定要求的,明确规定了boot阶段必须要把MMU关闭: arch/arm64/kernel/head.S/** Kernel startup entry point.* ---------------------------** The require…

黑马Redis视频教程实战篇(六)

目录 一、附近商户 1.1、GEO数据结构的基本用法 1.2、导入店铺数据到GEO 1.3、实现附近商户功能 二、用户签到 2.1、BitMap功能演示 2.2、实现签到功能 2.3、签到统计 2.4、关于使用bitmap来解决缓存穿透的方案 三、UV统计 3.1、HyperLogLog 3.2、测试百万数据的统…

【HarmonyOS】初识低代码平台开发元服务

【关键字】 HarmonyOS、低代码平台、元服务开发、拖拽式开发 【写在前面】 今天要分享的是HarmonyOS中的低代码开发相关的内容,低代码开发是DevEco Studio提供的一种UI界面可视化的构建方式,通过图形化的自由拖拽数据的参数化配置,可以快速…

2419286-92-1,Sulfo-Cy5.5 NHS ester,磺酸基Cyanine5.5-活性酯,用于标记抗体

Sulfo-Cyanine5.5 NHS ester,sulfo Cy5.5(Et) NHS,sulfo Cy5.5 SE,磺酸基Cy5.5-活性酯 (文章资料汇总来源于:陕西新研博美生物科技有限公司小编MISSwu)​ 产品结构式: 产品规格: 1…

SAP-MM-发票-采购附加成本处理简介

一.采购附加成本处理: 原材料的采购成本包括采购成本(采购单价*采购数量)和相关采购附加成本(运输费、保险费、报关费、仓储费、滞期费、租船费、码头费及代理费等费用),对于采购附加成本主要有…

基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建

基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建 文章目录 基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建1. 传统推荐系统模型2. 协同过滤算法3. 基于双视角图表示学习算法的模型构建3.1 数据输入3.2 双视角交互图的构建3.3 混合偏好传播策略3.4 对于双向意…

git使用X篇_2_Git全套教程IDEA版(git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容)

本文是根据以下视频及网上总结进行更新后的介绍git使用的博文。包含了git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容。 笔记来源:【尚硅谷】5h打通Git全套教程IDEA版(涵盖GitHub\Gitee码云\GitLab) 文章目录 初识 Git0、内容…

ReadDataByIdentifier(0x22)服务

ReadDataByIdentifier(0x22)服务 ReadDataByIdentifier服务允许客户端从一个或多个dataIdentifiers标识的服务器请求数据记录值。 客户端请求消息包含一个或多个两字节的dataIdentifier值,用于标识服务器维护的数据记录 允许的dataIdentifie…

Vue3小兔鲜:组合式写法入门

Vue3&#xff1a;组合式写法入门 Date: May 11, 2023 认识Vue3 1. Vue3组合式API体验 通过 Counter 案例 体验Vue3新引入的组合式API <script> export default {data(){return {count:0}},methods:{addCount(){this.count}} } </script><script setup> imp…

Linux 高级篇-定制自己的Linux 系统

Linux 高级篇-定制自己的Linux 系统 基本介绍 通过裁剪现有Linux 系统(CentOS7.6)&#xff0c;创建属于自己的min Linux 小系统&#xff0c;可以加深我们对linux 的理解。利用centos7.6&#xff0c;搭建一个小小linux 系统, 很有趣。 基本原理 启动流程介绍&#xff1a; 制…

(转载)基于混合粒子群算法的TSP问题求解(matlab实现)

1 理论基础 标准粒子群算法通过追随个体极值和群体极值完成极值寻优&#xff0c;虽然操作简单&#xff0c;且能够快速收敛&#xff0c;但是随着迭代次数的不断增加&#xff0c;在种群收敛集中的同时&#xff0c;各粒子也越来越相似&#xff0c;可能在局部最优解周边无法跳出。…

2023/5/29总结

abstract修饰符 抽象类就是当类和类之间有相同特征时&#xff0c;将这些共同的特征提取出来&#xff0c;形成的就是抽象类。 抽象类的特点&#xff1a; 抽象类和抽象方法必须使用abstract 关键字修饰&#xff1a;publicabstract class 类名 / public abstract void eat();抽象…

测评补单操作在美客多店铺及产品优化中的决定性角色:深度解读

许多经营美客多平台的商家有一种观念&#xff0c;他们认为美客多平台的规则与亚马逊有所区别。在美客多上&#xff0c;店铺比产品更重要&#xff0c;而且平台的竞争相对较小。因此&#xff0c;他们认为在美客多平台进行补单操作是不必要的。 然而&#xff0c;是否真的如此呢&a…

FM实现F4帮助系列三:弹出框多筛选条件的搜索帮助(根据搜索帮助筛选字段)...

函数&#xff1a;F4IF_GET_SHLP_DESCR F4IF_START_VALUE_REQUEST 效果图&#xff1a; 本例子代码&#xff1a; 找到需要的帮助: *& Report ZLM_TEST_045 REPORT zlm_test_045. TABLES makt. DATA: BEGIN OF str_f4, matnr TYPE matnr, maktx TYPE maktx, END OF str_f4.…