程序的质量主要取决于软件设计的质量。软件测试是保证软件质量的关键步骤,是对软件规格说明、设计和编码的最后复审
编码
选择程序设计语言
程序设计语言是人和计算机通信的最基本的工具,会影响人的思维和解题方式,影响人和计算机通信的方式和质量,影响其他人阅读和理解程序的难易程度。
选择适宜的程序设计语言的原因:
- 根据设计去完成编码时,困难最少;
- 可以减少需要的程序测试量;
- 可以得到更容易阅读和更容易维护的程序(极端重要)
高级语言优于汇编语言:
- 汇编语言编码需要把软件设计翻译成机器操作的序列, 既困难又容易出差错;
- 高级语言写程序比用汇编语言写程序生产率可以提高好几倍;
- 用高级语言写的程序容易阅读、容易测试、容易调试、 容易维护。
理想标准:
- 应该有理想的模块化机制,以及可读性好的控制结构和数据结构;
- 使编译程序能够尽可能多地发现程序中的错误;
- 应该有良好的独立编译机制。
实用标准:
- 系统用户的要求;
- 可以使用的编译程序;
- 可以得到的软件工具;
- 工程规模;
- 程序员的知识;
- 软件可移植性要求;
- 软件的应用领域
编码风格(逻辑清晰、易读易懂)
源程序代码的逻辑简明清晰、易读易懂是好程序的一个重要标准,为了做到这一点,应该遵循下述规则。
1.程序内部的文档
所谓程序内部的文档包括恰当的标识符、适当的注解和程序的视觉组织等。
- 标识符:含义鲜明的名字、缩写规则一致、为名字加注解;
- 注解:正确性,简要描述模块的功能、主要算法、接口特点、 重要数据以及开发简史或解释包含这段代码的必要性;
- 视觉组织:适当的阶梯形式使程序的层次结构清晰明显。
2.数据说明
数据说明的原则:
- 数据说明的次序应该标准化;
- 当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量/行业内的约定标准;
- 如果设计时使用了一个复杂的数据结构(能不用就不用),则应该用注解说明用程序设计语言实现这个数据结构的方法和特点。
3.语句构造
下述语句构造的原则有助于使语句简单明了:
- 不要为了节省空间而把多个语句写在同一行;
- 尽量避免复杂的条件测试,不主张多个逻辑条件复用;
- 尽量减少对“非”条件的测试(数据库中);
- 避免大量使用循环嵌套和条件嵌套;
- 利用括号使逻辑表达式或算术表达式的运算次序清晰直观(避免程序难读)
4.输入输出
在设计和编写程序时需考虑有关输入输出风格的规则:
- 对所有输入数据都进行检验; (如:某省某市谋县)
- 检查输入项重要组合的合法性;
- 保持输入格式简单;
- 使用数据结束标记,不要要求用户指定数据的数目;
- 明确提示交互式输入的请求,详细说明可用的选择或边界数值;
- 程序设计语言对格式有严格要求时,应保持输入格式一致;
- 设计良好的输出报表;
- 给所有输出数据加标志
5.效率 效率主要指处理机时间和存储器容量两个方面。
- 效率是性能要求,因此应该在需求分析阶段确定效率方面的要求;
- 效率是靠好设计来提高的;
- 程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率(不要炫技)。
(1) 程序运行时间
写程序的风格会对程序的执行速度和存储器要求产生影响,应遵循的规则如下:
- 写程序之前先简化算术的和逻辑的表达式;
- 仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;
- 尽量避免使用多维数组;
- 尽量避免使用指针和复杂的表;
- 使用执行时间短的算术运算;(有意识研究风格,优化)
- 不要混合使用不同的数据类型;
- 尽量使用整数运算和布尔表达式
(2) 存储器效率
- 在大型计算机中必须考虑操作系统页式调度的特点,一般说来,使用能保持功能域的结构化控制结构,是提高效率的好方法。
- 在微处理机中如果要求使用最少的存储单元,则应选用有紧缩存储器特性的编译程序,在非常必要时可以使用汇编语言。
- 提高执行效率的技术通常也能提高存储器效率。提高存储器效率的关键同样是“简单”。
(3) 输入输出的效率
简单清晰是提高人机通信效率的关键。从写程序的角度看,却有些简单的原则可以提高输入输出的效率。
- 所有输入输出都应该有缓冲,以减少用于通信的额外开销;
- 对二级存储器(如磁盘)应选用最简单的访问方法;
- 二级存储器的输入输出应该以信息组为单位进行;
- 如果“超高效的”输入输出很难被人理解,则不应采用这种方法。
软件测试基础
软件测试的目标
关于测试的一些规则如下:
- 测试是为了发现程序中的错误而执行程序的过程。
- 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
- 成功的测试是发现了至今为止尚未发现的错误的测试。
测试的正确定义是“为了发现程序中的错误而执行程序的过程”。
测试决不能证明程序是正确的。即使经过了最严格的测试之后, 仍然可能还有没被发现的错误潜藏在程序中。
另外,在综合测试阶段通常由其他人员组成测试小组来完成测试工作(心理学角度)。
软件测试准则
- 所有测试都应该能追溯到用户需求;
- 应该远(需求分析)在测试开始之前就制定出测试计划;
- 应该从“小规模”测试开始,并逐步进行“大规模”测试;
- 穷举测试是不可能的;(时间、人力、其他资源)
- 为了达到最佳的测试效果,应该由独立的第三方从事测试工作(承担模块测试工作)
测试方法
黑盒测试(又称功能测试—>接口)把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。
黑盒测试是在程序接口进行的测试, 检查:
程序功能是否能按照规格说明书的规定正常使用;
程序是否能适当地接收输入数据并产生正确的输出信息;
程序运行过程中能否保持外部信息(例如数据库或文件)的完整性。
白盒测试(又称结构测试) 是把程序看成装在一个透明的白盒子里,测试者完全知道程序结构和处理算法。
这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求(详细设计)正确工作。
测试步骤
测试过程也必须分步骤进行,后一个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成,因此,大型软件系统的测试过程基本上由模块测试、子系统测试、系统测试、验收