目录
4.1编码
编码目的
把模块的过程性描述翻译为用选定的程序设计语言书写的源程序(源代码)。
依据
编码的主要依据是概要设计和详细设计说明文档。
任务
理解概要设计和详细设计说明书;
遵循编码原则和风格进行翻译,形成源代码。
程序设计语言分类:
1. 机器语言
1011011000000000:加法 1011010100000000:减法
优点: 计算机直接识别 缺点: 效率低,重用性差
2. 汇编语言
机器指令助记符
例: 机器指令:1000100111011000
汇编指令:MOV AX,BX
优点: 比机器语言易读写、易调试和修改 执行速度快、占内存少 针对硬件编制
缺点: 不能编写复杂程序 依赖于机型、不通用、不可移植
3. 高级语言
与自然语言相近,面向用户的语言
优点: 编码效率高 通用性强,兼容性好,便于移植
缺点: 运行效率低 对硬件操作不如汇编
4. 语言选择标准:
系统用户要求
如果开发系统由用户维护,通常要求用熟悉的语言书写
可以使用的编译程序
运行目标系统环境可提供编译程序限制可选用语言的范围
可以得到的软件工具
有支持程序开发的软件工具可以利用。
工程规模
规模庞大,现有语言不适用,设计实现供该工程项目使用程序设计语言
程序员知识 如果和其他标准不矛盾,应选择程序员熟悉的语言
软件可移植性要求 若目标系统在不同计算机上运行,选择可移植性好的语言
软件的应用领域 选择语言时应充分考虑目标系统的应用范围。
编码风格
逻辑简明清晰、易读易懂是重要标准
可遵循以下五方面规则:
程序内部的文档 数据说明 语句构造(简单) 输入输出 效率(和存储容量)
一、程序内部的文档
(1)恰当的描述符 含义鲜明
void print_record( unsigned int rec_ind ) ; int input_record( void ) ;
变量名禁止取单个字符(如i、j),允许作局部循环变量
命名规则一致
避免过长或过短(建议英文)
缩写规则一致
temp 可缩写为 tmp ; message 可缩写为 msg ;
函数用大写字母开头单词 SetName(),GetName()
(2)适当注解:源程序中有效注解量在20%以上
序言性注解 模块开始,描述模块功能、主要算法、接口特点、重要 数据及开发简史(设计者、复审者及时间、修改日期)
中间注解 插在程序中间,解释这段代码的必要性及功能。
(3)良好的视觉组织:空格、空行、缩进
二、数据说明
数据说明次序应标准化(按数据结构或数据类型说明)
常量->简单变量->数组->公用数据块->文件
整形->实型->字符->逻辑
多个变量名在一个语句说明,按字母顺序排列。
复杂数据结构用注解说明实现方法和特点。
三、语句构造
1.避免把多个语句写在同一行
如下例子不符合规范: rect.length = 0; rect.width = 0;
应如下书写 :
rect.length = 0;
rect.width = 0;
2.尽量避免复杂条件测试;
3.尽量减少“非”条件测试; ( if not(a>b)->if a<=b )
4. 避免大量使用循环嵌套和条件嵌套;
5. 利用括号使表达式运算次序清晰直观。 if a or b and c --> if a or (b and c)
6.尽量少用goto语句
7.if、for、do、while、case、switch、default 等语句占一行,且if 、for 、do 、while 等语句的执行语句部分无论多少都要加括号{}
应书写:
if (pUserCR == NULL)
{ return;
}
8.不将BOOL值TRUE和FALSE对应1和0编程 多数编程语言:false定义为0,非0值是true
示例程序:
BOOL flag; ...
if(flag) {//do something } // 正确用法
if(!flag) {//do something } // 正确用法
if(flag==1) {// do something } // 危险用法
if(flag==0) { //do something } // 不合理的用法
四、输入输出
1.对所有输入数据都进行检验,保证输入有效;
2.检查输入项重要组合合法性;
3.保持输入格式简单;
4.使用数据结束标记,不要求用户指定数据数目;
5.提示交互式输入请求,如可用选择或边界数值
6.程序设计语言对格式有严格要求时,应保持输入格式一致;
7.设计良好输出报表;
8.给所有输出数据加标志
五、效率(和存储容量)
1.程序运行时间
(1)简化算术和逻辑表达式;
(2)嵌套循环,确定是否有语句可从内层往外移;例
(3)尽量避免使用多维数组;
(4)尽量避免使用指针和复杂的表;
(5)使用执行时间短的算术运算;
(6)不要混合使用不同的数据类型;
(7)尽量使用整数运算和布尔表达式。
效率(和存储容量) 2.存储器效率
大中型计算机考虑操作系统页式调度特点,将程序功能合理分块,每个模块或一组密切相关程序体积与每页容量相匹配,减少页面调度。
微型计算机关键是程序简单性,选择生成较短目标代码且存储压缩性能优良的编译程序。
3.输入输出效率
(1)所有输入/输出都应有缓冲,减少通信的额外开销;
(2)对二级存储器(如磁盘)选用最简单访问方法;
(3)辅助存储器的输入/输出以信息组为单位进行;
(4)如“超高效”输入/输出很难被理解不采用。
4.2软件测试基础
软件测试的目标:
(1) 测试是为了发现程序中的错误而执行程序的过程;
(2) 好的测试方案是极有可能发现迄今尚未发现的尽可能多的错误的测试;
(3) 成功的测试是发现了迄今尚未发现的错误的测试。 ---G.Myers
黑盒测试和白盒测试
黑盒测试:如果知道产品应具有功能,可通过测试来检验是否每个功能都能正常使用。
白盒测试:如果知道产品内部工作过程可通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。
测试准则
(1)所有测试应能追溯到用户需求,测试的目的是发现错误,其中最严重的是不能满足用户需求的错误。
(2)应尽早地和不断地进行软件测试。
不应把软件测试仅看作是软件开发一独立阶段,应把它贯穿到软件开发各阶段中。
(3)充分注意测试中群集现象(Pareto原理)。
测试后程序中残存错误数与程序中已发现错误数目成正比,80%错误与20%模块有关。
(4)测试应从小规模开始,逐步进行大规模测试。
单个模块,逐步集成。
(5)不能做到穷举测试。
例 穷举测试:程序所有可能执行路径都检查遍。
(6)第三方测试原则
从心理学角度考虑。