软件工程知识梳理5-实现和测试
编码和测试统称为实现。
编码:把软件设计结果翻译成某种程序设计语言书写的程序。是对设计的进一步具体化,是软件工程过程的一个阶段。
测试:单元测试和集成测试,软件测试往往占软件开发总工作量的40%以上。
编码:选择编程语言、规范编码风格
测试方法:白盒测试(结构测试)、黑盒测试(功能测试)
测试步骤:
- 模块测试
- 子系统测试
- 系统测试
- 验收测试
- 平行运行
单元测试:一般使用白盒测试、结合详细设计文档对重要模块进行测试。
- 模块接口
- 边界条件
- 出错处理通路
- 重要的执行通路
- 局部数据结构
代码审查:本人(非正式)和审查小组(正式)。
审查小组参与者:组长、程序的设计者、程序的编写者、程序的测试者(如果一个人即是程序的设计者又是编写者,或既是编写者又是测试者,审查小组种应该再增加一个程序员)
——————————————————————————————————
集成测试:
非渐增式测试方法:先进行模块测试,再把所有模块按设计要求结合成索要的程序进行测试。(测试时会遇到很多错误,改正错误也很困难,测试者面对的情况十分复杂、庞大的程序想要诊断定位一个错误非常困难)
渐增式测试方法:把程序划分成小段来构造和测试,里面包含单元测试和集成测试,测试完以后再把下一个应该测试的模块结合进来测试,每次增加一个模块的方法进行测试。(普遍采用渐增式测试方法)
渐增式集成策略有2种:自顶向下集成和自底向上集成,各自的优缺点不一样,目前基本都是混合使用两种集成策略。
回归测试:集成测试过程中新模块结合进来时,程序就发生了变化,此时数据流可能发生变化,这里就应该进行回归测试,重新执行已经做过的测试的某个子集,保证上述这些变化没有带来非预期的副作用。(这里要注意的式,回归测试用例的数量可能会变得非常大,因此,应该把回归测试集设计成只包括可以检测程序每个主要功能中的一类或多类错误的测试用例)
确认测试:也称验收测试,目标式验证软件的有效性。
软件有效性:如果软件的功能和性能如同用户所合理期待的那样就是有效的。
确认测试范围:必须用户积极参与并以用户为主,用户应该参与设计测试方案,使用用户界面输入测试数据并且分析评价测试的输出结果。此阶段一般使用黑盒测试。
软件配置复查:保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。
Alpha测试:用户在开发者场所进行,并且在开发者的指导下尽心个测试。开发者负责记录测试结果。
Beta测试:在软件的最终用户的一个或多个客户场所进行。用户记录测试结果并报告给开发者。
白盒测试技术:
逻辑覆盖:
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 点覆盖
- 边覆盖
- 路径覆盖
控制结构测试:
- 基本路径测试
- 条件测试
- 循环测试
——————————————————————————————————
黑盒测试技术
黑盒测试着重测试软件功能。力图发现以下类型的错误:
- 功能不正确或遗漏了功能;
- 界面错误。
- 数据结构错误或外部数据库访问错误
- 性能错误
- 初始化和终止错误
- 等价划分:
把程序的输入域划分为若干个数据类,据此导出测试用例。一个理想的测试用例能独自发现一类错误。
- 边界值分析:
- 错误推测:
调试
调试时在测试发现错误之后排除错误的过程。调试就是把症状和原因联系起来的尚未被人深入认识的智力过程。
调试途径:
- 蛮干法
- 回溯法
- 原因排除法
软件可靠性
可靠性:程序在给定的事件间隔内,按照规格说明书的规定成功地运行地概率。
可用性:程序在给定地时间点,按照规格说明书地规定,成功地运行的概率。
估算平均无故障时间的方法
——————————————————————————————————
小结
实现包括编码和测试两个阶段。
按照传统的软件工程方法学,编码是在对软件进行了总体设计和详细设计之后进行的,它只不过是把软件设计的结果翻译成用某种程序设计语言书写的程序,因此,程序的质量基本上取决于设计的质量。但是,编码使用的语言﹐特别是写程序的风格,也对程序质量有相当大的影响。
大量实践结果表明,高级程序设计语言较汇编语言有很多优点。因此,除非在非常必要的场合,一般不要使用汇编语言写程序。至于具体选用哪种高级程序设计语言,则不仅要考虑语言本身的特点,还应该考虑使用环境等一系列实际因素。
程序内部的良好文档资料,有规律的数据说明格式,简单清晰的语句构造和输入输出格式等,都对提高程序的可读性有很大作用,也在相当大的程度上改进了程序的可维护性。
目前软件测试仍然是保证软件可靠性的主要手段。测试阶段的根本任务是发现并改正软件中的错误。
软件测试是软件开发过程中最艰巨最繁重的任务,大型软件的测试应该分阶段地进行,通常至少分为单元测试﹑集成测试和验收测试3个基本阶段。
设计测试方案是测试阶段的关键技术问题,基本目标是选用最少量的高效测试数据,做到尽可能完善的测试,从而尽可能多地发现软件中的问题。
应该认识到,软件测试不仅仅指利用计算机进行的测试,还包括人工进行的测试(例如,代码审查)。两种测试途径各有优缺点,互相补充,缺一不可。
白盒测试和黑盒测试是软件测试的两类基本方法,这两类方法各有所长,相互补充。通常﹐在测试过程的早期阶段主要使用白盒方法﹐而在测试过程的后期阶段主要使用黑盒方法。为了设计出有效的测试方案,软件工程师应该深入理解并坚持运用关于软件测试的基本准则。
设计白盒测试方案的技术主要有,逻辑覆盖和控制结构测试;设计黑盒测试方案的技术主要有,等价划分.边界值分析和错误推测。
在测试过程中发现的软件错误必须及时改正,这就是调试的任务。为了改正错误,首先必须确定错误的准确位置,这是调试过程中最困难的工作,需要审慎周密的思考和推理。为了改正错误往往需要修正原来的设计,必须通盘考虑统筹兼顾,而不能“头疼医头、脚疼医脚”,应该尽量避免在调试过程中引进新错误。
测试和调试是软件测试阶段中的两个关系非常密切的过程,它们往往交替进行。程序中潜藏的错误的数目,直接决定了软件的可靠性。通过测试可以估算出程序中剩余的错误数。根据测试和调试过程中已经发现和改正的错误数,可以估算软件的平均无故障时间;反之,根据要求达到的软件平均无故障时间,可以估算出应该改正的错误数,从而能够判断测试阶段何时可以结束。
相关文章:
软件工程知识梳理5-实现和测试
编码和测试统称为实现。 编码:把软件设计结果翻译成某种程序设计语言书写的程序。是对设计的进一步具体化,是软件工程过程的一个阶段。 测试:单元测试和集成测试,软件测试往往占软件开发总工作量的40%以上。 编码:选…...
WebRTC系列-自定义媒体数据加密
文章目录 1. 对外加密接口2. 对外加密实现前面的文章都有提过WebRTC使用的加密方式是SRTP这个库提供的,这个三方库这里就不做介绍,主要是对rtp包进行加密;自然的其调用也是WebRTC的rtp相关模块;同时在WebRTC里也提供一个自定义加密的接口,本文将围绕这个接口做介绍及分析;…...
golang的sqlite驱动不使用cgo实现 更换gorm默认的SQLite驱动
golang的sqlite驱动不使用cgo实现 更换gorm默认的SQLite驱动 最近在开发一个边缘物联网程序时使用Golang开发,用到GORM来操作SQLite数据库,GORM默认使用gorm.io/driver/sqlite这个库作为SQLite驱动,该库用CGO实现,在使用过程中遇…...
Linux 系统 ubuntu22.04 发行版本 固定 USB 设备端口号
前言: 项目中为了解决 usb 设备屏幕上电顺序导致屏幕偏移、触屏出现偏移等问题。 一、方法1:使用设备 ID 号 步骤: 查看 USB 设备的供应商ID和产品ID Bus 001 Device 003: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Te…...
Vue - 面试题持续更新
1.Vue路由模式 总共有Hash和History两种模式 Hash模式:在浏览器里面的符号 “#”,以及"#"后面的字符称之为Hash,用window.location.hash读取。 Hash模式的特点:hash是和浏览器对话的,和服务器没有关系&…...

Django的web框架Django Rest_Framework精讲(二)
文章目录 1.自定义校验功能(1)validators(2)局部钩子:单字段校验(3)全局钩子:多字段校验 2.raise_exception 参数3.context参数4.反序列化校验后保存,新增和更新数据&…...

VR视频编辑解决方案,全新视频内容创作方式
随着科技的飞速发展,虚拟现实(VR)技术正逐渐成为各个领域的创新力量。而美摄科技,作为VR技术的引领者,特别推出了一套全新的VR视频编辑方案,为企业提供了一个全新的视频内容创作方式。 美摄科技的VR视频编…...

有趣的CSS - 输入框选中交互动效
页面效果 此效果主要使用 css 伪选择器配合 html5 required 属性来实现一个简单的输入框的交互效果。 此效果可适用于登录页入口、小表单提交等页面,增强用户实时交互体验。 核心代码部分,简要说明了写法思路;完整代码在最后,可直…...

Unknown custom element:<xxx>-did you register the component correctly解决方案
如图所示控制台发现了爆红(大哭): 报错解释: 当我们看到报错时,我们需要看到一些关键词,比如显眼的“component”和“name”这两个单词, 因此我们就从此处切入,大概与组件有关系。…...

计算机网络自顶向下Wireshark labs-HTTP
我直接翻译并在题目下面直接下我的答案了。 1.基本HTTP GET/response交互 我们开始探索HTTP,方法是下载一个非常简单的HTML文件 非常短,并且不包含嵌入的对象。执行以下操作: 启动您的浏览器。启动Wireshark数据包嗅探器,如Wir…...
解决pandas写入excel时的ValueError: All strings must be XML compatible报错
报错内容: ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters 报错背景 用pands批量写入excel文件,发生编码报错。检索了很多方案,都不能解决。 导致报错的原因是存在违法字符&…...
华为手表应用APP开发:watch系列 GT系列 1.配置调试设备
表开发:GT3(1)配置调试设备 初环境与设备获取手表UUID登录 AppGallery Connect 点击用户与访问初 希望能写一些简单的教程和案例分享给需要的人 鸿蒙可穿戴开发 支持外包开发:xkk9866@yeah.net 环境与设备 系统:window 设备:HUAWEI WATCH 3 Pro 开发工具:DevEco St…...

Vue(十九):ElementUI 扩展实现树形结构表格组件的勾父选子、半勾选、过滤出半勾选节点功能
效果 原理分析 从后端获取数据后,判断当前节点是否勾选,从而判断是否勾选子节点勾选当前节点时,子节点均勾选全勾选与半勾选与不勾选的样式处理全勾选和全取消勾选的逻辑筛选出半勾选的节点定义变量 import {computed, nextTick, reactive, ref} from vue; import {tree} f…...

SpringBoot RestTemplate 设置挡板
项目结构 代码 BaffleConfig /*** Description 记录配置信息* Author wjx* Date 2024/2/1 14:47**/ public interface BaffleConfig {// 是否开启挡板的开关public static boolean SWITCH true;// 文件根目录public static String ROOT_PATH "D:\\TIS\\mock";// …...

arcgis javascript api4.x加载非公开或者私有的arcgis地图服务
需求: 加载arcgis没有公开或者私有的地图服务,同时还想实现加载时不弹出登录窗口 提示: 下述是针对独立的arcgis server,没有portal的应用场景; 如果有portal可以参考链接:https://mp.weixin.qq.com/s/W…...

2024年美赛数学建模A题思路分析 - 资源可用性和性别比例
# 1 赛题 问题A:资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外,但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1:1,但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…...
UDP和TCP的区别和联系
传输层:定义传输数据的协议端口号,以及流控和差错校验。 协议有:TCP、UDP等 UDP和TCP的主要区别包括以下几个方面: 1、连接性与无连接性:TCP是面向连接的传输控制协议,而UDP提供无连接的数据报服务。这意…...

delete、truncate和drop区别
一、从执行速度上来说 drop > truncate >> DELETE 二、从原理上讲 1、DELETE DELETE from TABLE_NAME where xxx1.1、DELETE属于数据库DML操作语言,只删除数据不删除表的结构,会走事务,执行时会触发trigger( 触发器…...

946. 验证栈序列
946. 验证栈序列 描述 : 给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。 题目 : LeetCode 94…...

Linux系统管理和Shell脚本笔试题
1、写一个sed命令,修改/tmp/input.txt文件的内容,要求:(1) 删除所有空行;(2) 在非空行前面加一个"AAA",在行尾加一个"BBB",即将内容为11111的一行改为:AAA11111BBB #写入内…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...