软件工程-第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.mzph.cn/bicheng/34232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 NFTScan NFT API 在 Sei 网络上开发 Web3 应用

Sei Network 是一个专为交易而设计的 Layer 1 区块链。它建立在 Cosmos SDK 上,使用一种称为 Tendermint BFT 的新型共识机制。不仅专攻 DeFi 领域的加密资产交易,更在游戏、社交媒体和 NFTs 等热门 verticals 构建了多功能区块链生态系统。Sei Network …

Day15—热点搜索词统计

一、要求 根据用户上网的搜索记录对每天的热点搜索词进行统计,以了解用户所关心的热点话题。 要求完成:统计每天搜索数量前3名的搜索词(同一天中同一用户多次搜索同一个搜索词视为1次)。 二、数据 三、配置scala环境 1.下载sca…

网站制作和推广

在当今数字化时代,拥有一个网站对于企业的发展和推广来说是至关重要的。网站既可以作为一个企业的形象展示,也可以作为一个销售渠道,更可以作为一个品牌传播的平台。在本文中,我们将讨论网站制作和推广的重要性,以及一…

08较成功的降低干扰获得较好的波形

08较成功的降低干扰获得较好的波形 波形数据当前数据调整后的数据后续 结语其他以下是废话 试验,本身就是一个摸索的过程,在上一阶段的试验中,我们优化了采集装置,更换了导电性较好的电极。 目前数据美观程度较之前提升了不少&…

ViT:3 Compact Architecture

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-27含并行连结的网络GoogLeNet

27含并行连结的网络GoogLeNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as pltclass Inception(nn.Module):# c1--c4是每条路径的输出通道数def __init__(self, in_channels, c1, c2, c3, …

【kaggle数据集无法下载解决办法】

kaggle数据集无法下载的解决办法 当我们在做机器学习相关问题的时候,需要到kaggle网站上下载数据集,但是很多时候速度很慢或者连接超时等问题,此时解决办法如下: 在本地安装Kaggle API包 打开终端输入如下指令: pip i…

vscode使用内置插件断点调试vue2项目

1、首先项目中要开启source-map 在vue.config.js 文件中 module.exports {configureWebpack: {devtool: process.env.NODE_ENV ! "production" ? "source-map" : ,} }2、项目根目录新建.vscode/launch.js文件 {"configurations": [{"ty…

解析JavaScript中逻辑运算符和||的返回值机制

本文主要内容:了解逻辑运算符 &&(逻辑与)和 ||(逻辑或)的返回值。 在JavaScript中,逻辑运算符 &&(逻辑与)和 ||(逻辑或)的返回值可能并不总…

GPT-5 一年半后发布?迎接AI技术变革

人工智能的快速发展正在深刻改变我们的世界。作为AI技术的前沿代表,OpenAI的GPT系列一直备受关注。最新消息显示,GPT-5将于一年半后发布,并被期望达到“博士级”的智能水平。GPT-5的到来不仅预示着AI在技术上的飞跃,也意味着它将在…

浏览器提升编译速度小技巧(一)- 防病毒排除

1.引言 在Chrome开发过程中,编译速度是影响开发效率的关键因素之一。编译一个大型项目如Chrome,往往需要处理大量的代码文件和依赖库,这个过程既复杂又耗时。因此,任何能够提升编译速度的技巧,都能显著提高开发效率&a…

Dubbo本地调试解决方案

有三种方式:原文链接 本文尝试使用了原作者推荐的第二种方式,在启动本地的服务时加入全局版本号的参数 -Ddubbo.service.versiontest同时需要修改消费者侧API的版本号。 DubboReference(version "test")private IContentPortraitService contentPortra…

TypeError: Cannot set properties of null (setting ‘innerText‘)?

TypeError: Cannot set properties of null (setting innerText) 解释: 这个错误表明你尝试给一个null值的对象设置innerText属性。在JavaScript中,null表示一个空值或者“没有对象”,因此不能对其进行属性设置操作。 解决方法&#xff1a…

微信小程序的媒体组件

微信小程序中的媒体组件主要包括音频组件 和视频组件 ,它们可以帮助开发者在小程序中嵌入和播放多媒体内容。以下是对这两个组件的详细介绍: 音频组件 组件用于在小程序中播放音频文件。它支持多种配置选项和事件处理。 属性 src: 音频资源的 URL 地址。…

Python-题库篇-基础

文章目录 Python-题库篇-基础题目001: 在Python中如何实现单例模式。题目002:不使用中间变量,交换两个变量a和b的值。题目003:写一个删除列表中重复元素的函数,要求去重后元素相对位置保持不变。题目004:假设你使用的是…

排序题目:丢失的数字

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 解法四思路和算法代码复杂度分析 解法五预备知识思路和算法代码复杂度分析 题目 标题和出处 标题:丢失…

osg::Stats类用法及该类源码剖析

1. 概述 Stats是英文单词statistics的简写。顾名思义,就知道osg::Stats是osg中用来统计某些信息的类,如:帧率等,在osg中很多地方用到该类统计某些信息,如下代码是摘自osg的Viewer::eventTraversal()函数,该…

CentOS7.6安装RabbitMQ

前言:因为RabbitMQ是ERlang语言编写所以要先安装ERlang再安装RabbitMQ 安装ERlang 借鉴前辈原文地址:https://www.cnblogs.com/fengyumeng/p/11133924.html 第一步:安装依赖 yum -y install gcc glibc-devel make ncurses-devel open…

快速上手 Spring Boot:基础使用详解

快速上手 Spring Boot:基础使用详解 文章目录 快速上手 Spring Boot:基础使用详解1、什么是SpringBoot2、Springboot快速入门搭建3、SpringBoot起步依赖4、SpringBoot自动配置:以tomcat启动为例5、SpringBoot基础配置6、yaml7、多环境开发配置…

使用Ghostscript将PostScript(.ps)文件转换为PDF文件格式

如何使用Ghostscript将PostScript文件转换为PDF文件格式: /* Example of using GS DLL as a ps2pdf converter. */#if defined(_WIN32) && !defined(_Windows) # define _Windows #endif #ifdef _Windows /* add this source to a project with gsdll32.dll, or comp…