软件工程-第4章结构化编码和测试

软件的实现阶段:软件编码,单元测试和综合测试。

软件编码是对软件设计的进一步具体化,其任务是将设计表示变换成用程序设计语言编写的程序。

软件测试是软件质量保证的重要手段,要成功开发出高质量的软件产品,必须认真计划并彻底地进行软件测试。

4.1软件编码

4.1.1程序设计语言

用于书写计算机程序的语言。

按照级别可以分为两大类:

①低级语言:包括机器语言和汇编语言,优点是执行速度快,但代码编写难度较大,可读性较差。另外,用它编写的程序与具体的机器有关,想要运行在不同的机器上,必须重写,但是在实现与硬件系统的接口部分时,易于实现且实现效率高。

机器语言是机器能直接识别的程序设计语言或指令代码。无须经过翻译。

汇编语言也称符号语言。要通过汇编过程转换成机器指令。

②高级语言:在一定程度上与具体机器无关,是有可移植性,更接近人的思维,易于编程,阅读和修改。但由于运行时需将其翻译成机器语言,运行效率相对较低,对硬件的可控性相对于低级语言较弱。

程序设计语言的选择:

①应用领域的不同决定选择的语言。

②系统用户的要求。

③程序员的经验和知识。

④开发和维护成本。

⑤软件可移植性要求。

4.1.2程序设计风格

①源程序文档化:包括标识符的命名,使用注释,程序的视觉组织。

标识符的命名应具有精练的意义,明确的名字,不与关键词同名。

使用注释应有助于对程序的阅读理解,不宜太多也不能太少。

程序的视觉组织:恰当地利用空格,空行和缩进来增加程序的层次性和清晰度。

②数据说明标准化:为使程序中的数据说明更易于理解和维护。应数据说明的次序规范化,说明语句中变量安排有序化,使用注释说明复杂数据结构。

③语句结构简单化。

④输入/输出方法规范化:

结构化程序设计应遵循以下重要原则:

使用语言中的顺序,选择,重复等有限的基本控制结构表示程序逻辑。

选用的控制结构只准许有一个入口和一个出口。

复杂结构应该用基本控制结构进行组合嵌套来实现。

4.1.3程序效率分析

复杂性度量解决多可选方案问题与在程序编写完成后,测试,评价程序。

程序复杂性主要指摸块内程序的复杂性其度量方法一般分为以下两种:

①代码行度量法:统计一个程序摸块的源代码行数目,并以源代码行数作为程序复杂性的度量,适用于控制结构比较简单的模块。

②McCabe度量法:基于程序控制流。使用程序控制流图进行McCabe度量。仅仅描绘程序的控制流程。

4.2软件测试概述

软件测试是为了发现错误而执行程序的过程。

4.2.1测试的目的和原则

两种不同的测试目的:

①从用户角度出发,他们普遍希望通过软件测试暴露出软件中隐藏的错误和缺陷,以考虑是否可以接受该产品。

②从软件开发者的角度出发,他们则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立用户对软件质量的信心。

软件测试目的观点:①测试是程序的执行过程,目的在于发现错误。②一个好的测试用例在于能发现至今未发现的错误。③一个成功的测试是发现了至今未发现错误的测试。

软件测试的原则:①应当把尽早地,不断地进行软件测试作为软件开发者的座右铭。

②测试用例应由测试输入数据和与之对应的预期输出结果两部分组成。

③应由第三方人员从事测试工作。

④在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。

⑤注意测试中的错误群集现象。

⑥严格执行测试计划,排除测试的随意性。

4.2.2测试的方法和步骤

1,软件测试方法

黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。不考虑程序内部的逻辑结构和内部特性。

白盒测试:已知产品的内部工作过程,可以进行测试证明每种内部动作是否按设计规格要求正常进行。对软件的过程性细节做细致检查。允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例。

2,软件测试步骤

自底向上:从小规模测试开始逐步进行大规模测试。首先重点测试单个程序模块,然后重点转移到正在集成的模块组,接着对整个系统进行测试,最后由用户进行系统的验收测试。一般分为单元测试,集成测试,系统测试和验收测试。

4.3黑盒测试

着重测试软件的功能需求,是在程序接口上进行的测试,主要是为了发现以下错误:

①是否有功能错误,功能遗漏。

②是否能正确地接收输入数据并产生正确的输出结果。

③是否有数据结构错误或外部信息访问错误。

④是否有程序初始化和终止方面的错误。

黑盒穷举测试对所有输入数据的各种可能值的排列组合都进行测试,来检查程序是否都能产生正确的输出。

具体的黑盒测试用例设计方法包括等价类划分法,边界值分析法,错误推测法等。

①等价类划分法:把程序的输入分为若干类,然后在每一类中选取少数代表性数据作为测试用例,每一类的代表性数据在测试中的作用等价于这一类中的其他值。

②边界值分析法:对等价类划分方法的补充。针对各种边界情况设计测试用例。

③错误推测法:基于经验和直觉推测程序中所有可能存在的各种缺陷和错误,从而有针对性地设计测试用例的方法。

4.4白盒测试

目的:①保证程序中所有关键路径都被测试到,防止系统投入使用后用户发现系统问题。

②便于衡量测试的完整性,即是否把某个功能点的所有可能情况都测试到。

③可以测试到程序中的所有真分支,假分支。

④检查局部数据结构的有效性。

⑤检查程序的异常处理能力。

⑥检查代码是否遵循编码规范。

总体上分为静态白盒测试和动态白盒测试两大类。

①静态白盒测试是一种不通过执行程序而进行测试的技术,其关键功能是检查软件的表示和描述是否一致。一般包括桌面检查,代码走查和代码审查。

②动态白盒测试将程序在受控的环境下使用特定的测试用例进行正式的运行,显示了一个系统在检查状态下是否正确。最重要的技术是路径和分支测试。

穷举测试难以实现,一般可采用逻辑覆盒的白盒测试,即孝察用测试数据运行被测程序对程序逻辑的覆盖程度。可由弱到强分为语句覆盖,判定覆盖,条件覆盖,判定-条件覆盖,条件组合覆盖和路径覆盖。

正确的白盒测试要先从代码分析入手,根据不同的语句执行情况具体的测试场景选择适合的覆盖方式。

①语句覆盖:设计若干个测试用例,运行被测程序,使每个可执行语句至少执行一次。

②判定覆盖:设计若干个测试用例,运行被测程序,使程序中每个判断的取真分支和取假分支至少经历一次。

③条件覆盖:设计若干个测试用例,运行被测程序,使程序中每个判断的所有条件的每种可能取值至少执行一次。

④判定-条件覆盖:设计足够的测试用例,使判断中每个条件的所有可能取值至少执行一次。

⑤条件组合覆盖:设计足够的,测试用例,运行被测程序,使每个判断的所有可能的条件取值组合至少执行一次。

4.5单元测试

①内容:模块接口测试,局部数据结构测试,重要路径测试,错误处理测试,边界测试。

②步骤:编码阶段进行。辅助模块:驱动模地,桩模块。进行单元测试时,应为测试模块开发一个驱动模块和若干桩模块。

4.6集成测试

目标:按照设计要求使用那些通过单元测试的构件来构造程序结构。①功能性测试:黑盒测试技术针对被测模块的接口规格说明进行测试。②非功能性测试:对模块的性能或可靠性进行测试。

集成方式:①一次性集成方式:首先对每个模块分别进行模块测试,然后再把所有模地组装在一起进行测试,最终得到要求的软件系统。

②增量式集成方式:先对各个模块进行模块测试,然后将这些模块逐步组装成较大的系统,在组装的过程中边连接边测试,以发现连接过程中产生的问题,最后通过增量逐步组装成为要求的软件系统。有自顶向下,自底向上两种增量方式。

4.7系统测试

①功能测试,②回归测试,③可靠性测试,④压力测试,⑤性能测试,⑥恢复测试,⑦启动/停止测试,⑧配置测试等

 

 

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

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

相关文章

React尚硅谷115-126(setState、Hooks、Fragment、context、组件优化、renderprops

122,context 只能用value传,可以传对象,字符串 一种组件间通信方式, 常用于【祖组件】与【后代组件】间通信 使用: 创建Context容器对象: const XxxContext React.createContext() 渲染子组时,外面包…

SpringBoot的Web开发支持【超详细【一篇搞定】果断收藏系列】

Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(“MyInterceptor.afterCompletion”); } } 使用Java的形式配置拦截器的拦截路径 在WebMvcConfig…

零门槛用AI,302.AI让人工智能变得简单易用

当下人工智能火爆,提到AI,几乎每个人都能说上几句,但是你真的会使用AI吗? 当涉及到如何实际使用AI时,许多人可能会觉得它太过高深莫测,从而产生一种距离感,不知如何开始。我和大家也一样&#x…

Apple - Game Center Programming Guide

本文翻译整理自:Game Center Programming Guide( Updated: 2016-06-13 https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008304 文章…

jemeter基本使用

后端关验签,设置请求头编码和token 配置编码和token

【分布式事务】Seata AT实战

目录 Seata 介绍 Seata 术语 Seata AT 模式 介绍 实战(nacos注册中心,db存储) 部署 Seata 实现 RM 实现 TM 可能遇到的问题 1. Seata 部署成功,服务启动成功,全局事务不生效 2. 服务启动报错 can not get …

c++分隔字符串

可以使用getline函数。 有两个版本: 至于为什么可以使用getline函数返回值作为while的判断条件,cprimer中表述如下:

[MySql]两阶段提交

文章目录 什么是binlog使用binlog进行恢复的流程 什么是redolog缓冲池redologredolog结构 两阶段提交 什么是binlog binlog是二进制格式的文件,用于记录用户对数据库的修改,可以作用于主从复制过程中数据同步以及基于时间点的恢复(PITR&…

Docker(六)-本地镜像发布到私有库

1.下载镜像Docker Registry 用于搭建私人版本Docker Hub docker pull registry2.运行私有库Registry 运行私有库Registry,相当于本地有个私有Docker hubdocker run -d -p hostPort:containerPort -v 【宿主机目录】:【容器目录】 --privilegedtrue 【私有库镜像】…

C++使用Poco库封装一个FTP客户端类

0x00 Poco库中 Poco::Net::FTPClientSession Poco库中FTP客户端类是 Poco::Net::FTPClientSession , 该类的接口比较简单。 上传文件接口: beginUpload() , endUpload() 下载文件接口: beginDownload() , endDownload() 0x01 FTPCli类说明 FTPCli类…

若依-前后端分离项目学习

第一天(6.24) 具体参考视频 b站 楠哥教你学Java 【【开源项目学习】若依前后端分离版,通俗易懂,快速上手】 https://www.bilibili.com/video/BV1HT4y1d7oA/?share_sourcecopy_web&vd_sourcecd9334b72b49da3614a4257…

“湖北建筑安全员C证考试合格证书不能打印?可能是你犯了这个错误!“

"湖北建筑安全员C证考试合格证书不能打印?可能是你犯了这个错误!" 湖北建筑安全员C证考试合格证书不能打印咋回事 目前建筑安全员C证都是全国联网的,在湖北考的建筑安全员C证在外省也可以正常使用or调转。全国工程质量安全监管信息…

【扫雷游戏】C语言详解

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

从基础到高级:视频直播美颜SDK的开发教学

本篇文章,小编将从基础到高级,详细讲解视频直播美颜SDK的开发过程,帮助开发者更好地掌握这一技术。 一、基础知识 什么是视频直播美颜SDK? 视频直播美颜SDK包含了一系列用于视频处理的功能模块,特别是美颜效果的实现…

封装vuetify3中v-time-picker组件,并解决使用时分秒类型只能在修改秒之后v-model才会同步更新的问题

目前时间组件还属于实验室组件&#xff0c;要使用需要单独引入&#xff0c;具体使用方式查看官网 创建公共时间选择器组件 common-time-pickers.vue 子组件页面 <template><div><v-dialog v-model"props.timeItem.isShow" activator"parent&q…

对于GPT-5的些许期待

目录 1.概述 2.GPT-5技术突破预测 3.智能系统人类协作 3.1. 辅助决策 3.2. 增强创造力 3.3. 处理复杂任务 3.4.人机协同的未来图景 4.迎接AI技术变革策略 4.1.教育方面 4.2.职业发展方面 4.3.政策制定方面 4.4.人才与技能培养 1.概述 GPT-5作为下一代大语言模型&a…

ONLYOFFICE 8.1全新升级,智能办公体验再升级,引领未来工作新潮流!

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ONLYOFFICE 8.1 &#x1f4d2;1. ONLYOFFICE简介&#x1f4d9;2. ONLYOFFICE特点&#x1f4d5;3. ONLYOFFICE功能⛰️PDF 文件编辑器&#x1…

【Android】实现图片和视频混合轮播(无限循环、视频自动播放)

目录 前言一、实现效果二、具体实现1. 导入依赖2. 布局3. Banner基础配置4. Banner无限循环机制5. 轮播适配器6. 视频播放处理7. 完整源码 总结 前言 我们日常的需求基本上都是图片的轮播&#xff0c;而在一些特殊需求&#xff0c;例如用于展览的的数据大屏&#xff0c;又想展…

三维点云目标识别对抗攻击研究综述

源自&#xff1a;电子与信息学报 作者&#xff1a;刘伟权 郑世均 郭宇 王程 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 当前&#xff0c;人工智能系统在诸多领域都取得了巨大的成功&#xff0c;其中深度学…

云原生架构:未来应用程序设计和部署的革新

目录 前言1. 云原生架构的概述1.1 什么是云原生架构1.2 云原生架构的核心理念 2. 云原生架构的核心特征2.1 容器化应用2.2 微服务架构2.3 自动化管理 3. 云原生架构的优势3.1 弹性和可伸缩性3.2 高可用性和容错性3.3 快速交付和持续部署 4. 实施云原生架构的关键技术4.1 容器编…