七章编写程序.ppt

上传人:本田雅阁 文档编号:2577418 上传时间:2019-04-11 格式:PPT 页数:37 大小:344.51KB
返回 下载 相关 举报
七章编写程序.ppt_第1页
第1页 / 共37页
七章编写程序.ppt_第2页
第2页 / 共37页
七章编写程序.ppt_第3页
第3页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《七章编写程序.ppt》由会员分享,可在线阅读,更多相关《七章编写程序.ppt(37页珍藏版)》请在三一文库上搜索。

1、第七章 编写程序,7.1.1 质量及其性质,质量不是绝对的; 质量由多种因素构成; 各种质量因素往往不是相互独立的; 各种质量因素并不具有同等的重要性; 质量必须在一定的前提下进行衡量。,软件质量因素,正确性 在预定的系统环境下能正确地完成预期的功能; 健壮性 在预定意外环境下系统能适当地给予预期的响应; 完整性 对未经授权的操作,系统能够进行控制; 可用性 系统在完成预定任务的功能时能够圆满地实现; 灵活性 系统应能满足硬件环境升级和部分功能扩充需求; 可理解性 用户和维护人员应非常容易的理解和使用系统; 可维护性 用户按文档资料应能排除常见系统故障,保持系统正常运行; 可移植性 在厂家协助

2、下,系统可以移植到其他硬件环境且费用可以接受; 可重用性 系统全部或部分代码可以在其他应用系统中被使用; 可测试性 系统容易测试。,7.1.2 Garvin的5类质量观,用户的质量观; 以产品为中心的质量观; 生产者的质量观; 基于产品的经济价值的质量观; 理想的质量观;,7.1.3 好程序的标准,能够工作; 可靠性高; 使用方便; 简单、容易理解; 易于维护和修改; 高效率; 易移植性; 可重用;,7.2 程序设计风格,匈牙利命名法 基本原则是:变量名属性类型对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非

3、常重要的。,7.2.2 表达式和语句,用缩行显示程序的结构; 用加括号的方式排除二义性; 要清晰; 当心运算符的副作用; 把数定义成常量; 利用sizeof()计算对象的大小;,7.2.3 程序注释,首部注释 不要大谈明显的东西 给函数和全局数据加注释 不要与代码相矛盾,高质量C+/C编程指南,程序的版式:程序的版式追求清晰、美观,是程序风格的重要构成因素。 1)空行起着分隔程序段落的作用: 【规则】在每个类声明之后、每个函数定义结束之后都要加空行。 【规则】在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。,函数之间的空行,/ 空行 void Function1() /

4、 空行 void Function2() / 空行 void Function3() ,函数内部的空行,/ 空行 while (condition) statement1; / 空行 if (condition) statement2; else statement3; / 空行 statement4; ,2)代码行 【规则】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。 【规则】if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加。这样可以防止书写失误。,3)代码行内的空格 【规则2-3-1】关键字之后要

5、留空格。象const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。象if、for、while等关键字之后应留一个空格再跟左括号(,以突出关键字。 【规则2-3-2】函数名之后不要留空格,紧跟左括号(,以与关键字区别。 【规则2-3-3】(向后紧跟,)、,、;向前紧跟,紧跟处不留空格。 【规则2-3-4】,之后要留空格,如Function(x, y, z)。如果;不是一行的结束符号,其后要留空格,如for (initialization; condition; update)。 【规则2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操

6、作符,如“=”、“+=” “=”、“”这类操作符前后不加空格。 【建议2-3-1】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for (i=0; i10; i+)和if (a=b) & (c=d),4)对齐 【规则2-4-1】程序的分界符和应独占一行并且位于同一列,同时与引用它们的语句左对齐。 【规则2-4-2】 之内的代码块在右边数格处左对齐。,5)长行拆分 【规则2-5-1】代码行最大长度宜控制在70至80个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。 【规则2-5-2】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作

7、符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。,6)修饰符的位置 修饰符 * 和 应该靠近数据类型还是该靠近变量名,是个有争议的活题。 若将修饰符 * 靠近数据类型,例如:int* x; 从语义上讲此写法比较直观,即x是int 类型的指针。 上述写法的弊端是容易引起误解,例如:int* x, y; 此处y容易被误解为指针变量。虽然将x和y分行定义可以避免误解,但并不是人人都愿意这样做。 【规则2-6-1】应当将修饰符 * 和 紧靠变量名 例如: char *name; int *x, y; / 此处y不会被误解为指针,7) 注释 【规则2-7-1】注释是对代码的“提示”,而不是文档

8、。程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。注释的花样要少。 【规则2-7-2】如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦。例如 i+; / i 加 1,多余的注释 【规则2-7-3】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。 【规则2-7-4】注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。 【规则2-7-5】尽量避免在注释中使用缩写,特别是不常用缩写。 【规则2-7-6】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。 【规则2-7-8】当代码比较长,特别是有多重嵌套时,

9、应当在一些段落的结束处加注释,便于阅读。,8)类的版式 类可以将数据和函数封装在一起,其中函数表示了类的行为(或称服务)。类提供关键字public、protected和private。这样可以达到信息隐藏的目的,即让类仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。 类的版式主要有两种方式: (1)将private类型的数据写在前面,而将public类型的函数写在后面,采用这种版式的程序员主张类的设计“以数据为中心”,重点关注类的内部结构。 (2)将public类型的函数写在前面,而将private类型的数据写在后面,采用这种版式的程序员主张类的设计“以行为为中心”,重点关注的是类应该提供

10、什么样的接口(或服务)。 建议采用“以行为为中心”的书写方式,即首先考虑类应该提供什么样的函数。“这样做不仅让自己在设计类时思路清晰,而且方便别人阅读。因为用户最关心的是接口,谁愿意先看到一堆私有数据成员!”,7.3.1 控制结构,限制或避免使用goto语句; 模块化; 通用性; 通用类型:内存表示相同; 非通用类型:表示不同,相互转换 防御性,7.3.2 算法和数据结构,算法优化示例 我们有一串随机数列。我们的目的是找到这个数列中最大的数。如果将数列中的每一个数字看成是一颗豆子的大小,可以将下面的算法形象地称为“捡豆子”: 首先将第一颗豆子放入口袋中。 从第二颗豆子开始检查,直到最后一颗豆子

11、。如果正在检查的豆子比口袋中的还大,则将它捡起放入口袋中,同时丢掉原先口袋中的豆子。 最后口袋中的豆子就是所有的豆子中最大的一颗。 下面是一个形式算法,用近似于编程语言的伪代码表示: 给定:一个数列“list“,以及数列的长度“length(list)“ largest = list1 for counter = 2 to length(list): if listcounter largest: largest = listcounter print largest,算法的三种基本结构: 顺序结构:顺序结构是最简单、最常用的算法结构,语句与语句之间,框与框之间按从上到下的顺序进行。 选择结构

12、:是先根据条件作出判断,再决定执行哪一种操作的算法结构,它必须包含判断框。当条件P成立(或称为真)时执行A,否则执行B,不可能两者同时执行,但A或B两个框中可以有一个是空的,即不执行任何操作 循环结构:在一些算法中,经常会出现从某处开始,按照一定条件,反复执行某一处理步骤的情况,这就是循环结构,反复执行的处理步骤为循环体,它可以细分为两类:直到型循环结构、当型循环结构,数据结构优化示例 根据数据元素间关系的不同特性,通常有下列四类基本的结构: 集合结构。该结构的数据元素间的关系是“属于同一个集合”。 线性结构。该结构的数据元素之间存在着一对一的关系。 树型结构。该结构的数据元素之间存在着一对多

13、的关系。 图形结构。该结构的数据元素之间存在着多对多的关系,也称网状结构。,7.3.3 一般性指导,保持简单; 设计与实现相匹配; 软件重用;,7.4.1 程序排错系统,一、排错过程 排错过程开始于一个测试用例的执行,若测试结果与预期结果有出入即出现了错误征兆。 排错首先要找出错误的原因,然后对错误进行修正。因此,排错过程可能有两种可能: (1)找到了错误原因并纠正了错误; (2)错误原因不明,排错人员只能做某种推测,然后再设计测试用例证实该推测,若一次推测失败,就再做第二次推测,直到发现并纠正了错误。,二、排错步骤 (1)从错误的外部表现形式入手,确定程序中出错的位置; (2)研究有关部分程

14、序,找出错误的内在原因; (3)修改设计和代码,以排除这个错误; (4)重复进行暴露这个错误的原始测试或某些有关测试,以确认该错误是否被排除,是否引入了新的错误。 (5)如果所有的修改无效,则撤销这次改动,重复上述过程,直到找到一个有效的解决办法为止。,三、排错方法 1、强行排错 如通过内存全部打印出来排错、在程序特定部位设置打印语句和自动调试工具等。 2、回溯法排错 一旦发现错误,先分析错误征兆,确定最先发现“征兆”的位置。然后,人工沿程序的控制流程,向回追踪源程序代码,直到找到错误根源或确定错误产生的范围。,3、归纳法排错 这是一种由特殊推断一般的系统化思考方法。 基本思想是:从一些线索(

15、错误征兆)入手,通过分析他们之间的关系来找出错误。 基本步骤是:(1)收集有关数据;(2)组织数据;(3)提出假设;(4)证明假设。 4、演绎法排错 这是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。 基本思想是:测试人员首先根据已有的测试用例,设想及枚举出所有可能的出错的原因作为假设;然后再用原始测试数据或新测试用例,从中排出不可能正确的假设;最后再用测试用例验证余下的假设确定出错误的原因。 基本步骤是:(1)列举所有可能出错原因的假设;(2)利用已有的测试数据,排除不正确的假设;(3)改进余下的假设;(4)证明余下的假设。,四、排错原则 1、确定错误的性质和位置的原

16、则 (1)分析、思考与错误征兆有关的信息; (2)避开死胡同; (3)只把排错工具当做辅助手段来使用; (4)避免用试探法,最多只能把它当做最后手段。 2、修改错误的原则 (1)在出现错误的地方,可能还会有别的错误; (2)修改错误的一个常见失误是只修改了这个错误的政治或这个错误的表现,而没有修改错误本身。如果提出的修改不能解释与这个错误有关的全部线索,就表明修改了错误的一部分。 (3)当心修正一个错误的同时有可能会引入新的错误。 (4)修改错误的过程将迫使人们暂时回到程序设计阶段。 (5)修改源程序代码,不要改变目标代码。,7.4.2 可重现的错误,分而治之 检查最近的改动 不要被同一块石头绊倒两次,7.4.3 不可重现的错误,把错误弄成可重现的; 图示化; 把错误解释给别人听;,7.5 程序文档,C+ 程序文档生成器(doxygen) 主要数据结构和变量的名称、类型和目的; 关键算法的简单描述; 输入、输出参数的个数、类型、范围和含义。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1