程序编码与质量-软件工程.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 编码 质量 软件工程
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,程序编码与质量,通常把编码和测试统称为实现。,所谓编码就是选择一种语言把软件设计阶段的,结果,翻译成计算机可以理解的源程序。,软件编码要求,正确地理解用户需求和软件设计思想,正确地根据设计模型进行程序设计,正确地而高效率地编写和测试源代码,软件编码是设计的继续,会影响软件质量和可维护性,主要内容,编程的过程,编程语言的选择,软件编码规范,软件代码检查,一、编程(编码,),编程是设计的自然结果,编程语言的特性和编程风格会深刻地影响软件的质量和可维护性,软件实现是一个不断变换的过程:设计源程序目标代码机器码,为了保证程序编码的质量,程序员必须深刻理解、熟练掌握并正确地运用程序设计语言的特性。此外,还要求源程序具有良好的结构性和良好的程序设计风格,。,编程的过程1/2,程序设计,理解软件的需求说明和设计模型,补充遗漏的或剩余的详细设计,设计程序代码的结构,设计审查,检查设计结果,记录发现的设计缺陷(类型、来源、严重性),编写代码,应用编码规范进行代码编写,所编写代码应该是易验证的,代码走查,确认所写代码完成了所要求的工作,记录发现的代码缺陷(类型、来源、严重性),编译代码,修改代码的语法错误,测试所写代码,对代码进行单元测试,调试代码修改错误,编程的过程2/2,二、编程语言的选择,(1)系统用户的要求。,(2)可以使用的编译程序。,(3)可以得到的软件工具。,(4)工程规模。,(5)程序员的知识。,(6)软件可移植性要求。,(7)软件的应用领域。,程序实际上也是一种供人阅读的文章,有一个,文章的风格,问题。应该使程序具有良好的风格。,源程序文档化,数据说明的方法,语句的结构,输入/输出的方法,效率,3.1 源程序文档化,选择好标识符(变量和标号)的名字,挑选有意义的标识符名字,安排注释,序言式注释(头文件),功能注释,使程序的结构一目了然(程序的视觉组织),缩进,符号名的命名,名字不是越长越好,,应当选择精炼的意义明确的名字。,必要时可使用缩写名字,,但这时要注意缩写规则要一致,并且要,给每一个名字加注释,。同时,在一个程序中,一个变量只应用于一种用途。,NEW.BALANCE.ACCOUNTS.PAYABLE,(PASCAL),NBALAP,(FORTRAN),N,(BASIC),序言性注释(头文件),通常置于每个程序模块的开头部分,,它应当给出程序的整体说明,,对于理解程序本身具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。,头文件的内容,程序标题,;,有关本模块,功能和目的,的,说明,;,主要算法,;,接口说明,:包括调用形式,参数描述,子程序清单;,有关数据描述,:重要的变量及其用途,约束或限制条件,以及其它有关信息;,模块位置,:在哪一个源文件中,或隶属于哪一个软件包;,开发简历,:模块设计者,复审者,复审日期,修改日期及有关说明等。,功能性注释,功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。,例如,,/*ADD AMOUNT TO TOTAL*/TOTAL=AMOUNTTOTAL,不好。,功能性注释,如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:,/*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/TOTAL=AMOUNTTOTAL,要点,描述一段程序,而不是每一个语句;,用缩进和空行,使程序与注释容易区别;,注释要正确。,3)视觉组织,空格、空行和移行,恰当地利用,空格,,可以,突出运算的优先性,,避免发生运算的错误。,例如,将表达式,(,A,17),ANDNOT,(,B,49),ORC,写成,(,A,17),AND NOT,(,B,49),OR C,自然的程序段之间可用,空行,隔开,;,视觉组织,空格、空行和移行,移行,也叫做,向右缩格,。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。,对于,选择语句,和,循环语句,,把其中的程序段语句向右做,阶梯式移行,。使程序的逻辑结构更加清晰。,例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。,视觉组织,IF,(),THEN IF,(),THEN ELSE ENDIF ELSE ENDIF,为了使程序中数据说明更易于理解和维护,必须注意以下几点:,数据说明的次序应该规范化,说明语句中变量安排有序化,使用注释说明复杂数据结构,1)数据说明的次序应当规范化,数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。,原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。,2)说明语句中变量安排有序化,当,多个变量名在一个说明语句中说明,时,应当对这些变量,按字母的顺序排列,。带标号的全程数据(如FORTRAN的公用块)也应当按字母的顺序排列。,例如,把,integer,size,length,width,cost,price,写成,integer,cost,length,price,size,width,3.3 语句结构,在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。,1)在一行内只写一条语句,在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。,许多程序设计语言允许,在一行内写多个语句,。但这种方式,会使程序可读性变差,。因而不可取。,FOR I:=1 TO N,-,1 DO /,改进布局,BEGIN T:=I;FOR J:=I1 TO N DO IF AJAT THEN T:=J;IF TI THEN BEGIN WORK:=AT;AT:=AI;AI:=WORK;END END;,2)程序编写首先应当考虑清晰性,程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。,例如,有一个用 C 语句写出的程序段:,AI=AIAT;AT=AIAT;AI=AIAT;,此段程序可能不易看懂,有时还需用实际数据试验一下。,实际上,这段程序的功能就是交换,AI,和,AT,中的内容。目的是为了节省一个工作单元。如果改一下:,WORK=AT;AT=AI;AI=WORK;,就能让读者一目了然了。,3)程序要能直截了当地说明程序员的用意,。,4)除非对效率有特殊的要求,程序编写要做到,清晰第一,效率第二,。,不要为了追求效率而丧失了清晰性。事实上,,程序效率的提高主要应通过选择高效的算法,来实现。,5)首先要保证,程序正确,然后才要求,提高速度,。,反过来说,在使程序高速运行时,首先要保证它是正确的。,6)避免,使用临时变量,而使可读性下降。,例如,有的程序员为了追求效率,往往喜欢把表达式,AI1AI;,写成,AIAI;,XAI1AI;,这样将一句分成两句写,会产生意想不到的问题。,7)让编译程序做简单的优化。,8)尽可能,使用库函数,9)避免,不必要的转移。,同时如果能保持程序可读性,则不必用,GOTO,语句。,求三个数中最小值的程序:,IF(X Y)GOTO 30 IF(Y Z)GOTO 50 SMALLZ,GOTO 70,30 IF(X Z)GOTO 60 SMALLZ,GOTO 70,50 SMALLY,GOTO 70,60 SMALLX,70 CONTINUE,求三个数中最小值的程序,程序只需编写成:,small,x,;if(,y,small,),small,y,;if(,z,=,a,)if(,char,=,z,)cout “This is a letter。”;else cout “This is not a letter。”;,可能产生二义性问题。,12)避免采用过于复杂的条件测试。,13)尽量减少使用“否定”条件的条件语句。例如,如果在程序中出现,IF NOT(CHAR0)OR (CHAR9)THEN,改成,IF(CHAR0)AND (CHAR9)THEN,不要让读者绕弯子想。,14)尽可能用,通俗易懂的伪码,来描述程序的流程,然后再翻译成必须使用的语言。,15)数据结构要有利于程序的简化,。,16)要,模块化,,使模块功能尽可能单一化,模块间的耦合能够清晰可见。,17)利用,信息隐蔽,,确保每一个模块的独立性,。,18)从,数据,出发去构造程序。,19)不要修补不好的程序,要重新编写。也不要一味地追求代码的复用,要重新组织。,20)对太大的程序,要分块编写、测试,然后再集成。,21)对递归定义的数据结构尽量使用递归过程,。,3.4 输入和输出,输入和输出信息是与用户的使用直接相关的。输入和输出的方式和格式应当尽可能方便用户的使用。一定要避免因设计不当给用户带来的麻烦。,因此,在软件需求分析阶段和设计阶段,就应基本确定输入和输出的风格。系统能否被用户接受,有时就取决于输入和输出的风格。,输入和输出设计的编码原则,1,)对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;,2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息;,3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式;,4)输入数据时,应允许使用自由格式输入;,输入和输出设计的编码原则,5)应允许缺省值;,6)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;,7)在交互式输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;,输入和输出设计的编码原则,8)当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的要求的一致性;,9)给所有的输出加注解,并设计输出报表格式。,输入输出风格还受到许多其它因素的影响。如输入输出设备(例如终端的类型,图形设备,数字化转换设备等)、用户的熟练程度、以及通信环境等。,3.5 效率,效率主要指处理机时间和存储器容量两个方面,有关效率的三个原则:,效率是一种性能需求。软件的效率应根据需要,而不是尽可能地高!,效率是靠好设计来提高的。,程序的效率和程序的简明程度是一致的,。,总之不要去牺牲程序的清晰性、可读性或正确性去追求效率的非本质的提高,1)源程序的效率(代码效率),源程序的效率与算法效率直接相关,编程风格会影响运行速度及所需内存的大小,编译器的“优化”特性是提高效率的一种手段,1)源程序的效率(代码效率),原则:,在具体编程前应简化算术表达式及逻辑表达式,细心地分析多层嵌套循环以确定能否把一些语句或表达式移到循环之外,尽量避免采用多维数组,尽量避免采用指针及复杂的表,采用“快”的算术运算,不要把不同的数据类型混在一起,只要可能就采用整型数的算术运算和布尔表达式,2)内存效率,大机器领域内存几乎无限制,虚存使“内存效率”不等同于“占用最小的内存”,微机领域内存的限制仍是很现实的问题,采用汇编语言可以节省内存,提高运行效率的技术往往可以同时节省内存,使程序简单是提高内存效率的关键,3)输入/输出效率,提高I/O效率的指导原则,:,全部I/O应有缓冲以避免过于频繁的信息交换,对外存应该选用最简单的可接收的存取方式,与外存联系的I/O操作应成块地传送数据,与终端及行式打印机联系的I/O操作应考虑设备的特性,以改进质量与速度,如果“超高效率”的I/O无法被人们理解,则是毫无意义的,1.从下列叙述中选出关于好的程序风格的正确描述,A.程序嵌套的层数应加以限制,B.尽量多用临时变量,C.模块越小越好,一般说来模块的大小都在10行以下,D.程序中的注释越少越好,E.使用有意义的变量名,F.尽可能把程序编得短些,不利于阅读和理解,应50100行 12页,短不一定清晰,四、软件代码审查,问题:,编译没有错误是否说明程序没有错误?,如何发现程序中的逻辑错误或语义错误?,严重性是代码检查的基本特性,通过其分类可以划定错误的优先顺序,以便理性地调度工作。,错误的严重性,严重的:需求没有满足,很小的:不影响运行和维护,中等的:除了以上两种情况,4.1 错误类型,逻辑问题,遗漏的事件或步骤;重复的逻辑;忽视的前提条件;不必要的函数;误解;忽视的条件测试;检查错误的变量;不正确的循环等,计算问题,不充分的或不正确的等式表达式;精确性的损失;符号约定错误,接口时间问题,不正确的中断处理;不正确的IO 时间分配;不匹配的子程序,错误类型,数据处理问题,不正确的数据初始化;不正确的数据访问或数据存储;不正确的数据标量值或单位;不正确的数据维数,不正确的数据范围,数据问题,不正确或缺少敏感数据;不正确或缺少操作数据;不正确或缺少表中的嵌入数据;不正确或缺少外部数据;不正确或缺少输出数据;不正确或缺少输入数据,错误类型,文档问题,模糊说明等,文档的质量,可适用的标准不匹配等,之前修改引起的错误,互操作性问题,与其他软件或构件不兼容,4.2 代码检查清单,代码检查应该有一个程序员常见错误的核对清单,通常这个清单由开发团队中有经验的开发人员经过讨论而形成,并且随着开发的积累而不断修正和丰富。,代码检查清单与具体程序设计语言相关,每一个开发组织将针对不同的程序设计语言建立自己的代码检查清单,JAVA语言的代码检查清单,代码检查:类,C1:类的命名是否与需求和设计相符?,C2:能否是抽象的?,C3:类的头部是否说明了该类的目的?,C4:类的头部是否引用了相关的需求和设计元素?,C5:是否说明了该类所从属的包?,C6:是否尽量地私有(private)?,C7:应该是final(Java语言)吗?,C8:是否已经应用了文档标准?,代码检查:属性,A1:该属性是否必要?,A2:能否是静态的(static)?,A3:应该是final吗?,A4:是否正确地应用了命名约定?,A5:是否尽量地私有(private)?,A6:属性之间是尽可能地独立吗?,A7:初始化策略是否可理解?,说明时初始化?,使用构造函数初始化?,使用静态块static?,混合使用上述方法?如何初始化?,代码检查:构造函数,CO1:该构造函数是否必要?使用工厂方法是否更合适?,CO2:是否平衡已有的构造函数?(一种Java仅有的能力),CO3:是否将所有的属性进行了初始化?,CO4:是否尽量地私有(private)?,CO5:必要时,是否执行了继承的构造函数,?,小结,编程就是将软件设计的结果用某种程序设计语言描述出来,因此所选择的语言应尽量自然地支持软件设计方法,适合于所求解问题的领域。,编程时应综合考虑时空特性,理解、测试与维护程序的便利等因素。,展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


程序编码与质量-软件工程.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14641215.html