您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 《软件工程概论》郑人杰版-第9章-软件实现
第9章软件实现•程序设计语言•程序设计风格•编码规范•程序效率与性能分析9.1程序设计语言•程序设计语言的性能从软件心理学及软件工程角度对程序设计语言的性能进行讨论。9.1程序设计语言•软件心理学的观点(1)一致性。表示一种语言所使用符号的兼容程度、允许随意规定限制,以及允许对语法或语义破例的程度。(2)二义性。虽然语言的编译程序总是以一种机械的规则来解释语句,但读者则可能用不同的方式来理解语句。(3)简洁性。程序设计语言的简洁性用来表示为了用该语言编写程序,必须记忆的关于代码的信息量。9.1程序设计语言•软件心理学的观点(4)局部性。是指程序设计语言的综合特性。在编码的过程中,由语句组合成模块,由模块组装为程序系统结构,并在组装过程中实现模块的高内聚和低耦合,可使程序的局部性加强。(5)传统性。人们学习一种新的程序设计语言的能力受到传统的影响。9.1程序设计语言•软件工程的观点(1)详细设计应能直接地容易地翻译成代码程序。(2)源程序应具有可移植性。(3)编译程序应具有较高的效率。(4)尽可能应用代码生成的自动工具。(5)可维护性。9.1程序设计语言•程序设计语言的分类从软件工程的角度,根据程序设计语言发展的历程,可以将程序设计语言大致分为4类。(1)从属于机器的语言——第一代语言(2)汇编语言——第二代语言(3)高级程序设计语言——第三代语言从20世纪50年代就开始出现,它们的特点是用途广泛。典型的高级程序设计语言有ALGOL、FORTRAN、COBOL、BASIC、PASCAL、C、C++、Lisp、PROLOG、Ada等。9.1程序设计语言•程序设计语言的分类(4)第四代语言(4GL)4GL以数据库管理系统所提供的功能为核心,进一步构造了开发高层软件系统的开发环境,如报表生成系统、多窗口表格设计系统、菜单生成系统等。4GL提供了功能强大的非过程化问题定义手段,用户只需告诉系统做什么,而无须说明怎么做。9.1程序设计语言•程序设计语言的选择在选择编程语言时,可以考虑以下因素。(1)应用领域:目标系统的应用领域不同,需要采取的系统开发范型也不同,所以要考虑支持相应范型的编程语言。(2)系统用户的要求。(3)编程语言自身的功能。(4)编码和维护成本及开发环境。(5)编程人员的技能。(6)软件可移植性。9.2程序设计风格•在软件生存期中,人们经常要阅读程序。特别是在软件测试阶段和维护阶段,编写程序的人和参与测试、维护的人都要阅读程序。•在编写程序时多花些工夫,讲求程序的风格,这将大量地减少人们读程序的时间。•本节对程序设计风格的4个方面,即源程序文档化、数据说明的方法、语句结构和输入/输出方法中值得注意的问题进行概要的讨论9.2程序设计风格•源程序文档化源程序文档化包括标识符的命名、安排注释以及程序的视觉组织等。9.2程序设计风格•标识符的命名标识符包括模块名、变量名、常量名、标号名、子程序名以及数据区名、缓冲区名等。这些名字应能反映它所代表的实际东西,使其能够见名知意,有助于对程序功能的理解。应当选择精练的意义明确的名字,才能简化程序语句,易于对程序功能的理解。9.2程序设计风格•程序的注释正确的注释能够帮助读者理解程序,为测试和维护阶段提供明确的指导。注释行的数量占到整个源程序的1/3到1/2。注释分为序言性注释和功能性注释。序言性注释通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。9.2程序设计风格•序言性注释有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。(1)程序标题。(2)有关本模块功能和目的的说明。(3)主要算法。(4)接口说明:包括调用形式,参数描述,子程序清单。(5)有关数据描述:重要的变量及其用途,约束或限制条件,以及其他有关信息。(6)模块位置:在哪一个源文件中,或隶属于哪一个软件包。(7)开发简历:模块设计者,复审者,复审日期,修改日期、有关说明等。9.2程序设计风格•功能性注释功能性注释嵌在源程序体中,用以描述其后的语句或程序段,也就是解释下面要“做什么”,或是执行了下面的语句会怎么样。例如,下面的注释行仅仅重复了后面的语句,对于理解它的工作并没有什么作用。/*Addamounttototal*/total=amount+total;如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:/*Addmonthly-salestoannual-total*/total=amount+total;9.2程序设计风格•功能性注释书写功能性注释,要注意以下几点。(1)用于描述一段程序,而不是每一个语句。(2)用缩进和空行,使程序与注释容易区别。(3)注释要正确。9.2程序设计风格•视觉组织—空格、空行和移行空格:恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如,将表达式(a<-17)&&!(b<=49)||c写成(a<-17)&&!(b<=49)||c就更清楚。空行:自然的程序段之间可用空行隔开。9.2程序设计风格•视觉组织—空格、空行和移行移行:移行也叫做向右缩格。对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行,可使程序的逻辑结构更加清晰,层次更加分明。9.2程序设计风格•数据说明标准化为了使程序中数据说明更易于理解和维护,在编写程序时,需要注意数据说明的风格。(1)数据说明的次序应当规范化,使数据属性容易查找,也有利于测试、排错和维护。①常量说明。②简单变量类型说明。③数组说明。④公用数据块说明。⑤所有的文件说明。9.2程序设计风格•数据说明标准化(2)当多个变量名用一个语句说明时,应当对这些变量按字母顺序排列。例如,将intsize,length,width,cost,price;进行如下改写更好。intcost,length,price,size,width;(3)对于复杂的数据结构,应当使用注释对其进行说明。9.2程序设计风格•语句结构简单化在编码阶段,语句结构要力求简单、直接,不能为了片面追求效率而使语句复杂化。(1)在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。例如,下面程序的可读性很差。for(i=1;i=n-1;i++){t=i;for(j=i+1;j=n;j++)if(a[j]a[t])t=j;if(t!=i){temp=a[t];a[t]=a[i];a[i]=temp}}9.2程序设计风格•可以将上面的程序段改写成如下形式:9.2程序设计风格(2)程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。例如,有一个用C语句写出的程序段:如果改写成下面的程序段,其功能就能够一目了然了。9.2程序设计风格(3)程序编写得要简单,写清楚,直截了当地说明程序员的用意。例如,下面是是一个有双重循环的程序段,得到的结果是一个N×N的二维数组。如果写成以下的形式,就能让读者直接了解程序编写者的意图了。9.2程序设计风格(4)除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。(5)避免使用临时变量而使可读性下降。例如,由于简单变量的运算比下标变量的运算要快,有的程序员为了追求效率,会将语句x=a[i]+1/a[i];写成ai=a[i];x=ai+1/ai;这样做,虽然效率要高一些,但引进了临时变量,把一个计算公式拆成了几行,增加了理解的难度。9.2程序设计风格(6)让编译程序做简单的优化。(7)尽可能使用库函数。(8)避免不必要的转移,同时如果能保持程序可读性,则不必用GOTO语句。9.2程序设计风格•例如,有一个求3个数中最小值的程序,对应的流程图及程序如下:9.2程序设计风格(9)尽量只采用3种基本的控制结构来编写程序。(10)避免使用空的else语句和if…thenif…语句。这种结构容易使读者产生误解。例如,下面的程序可能产生二义性问题。9.2程序设计风格(11)避免采用过于复杂的条件测试。(12)尽量减少使用“否定”条件的条件语句。例如,如果在程序中出现if(!(char<'0'||char>'9'))……将其改成下面的语句,含义会更直接。if(char='0'&&char='9')……9.2程序设计风格•输入/输出规范化输入/输出信息是与用户的使用直接相关的。输入/输出的方式和格式应当尽可能方便用户的使用。输入/输出的风格随着人工干预程度的不同而有所不同。9.2程序设计风格•输入/输出的原则(1)对所有的输入数据都进行检验,从而识别错误的输入,以保证每个数据的有效性。(2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息。(3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式。(4)输入数据时,应允许使用自由格式输入。(5)应允许默认值。(6)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目。9.2程序设计风格•输入/输出的原则(续)(7)在以交互式输入/输出方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息。(8)当程序设计语言对输入/输出格式有严格要求时,应保持输入格式与输入语句要求的一致性。(9)给所有的输出加注解,并设计输出报表格式。9.3编码规范•在参考微软、Bell等公司编码规范的基础上,本节以C/C++为示例对编码规范给出简要介绍。•规范涉及版面、注释、标识符命名、变量使用、代码可测性、程序效率、质量保证、代码编译、单元测试、程序版本与维护。1.版面(1)程序块要采用缩进风格编写,缩进的空格数为4个。但对于由开发工具自动生成的代码可以有不一致。(2)相对独立的程序块之间、变量说明之后应加空行。(3)较长的语句(80字符)要分成多行写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。(4)循环、判断等语句中的条件测试若有较长的表达式,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。1.版面(5)不允许把多个短语句写在一行中,即一行只写一条语句。(6)if、while、for、default、do等语句自占一行。(7)只用空格键,不要使用TAB键。以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐。(8)函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。1.版面(9)程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体开始、类定义、结构定义、枚举定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。1.版面•例如,下面的程序段不符合规范。•应书写为以下格式:1.版面(10)在两个以上的变量、常量间进行判等操作时,操作符之前、之后或者前后要加空格;进行非判等操作时,如果是关系密切的操作符(如-、::),后面不应加空格。由于留空格所产生的清晰性是相对的,所以,在已非常清晰的语句中没有必要再留空格,如括号内侧(左括号后面和右括号前面)不要加空格,多重括号间不必加空格。2.注释•注释的原则是有助于对程序的阅读理解。(1)一般情况下,注释量一般控制在20%到50%之间。(2)说明性文件(如头文件.h文件、.inc文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本、生成日期、作者、内容、功能、与其他文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。(3)源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。2.注释(4)函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。(5)注释的内容要清楚、明了、含
本文标题:《软件工程概论》郑人杰版-第9章-软件实现
链接地址:https://www.777doc.com/doc-5674694 .html