编码与测试

news2024/9/29 13:19:32

文章目录

  • 一、编码
    • 1、概念
    • 2、如何选择程序设计语言
    • 3、程序设计风格
      • (1)源程序文档化
      • (2) 数据说明
      • (3)语句构造
      • (4)输入输出
      • (5)程序效率
      • 编码时提高程序运行效率的主要规则
  • 二、软件测试基础
    • 1、软件测试的目的
    • 2、 软件测试准则
    • 3、测试方法
      • 静态测试:
      • 动态测试:
    • 4、测试步骤
    • 5、测试阶段的信息流——与测试密切相关的工作
  • 三、单元(模块)测试
    • 1、模块接口
    • 2. 局部数据结构
    • 3. 重要的执行通路
    • 4. 出错处理通路
    • 5. 边界条件
    • 单元测试的工具
    • 单元测试可以采用哪两种策略和方法?
  • 四、集成测试(测试和组装软件的系统化技术。
    • 1、渐增式测试
    • 2、自顶向下集成
    • 3、自底向上集成
    • 五、确认测试
      • Alpha和Beta测试
  • 六、白盒测试技术
    • 1、基本路径测试
  • 七、黑盒测试技术
    • 黑盒测试技术:
  • 八、调 试
  • 九、软件可靠性
    • 1、概念
    • 2、 软件的可用性 =软件系统可以使用的程度
    • 3、估算平均无故障时间


一、编码

1、概念

选择一种程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序。

2、如何选择程序设计语言

  • 大量实践结果表明,高级程序设计语言有很多优点,除非不得已才使用汇编语言。
  • 选择哪种高级语言既考虑到语言本身的特点,又要考虑到使用环境等实际因素。

3、程序设计风格

(1)源程序文档化

  • 标识符的命名

标识符名包括模块名、变量名、常量名、标号名、子程序名、缓冲区名等。
这些名字应能反映它所代表的实际东西,应有一定实际意义。例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。
名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但要注意缩写规则要一致,并且要给每一个名字加注释。同时,在一个程序中,一个变量只应用于一种用途。

  • 安排注释

夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。
注释决不是可有可无的。
一些正规的程序文本中,注释行的数量占到整个源程序的1/3到1/2,甚至更多。
注释分为序言性注释和功能性注释。

  • 程序的视觉组织

恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如 ,将表达式 (A<-17)ANDNOT(B<=49)ORC写成 (A<-17) AND NOT (B<=49) OR C
自然的程序段之间可用空行隔开。
对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行(向右缩格)。使程序的逻辑结构更加清晰。

(2) 数据说明

  • 数据说明的次序应该标准化。有次序的优点:易查阅、测试、调试和维护。
  • 当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。
  • 如果设计时使用了一个复杂的数据结构,则应该用注解说明该数据结构的方法和特点。

(3)语句构造

应该遵循的原则是:

  • 每个语句都应该简单而直接,不能为了提高效率而使程序变得过分复杂;
  • 也不要刻意追求技巧性,使程序编写得过于紧凑。

(4)输入输出

在设计和编写程序时应该考虑下述有关输入输出风格的规则:

  • ①对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性。

  • ②检查输入项的各种重要组合的合法性,必要时报告输入状态信息。

  • ③使得输入的步骤和操作尽可能简单,并保持简单的输入格式。

  • ④输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目。

  • ⑤在交互式输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明格式和取值范围。

  • ⑥给所有的输出加注解,并设计输出报表格式.

(5)程序效率

程序的效率是指程序的执行速度及程序所需占用的内存存储空间。

提高程序效率的几条准则:

  • ①效率是一个性能要求,应当在需求分析阶段给出。软件效率以需求为准,不应以人力所及为准。
  • ②好的设计可以提高效率。
  • ③程序的效率与程序的简单性相关,不要牺牲程序的清晰性和可读性来不必要地提高效率。

编码时提高程序运行效率的主要规则

  • 写程序之前先简化算术的和逻辑的表达式。
  • 仔细研究嵌套的循环,以确定是否有语句可以从内层往外移。
  • 尽量避免使用指针。
  • 不要混合使用不同的数据类型。
  • 尽量使用整数运算和布尔表达式。

二、软件测试基础

1、软件测试的目的

软件测试的工作量约占整个项目工作量的40%以上,对于人命关天的系统测试工作量还要成倍增加(成本是其他部分的成本的3~5倍)。

尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。

2、 软件测试准则

在这里插入图片描述

  • pareto原则:测试发现的错误中的80%很可能是由程序中20%的模块造成的。 找出这些可疑的模块并彻底地测试它们。
  • 为了达到最佳的测试效果,应该由独立的第三方从事测试工作。
  • 应该从“小规模”测试开始,并逐步进行“大规模”测试:

3、测试方法

在这里插入图片描述

静态测试:

基本特征是在对软件进行分析、检查和审阅,不实际运行被测试的软件。

  • 对需求规格说明书、软件设计说明书、源程序做检查和审阅,包括:
    是否符合标准和规范。
    通过结构分析、流图分析、符号执行指出软件缺陷。
  • 静态测试约可找出30%~70%的逻辑设计错误。

动态测试:

通过运行软件来检验软件的动态行为和运行结果的正确性。
动态测试的两个基本要素:

  • 被测试程序
  • 测试数据(测试用例)

动态测试方法:

  • (1) 选取定义域有效值,或定义域外无效值;
  • (2) 由已选取值获取预期的结果;
  • (3) 用选取值执行程序;
  • (4) 执行结果与预期的结果相比,不吻合则表示程序有错。

4、测试步骤

    1. 模块测试 —目的是保证每个模块作为一个单元能正确运行,通常称为单元测试。
    1. 子系统测试—把经过单元测试的模块放在一起形成一个子系统来测试,着重测试模块的接口。
    1. 系统测试—把经过测试的子系统装配成一个完整的系统来测试,以保证能提供需求说明书中指定的功能。主要发现编码、软件设计、需求中的错误。
    1. 验收测试—将软件系统作为一个单一的实体进行测试,在用户参与下主要使用实际数据进行的,以发现需求说明中的错误。
    1. 平行运行—新旧共存。不冒风险、让用户有一段时间熟悉新系统、以准系统的形式进行全负荷测试。

5、测试阶段的信息流——与测试密切相关的工作

在这里插入图片描述

三、单元(模块)测试

1、模块接口

(1)输入的实际参数与形式参数的个数是否相同;
(2)输入的实际参数与形式参数的属性是否匹配;
(3)输入的实际参数与形式参数的量纲是否一致;
(4)输入的实际参数与形式参数的次序是否一致;
(5)是否存在特征耦合;
(6)全局变量的定义和用法在各个模块中是否一致等。

2. 局部数据结构

局部数据说明、初始化、默认值等方面的错误:
(1)不合适或不相容的类型说明;
(2)变量无初值;
(3)变量初始化或省缺值有错;
(4)不正确的变量名(拼错或不正确地截断)等。

3. 重要的执行通路

由于不能穷举测试,因此,选择最有代表性、最可能发现错误的执行通路进行测试十分关键。在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。应该设计测试方案用来发现由于错误的计算、不正确的比较或不适当的控制流而造成的错误。

4. 出错处理通路

一般这种测试着重检查下列问题:

  • (1)检查对错误的描述是否是难以理解;
  • (2)描述错误的信息不足以确定错误的位置;
  • (3)记录的错误与实际遇到的错误不相符;
  • (4)对错误的处理不正确等。

5. 边界条件

由于软件常常在它的边界上失效,因此,边界测试是单元测试中最重要的任务。

单元测试的工具

  • CppUnit:C++单元测试工具的鼻祖,免费的开源单元测试框架。
  • C++Test:是一个功能强大的自动化C/C++单元级测试工具。
  • JUnit :Java语言的单元测试首选产品。

单元测试可以采用哪两种策略和方法?

  • 1、静态测试方法<----代码审查

代码审查的步骤:
小组成员先研究设计说明书,力求理解这个设计。
由设计者扼要地介绍他的设计。
审查会上程序的编写者逐个语句地解释是怎样用程序代码实现这个设计的。
审查会上对照程序设计常见错误,分析审查这个程序。
当发现时,记录错误,继续审查。

  • 2、动态测试方法<----计算机测试

四、集成测试(测试和组装软件的系统化技术。

1、渐增式测试

该方法每次将一个要测试的模块同已经测试好的那些模块结合起来进行测试,如此反复,直到所的模块都测试完毕。

渐增式测试包括:自顶向下集成自底向上集成

2、自顶向下集成

  • 不足:因为存根代替了低层次的模块,因此在软件结构中没有自底向上的数据流。

  • 解决办法:可将测试推迟到用真实的模块代替存根模块以后再进行,或自底向上进行组装软件。

3、自底向上集成

混合法:

  • 对软件的顶部两层模块使用自顶向下方法,以减少驱动程序;

  • 对软件结构中较下层使用自底向上方法相结合。以早期发现低层模块的错误,并充分利用人力。

五、确认测试

  • 确认测试也称为验收测试,它的目标是验证软件的有效性。

  • 需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,因此是软件有效性的标准,也是进行确认测试的基础。

Alpha和Beta测试

  • Alpha测试由用户在开发者的场所进行(不能由程序员或测试员完成 ),并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。该测试是在受控的环境中进行的。
  • Beta测试由软件的最终用户们在一个或多个客户场所进行。Beta测试是软件在开发者不能控制的环境中的“真实”应用。用户记录在Beta测试过程中遇到的一切问题(真实的或想像的),并且定期把这些问题报告给开发者。接收到在Beta测试期间报告的问题之后,开发者对软件产品进行必要的修改,并准备向全体客户发布最终的软件产品。

六、白盒测试技术

白盒测试:也叫结构测试,它允许测试人员利用程序内部的逻辑结构及有关信息,设计测试用例,对程序的逻辑路径进行测试。
测试用例:为测试设计的数据。主要由测试输入数据预期的输出结果两部分组成。

1、基本路径测试

  • 第1步:画出程序流图
  • 第2步:计算程序的环形复杂度P (表示程序基本路径集中的独立路径数的上限)
  • 第3步:确定独立路径的基本集合
  • 第4步:从该基本集合导出测试用例
  • 第5步:执行测试用例
  • 第6步:写测试报告

七、黑盒测试技术

黑盒测试着重测试软件功能。黑盒测试并不能取代白盒测试,它是与白盒测试互补的测试方法,它很可能发现白盒测试不易发现的其他类型的错误。

黑盒测试力图发现下述类型的错误:

  • ①功能不正确或遗漏了功能;
  • ②界面错误;
  • ③数据结构错误或外部数据库访问错误;
  • ④性能错误;
  • ⑤初始化和终止错误。

黑盒测试技术:

  • (1)等价划分法:把程序的输入域划分成若干个数据类,据数据类导出测试用例。
  • (2)边界值分析法
  • (3)错误推测法
  • (4)因果图法等

八、调 试

调试(也称为纠错)作为成功测试的后果出现,也就是说,调试是在测试发现错误之后排除错误的过程。
在这里插入图片描述

九、软件可靠性

1、概念

对于软件可靠性有许多不同的定义,其中多数人承认的一个定义是:
软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。

2、 软件的可用性 =软件系统可以使用的程度

如果在一段时间内,软件系统故障停机时间分别为td1,td2,…,正常运行时间分别为tu1,tu2,…,则系统的稳态可用性为:
Ass=Tup/(Tup+Tdown) (7.1)
其中Tup=∑tui,Tdown=∑tdi
如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则(7.1)式可以变成
Ass=MTTF/(MTTF+MTTR)

3、估算平均无故障时间

经验表明,平均无故障时间与单位长度程序中剩余的错误数成反比,即
MTTF=1/[K(ET/IT-Ec(τ)/IT)] (7.5)
其中K为常数,它的值应该根据经验选取。美国的一些统计数字表明,K的典型值是200。

由(7.5)式可得
Ec=ET-IT/(K×MTTF) (7.6)
因此,也可以根据对软件平均无故障时间的要求,估计需要改正多少个错误之后,测试工作才能结束。

example:

对一个长度为100,000条指令的程序进行测试,记录下来的数据如下:
测试开始,发现错误个数为0;
经过160小时的测试,累计改正100个错误,此时, MTTF = 0.4小时;
又经过160小时的测试,累计改正300 个错误(表示自始至目前),此时,MTTF = 2小时;

给出估计程序中固有的错误总数ET的公式并估算ET和经验常数K的数值。

解:MTTF=1/[K(ET/IT-Ec(τ)/IT)]
0.4=1/[k(ET/100000-100/100000)]
2=1/[k(ET/100000-300/100000)]
得到: K=1000, ET=350

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

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

相关文章

【爬坑之路一】windows系统下更新升级node版本【亲测有效】

前言 一定要看到最后&#xff01;&#xff01;&#xff01; 项目开发中&#xff0c;需要升级 node 版本。本着不想卸载 node 再重新安装的原则&#xff0c;因为node 的环境配置以及各种相关配置有些繁琐&#xff0c;所以就想着使用 命令的方式进行升级。 在网上找了一些升级 n…

C#详解:程序域、程序集、模块、Type、反射

总结&#xff1a; ">>>":代表包含 进程>>>应用程序域AppDomain>>>程序集Assembly>>>模块Module>>>类型Type>>>成员&#xff08;方法、属性等&#xff09; 1、程序集Assembly 如图&#xff0c;假设一个解决方…

ARM 自己动手安装交叉编译工具链

一、Windows中装软件的特点 Windows中装软件使用安装包&#xff0c;安装包解压后有2种情况&#xff1a; 一种是一个安装文件&#xff08;.exe .msi&#xff09;&#xff0c;双击进行安装&#xff0c;下一步直到安装完毕。安装完毕后会在桌面上生成快捷方式&#xff0c;我们平…

(附源码)ssm招聘网站 毕业设计 250858

SSM招聘网站 摘 要 招聘网站采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员、用户、企业三部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、站点管理&#xff08;轮播图、公告栏&#xff09;用户管理&#xff08;管理员、应聘用户、企业用户…

重点| 系统集成项目管理工程师考前50个知识点(2)

本文章总结了系统集成项目管理工程师考试背记50个知识点&#xff01;&#xff01;&#xff01; 帮助大家更好的复习&#xff0c;希望能对大家有所帮助 比较长&#xff0c;放了部分&#xff0c;需要可私信&#xff01;&#xff01; 11、项目目标包括成果性目标和约束性目标。项…

直播倒计时,PyTorch Conference 2022 今晚开启

内容一览&#xff1a;PyTorch Conference 2022 即将在美国南部城市新奥尔良举办。本次会议将带来技术讲座、项目演示及最佳案例分享。 本文首发自微信公众号&#xff1a;PyTorch 开发者社区 关键词&#xff1a;PyTorch 深度学习 机器学习 PyTorch Conference 2022 今晚开启 自…

360crawlergo结合xray被动扫描

360crawlergo结合xray被动扫描 360crawlergo结合xray被动扫描安装配置 360crawlergo结合xray被动扫描 安装 Xray https://github.com/chaitin/xraycrawlergo_x_XRAY https://github.com/timwhitez/crawlergo_x_XRAYcrawlergo https://github.com/0Kee-Team/crawlergo 更多的…

高等数值计算方法学习笔记第7章【非线性方程组求根】

高等数值计算方法学习笔记第7章【非线性方程组求根】一、方程求根与二分法&#xff08;第五次课&#xff09;二、不动点迭代法及其收敛性1.不动点迭代与不动点迭代法&#xff08;一个例题&#xff09;2.不动点的存在性与迭代法的收敛性&#xff08;两个定理&#xff0c;两例题&…

计算机网络——常考的面试题

什么是TCP/IP&#xff1f; TCP建立连接为什么要三次握手&#xff1f;断开连接为什么要四次挥手&#xff1f; SSL/TSL握手过程&#xff1f; 1、网络分层模型 OSI&#xff1a;全称叫Open System Interconnection (开放式系统互联)&#xff0c;是国际标准化组织ISO制定的理论模…

【软件测试】面试老约不到?软件测试简历项目经验怎么写?论项目经验的重要性......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 随着就业竞争越来越…

(五)共享模型之管程【wait notify 】

一、wait notify 1. 小故事 - 为什么需要 wait 2. 原理之 wait / notify &#xff08;1&#xff09;Owner 线程发现条件不满足&#xff0c;调用 wait 方法&#xff0c;即可进入 WaitSet 变为 WAITING 状态。 &#xff08;2&#xff09;BLOCKED 和WAITING 的线程都处于阻塞状…

[附源码]计算机毕业设计springboot线上社区管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

全力护航!广西移动圆满完成区运会通信保障任务

11月23日晚&#xff0c;广西壮族自治区第十五届运动会在贵港市体育中心闭幕。作为区域主导通信运营商&#xff0c;广西移动贵港分公司充分发挥5G网络技术优势&#xff0c;与贵港市政府、区运会组委会紧密合作&#xff0c;全力以赴为运动会提供了先进、高效的通信服务保障。 广西…

PAT (甲级) 2022年秋季考试 c++ 满分题解

PAT (甲级) 2022年秋季考试 c 满分题解 7-1 Balloon Popping 分数 20 原题 算法标签 模拟 枚举 思路 枚举数组元素&#xff0c; 判断每个元素覆盖气球数, 记录最多可覆盖气球数及最多可覆盖气球数开始下标&#xff0c; 则最小开始值为最后可覆盖气球位置减高度H 代码 #…

matlab如何滤除低频尖峰脉冲

有时&#xff0c;数据会出现不必要的瞬态或尖峰。可以用中值过滤消除它们。 最近我们被客户要求撰写关于信号滤除脉冲数据的研究报告&#xff0c;包括一些图形和统计输出。 在存在60 Hz电源线噪声的情况下&#xff0c;考虑模拟仪器输入端的开环电压。采样率为1 kHz。 fs …

基于Python pygame简易版斗兽棋小游戏源代码

基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象>狮>虎>豹>狼>狗>猫>鼠>象 2.同类棋子先行者吃掉对方 3.老鼠可以进河,老鼠在河里时,岸上的动物不能捕食他…

Jmeter常用函数用法详解

Jmeter函数官网帮助手册&#xff1a;https://jmeter.apache.org/usermanual/functions.html#__BeanShell 1.__intSum:计算两个或多个整数值的和 参数是否必传第一个int值是第二个int值是第n个int值否变量名否 eg: ${__intSum(1,2)} //return 123 ${__intSum(1,2,3)} //return …

(8)点云数据处理学习——ICP registration(迭代最近点)

1、主要参考 &#xff08;1&#xff09;官方介绍地址 ICP registration — Open3D 0.16.0 documentation 2、介绍 2.1 原理 &#xff08;1&#xff09;关于ICP registration 本教程演示ICP(迭代最近点)配准算法。多年来&#xff0c;它一直是研究和工业中几何配准的支柱。输…

股票接口怎么解析股票历史数据?

最近有很多投资者在研究股票接口怎么解析股票历史数据&#xff0c;然后执行自动交易等方面对开发股票数据接口的深入思考。其实在小编看来&#xff0c;这就需要先获取股票的每日数据&#xff0c;那么就会使用Python来解析股票历史数据&#xff0c;下面小编就简要介绍使用Python…

Java8-Stream流详细教程

前言 1、什么是Stream 前面我们讲了Lambda表达式与Optional类&#xff0c;下面我们将会使用这两个新特性&#xff0c;特别是Lambda。 Stream 是数据渠道&#xff0c;用于操作数据源(集合、数组等)所生成的元素序列 集合讲的是数据&#xff0c;Stream讲的是计算&#xff01; 注…