软件工程实践6编程ppt课件_第1页
软件工程实践6编程ppt课件_第2页
软件工程实践6编程ppt课件_第3页
软件工程实践6编程ppt课件_第4页
软件工程实践6编程ppt课件_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、北京理工大学软件工程实际汤铭端中国航天科工集团公司204所第五讲软件实现内容和目的n编程言语的选择 n编程风格n程序效率n编码要求n静态分析n代码审查n软件调试编程n编程是设计的自然结果n编程言语的特性和编程风格会深化地影响软件的分量和可维护性n软件实现是一个不断变换的过程:设计源程序目的代码机器码编程言语的选择n运用领域n算法及运算的复杂性n软件运转的环境n性能n数据构造的复杂性n软件开发组成员对该言语的熟习程度编程风格n程序必需是可以了解的n程序的风格应该强调简单和明晰n影响程序风格的要素有:n源程序内部文档化n数听阐明的方法n语句的构造nI/O的方法源程序文档化n选择好标识符变量和标号的

2、名字n挑选有意义的标识符名字n安排注解n序文式注解头文件n功能注解n使程序的构造一目了然n缩进数听阐明n数听阐明的次序应该规范化n多个变量阐明时最好按字典数顺序陈列n对复杂构造用注讲解明语句构造n每个语句应该简单直接,不应该为提高效率而把语句复杂化n使程序简单易懂n防止采用复杂的条件语句n不要用“否认条件的条件语句n防止多重的循环嵌套或条件嵌套n用括号使逻辑表达式或算术表达式更为明晰n用空格及有意义的符号使语句内容明晰明确n反问本人“假设这程序不是我编的,我能看懂吗?输入/输出n对批处置I/On符合逻辑地组织输入nI/O出错检查n好的I/O出错恢复功能n明晰的输出报告格式n对交互式I/On简单

3、而有提示的输入方式n完备的出错处置及出错恢复n人机对话输出nI/O格式的一致性n原那么:n检查一切输入数据的合法性n检查输入项的各种重要组合能否合理n输入格式要简单n最好采用数据结尾指示符,而不应要求用户规定“输入工程的数量n交互式I/O要求用户输入时,标明交互输入可选择的种类和范围n输出时坚持格式的一致性n设计和标明一切的输出Wasserman交互系统设计原那么原那么n把计算机的内部特性掩盖起来不让用户看到n使程序“穿上防弹衣,保证程序不被用户破坏n假设用户的恳求会产生艰苦的后果,就要提示用户n在运用此程序时提供联机的协助条件n按照用户的程度设计输入要求n按照输出设备的速度设计输出信息n区别

4、对待不同类型的用户n坚持一致的呼应时间n应尽量减少用户处置出错的任务量效率n要求有效地利用临界资源是自然的nCPU周期和内存单元常被看作临界资源n有关效率的三个格言:n效率是一种性能需求。软件的效率应根据需求,而不是尽能够地高!n好的设计必然提高效率。n程序的简单性与程序的效率往往是一致的。n总之不要去牺牲程序的明晰性、可读性或正确性去追求效率的非本质的提高源程序的效率n源程序的效率与算法效率直接相关n编程风格会影响运转速度及所需内存的大小n编译器的“优化特性是提高效率的一种手段n原那么:n在详细编程前应简化算术表达式及逻辑表达式n细心地分析多层嵌套循环以确定能否把一些语句或表达式移到循环之外

5、n尽量防止采用多维数组n尽量防止采用指针及复杂的表n采用“快的算术运算n不要把不同的数据类型混在一同n只需能够就采用整型数的算术运算和布尔表达式内存效率n大机器领域内存几乎无限制,虚存使“内存效率不等同于“占用最小的内存n微机领域内存的限制仍是很现实的问题n采用汇编言语可以节省内存n提高运转效率的技术往往可以同时节省内存n使程序简单是提高内存效率的关键输入输出效率n提高I/O效率的指点原那么:n全部I/O应有缓冲以防止过于频繁的信息交换n对外存应该选用最简单的可接纳的存取方式n与外存联络的I/O操作应成块地传送数据n与终端及行式打印机联络的I/O操作应思索设备的特性,以改良质量与速度n假设“超

6、高效率的I/O无法被人们了解,那么是毫无意义的Kernighan和Plauger给出的好的程序设计风格的规那么n写得明晰而不是太乖巧n简单而直接地阐明他的意图n运用库功能n防止运用暂时变量n写明晰不要为了“效率而牺牲明晰n让机器干苦活n用调用一个公共的例程去替代反复的表示n选用不易混淆的变量名n防止运用不用要的转移Kernighan和Plauger给出的好的程序设计风格的规那么n不运用条件转移替代一个逻辑表达式n假设一个逻辑表达式难以了解,那么试着对其进展变换n运用数组,防止反复的控制序列n选用使程序简单的数据表示法n先用一个容易了解的伪言语写程序,然后再翻译成他所用的言语运用IFELSEIF

7、ELSEIFELSEENDIF实施多路选择n模块化,运用子例程Kernighan和Plauger给出的好的程序设计风格的规那么n确保注释与代码一致n不要用注释去准确地反复代码使每一个注释有价值n不要注释或修补坏代码重写n运用有意义的变量名n运用有意义的语句标号n程序格式应有助于读者了解程序n为他的数据设计提供文档n仅运用GOTO去实施一个根本的构造Kernighan和Plauger给出的好的程序设计风格的规那么n假设他能坚持程序的可读性,那么完全不用运用GOTOn以小片段的方式写和测试一个大程序n对已定义的递归数据构造运用递归过程n检测输入的合理性和合法性n确保输入没有违反程序的限制n运用文件

8、的结尾或标志终止输入,而不是用计数来终止输入n识别错误的输入假设有能够要恢复输入Kernighan和Plauger给出的好的程序设计风格的规那么n输入简易,输出自明n运用一致的输入格式n使输入容易校正n假设能够,运用自在格式输入n运用自标识的输入,允许缺省,输出时反映这两者n确保在运用之前,一切变量已被置初值n在出现缺点时不要停机n运用排错编译程序Kernighan和Plauger给出的好的程序设计风格的规那么n用DATA语句或INITIAL属性置常数n用可执行的代码置变量初值n尽量留意由错误引起的分岔n留意在相等时转移的正确性n当一个循环从边上或底上退出到同一个地方时,必需非常小心n确保他的

9、代码“没有做什么优美方面的事情n在边值处测试程序n人工核对某些答案Kernighan和Plauger给出的好的程序设计风格的规那么n10.0乘以0.1很少是1.0n不要单独地进展浮点数相等比较n先保证正确,再提高速度n在提高速度之前,做好自动防止缺点的措施n先保证明晰,再提高速度n不要为谋求“效率上的少量增益而牺牲明晰n让他的编译程序做简单的优化n不要滥用再运用代码,取而代之的是改组n确保特殊情况是确实的特殊Kernighan和Plauger给出的好的程序设计风格的规那么n坚持简单,以提高速度n不要浪费代码而提高速度找一个较好的算法n运用工具配备他的程序,在“效率改动以前丈量END程序编码构造

10、要求n采用构造化编码方法n按以下22个特性构造1完好性n任何程序或控制段的开场和终了,必需包含在单一的构造化模块中。2功能n每个模块必需完成单一的定义良好的功能,模块的全部元素都是为了实现独一的功能。n此外,模块实现的细节对其它模块来说应该是隐蔽的。假照实现的细节改动,直接受影响的只是实现功能的那个模块,并且只需该模块需求修正。3入口出口n每个模块普通要求单一入口和单一出口。处置完成后,模块必需前往到调用它的程序而不是其它模块。n接口入口与出口条件和参数必需明确表示和定义。4阐明n模块的阐明语句和数据语句应放在程序首部之后和第一个可执行语句之前,虽然允许每行可有多个数听阐明,但应保证明晰地定义

11、复杂的数据构造。5常量n常量必需在程序的阐明中定义,常量通常有数组规模、值、DO和FOR 循环中的循环数、数组下标、记录规模和行长度等。6变元n在调用语句中的变元普通不得包含算术或逻辑表达式。n每个变元必需由单一变量来表示。n在调用一个模块的过程中,变元的类型和个数必需与模块的形参相一致。n此外,必需标明调用过程中运用的形参。7幂n幂的指数必需用整数表示,即而不是3.0。8混合方式运算n应防止运用混合运算的算术表达式,不能防止时应仔细计算表达式的值,以保证类型转换得到预期的结果,应对转换进展适当的注释。9转移n尽量少用无条件转移语句。如需运用,必需在同一程序单元内转移,并应向转移语句所在点的前

12、方转移。n允许运用为实现构造化程序设计所必需的转移指令。10错误处置a.必需记录一切错误的发生及处置情况,保管系统发生错误的全部记录,以利于后续错误情况的处置和分析;b.必需预先了解错误的潜在影响,并且在它们出现之前确定如何处置;c.应尽能够使错误不分散,不引起连锁反响;d.当程序不能执行时,必需在中止前释放已获得的全部资源和结果。11范围检查n为保证变量值落在预期的范围内,必需进展范围检查。n假设变量值不在规定范围内,那么必需进展适当的错误处置。n变量的定义域必需在设计时规定,在实现时声明,并在运转时检查。n必需进展范围检查的变量应包括:参数;数值下标;CASE构造中的变量参数;循环构造中用

13、作初值、增量和终值的变量。12序标和下标n循环序标参数和数值下标必需表示为整型的常量或变量。13循环终止n必需保证循环终止,终止条件不能靠对循环参数所作假设的正确性,而是靠对循环入口事前直接的验证。14标号和名字的运用n标号和名字必需有意义、一致并明显、独一,不易混淆。15全局变量和共享变量n应防止运用全局或共享变量。当一个变量由两个或多个模块共享时,每个模块都必需正确地运用该变量。n由多个模块运用的变量应作为变元进展通讯。限制变量的范围有助于掌握变量的准确含义。n当有明确的技术根据需求运用公共数据时,应有以下限制:na.仅运用可由名字访问的公用域;nb.公用数据域的长度和阐明,对于运用它的每

14、个模块都是一样的;nc.能够时,应仅保管公用块的一个副本,而且必需用“INCLUDE 语句包容在每一个模块中而不是在模块中各自编码描画。16衔接商定n假设模块是用汇编言语实现的,那么必需定义和运用模块间通讯的规范商定。目的是构造独立的、自包容的模块,它可以用良好定义的方法与其它模块通讯。n应思索的商定有:na.在将控制转给其它模块之前必需维护存放器的内容,并在控制前往时恢复;nb.通讯必需经过变元素;nc.必需有一个与调用模块前往地址进展通讯的规范方法。17输入与输出n输入例程和输出例程必需集中在有限几个模块内。n将这些例程聚集到少数几个模块中有利于输入和输出数据的监控。n此外,将这些例程限制

15、在有限范围内可使修正更容易。18命名n代码和数据单元的名字必需表达它们的功能和内容。19程序首部n每个代码模块必需包含一个规范化的程序首部注释语句块,作为每个程序模块的内部源文档。它放在模块的首部,描画模块的功能、用途和操作要求。n程序首部应包括下面的信息:na.称号:包含用于标识模块的称号、版本标识符和入口。nb.目的:包含模块目的功能的简要阐明。程序首部n程序首部应包括下面的信息: nc.输入输出,包含该模块所运用的每个文件名,并指明是向模块输入、还是输出、还是两者兼有。运用交互式屏幕的模块也应提供屏幕功能的阐明。nd.参数:提供模块所需的全部变元的定义以及模块的前往值输出参数。参数定义必

16、需包括:名字、数据类型、大小和功能。ne.调用:提供该模块调用的全部例程的清单和调用该模块的全部例程的清单。nf.全局数据:提供模块中运用的全部公用或全局数据的清单。程序首部n程序首部应包括下面的信息:ng.限制:包含约束或限制模块性能特点的任何特殊或非常规要素的清单。nh.异常终了:包含异常前往条件和动作的清单。ni.方法:包含为实现模块的功能而运用的方法的详细阐明。nj.编程者:代码编制人名及所属机构。nk.版本号及完成日期:当前的模块版本号和它的完成日期。nl.修正记录:包含对该模块的修正人、所属机构、日期及对应的版本号。20行间注释n源程序体内的注释必需解释程序执行的处置,必需指明每一

17、个控制语句有条件地更改一个数据值或语句的执行顺序的语句的目的。na.IF语句:阐明条件满足时执行动作的理由。nb.I/O语句:标明处置的记录或文件的性质。nc.DO语句:阐明执行动作的理由。nd.CALL语句:阐明调用过程的理由。21注释比例n注释行数不得少于源程序总行数的。22缩进和分段n源代码必需清楚地缩进表达,以阐明构造化程序段外形的控制范围,使编码的逻辑关系对应于程序列表的实践位置。n可执行语句限于每行一条。n超越一行的语句的后续部分应缩进该语句的第一行下面。n一行允许有多个数听阐明。数听阐明应运用某种逻辑顺序例如字母顺序陈列。23模块规模n每个软件单元的源代码行数不含注释行,平均不应

18、超越行,最大不应超越行。静态分析n静态分析是经过分析、但不执行软件的程序,找出其中的错误和疑点n静态分析手段之一,就是运用工具对软件单元甚至软件一切成分的源代码进展分析,获得以下主要信息:n语法错误信息;每个语句中标识符的援用分析,如变量、参数等;每个模块调用的子模块;未给初值的变量;已定义的但未运用的变量;未经阐明或无用的标号;对任何一组输入数据均不能够执行到的代码段n可以根据所获信息对程序进展分析,发现其中能够存在的缺陷n还可以经过静态分析确定程序的分支、途径、转移等构造关系,为进展动态测试产生测试数据提供方便圈复杂度程序复杂性度量nMcCabe圈复杂度V(G) 7n将程序流程图退化为程序

19、图,将程序流程图中每个处置符号都退化为一个点,箭头变成有向弧,调整使成为强连通图nV(G)=m-n+pnm=弧数nn=节点数np=分别部分的数目连通图p=1代码审查n代码审查是由代码审查员根据软件详细设计阐明,按照规定的代码审查单,对被审查的程序代码逐条进展审查,以确保编码与设计的一致并确保编码的正确性n代码审查应着重审查错误代码而不是多余代码或代码的脱漏n各软件开发机构应根据本身情况和所开发的软件的特点,构成并不断补充完善本人运用的代码审查单通用的代码审查单格式:嵌套的IF能否已正确地缩进?注释准确并有意义吗?能否运用了有意义的标号?代码能否根本上与开场时的模块方式一致?能否遵照全套的编程规

20、范?通用的代码审查单入口和出口的衔接:初始入口的最终出口正确吗?对另一个模块的每一次调用: 全部所需的参数能否已传送给每一个被调用的模块? 被传送的参数值能否正确地设置?通用的代码审查单程序文语的运用:能否运用一个或一组最正确的动词?模块中能否运用完好定义的言语的有限子集?存储器运用:每一个域在第一次运用前正确地初始化了吗?规定的域正确吗?每个域能否已由正确的变量类型声明?通用的代码审查单测试和转移:测试条件正确吗?用于测试的是正确变量吗?每个转移目的正确并至少执行一次吗?性能:逻辑能否被最正确地编码?提供的是普通的错误还是异常的例程?通用的代码审查单维护性:所提供的列表控制能否有利于提高可读

21、性?标号和子程序名符合代码的意义吗?逻辑:全部设计能否均已实现?编码能否做了设计所规定的内容?每个循环能否执行正确的次数?END调试n调试的义务:诊断和矫正程序中的错误n调试的步骤:n根据迹象确定错误的正确位置n仔细分析研讨以确定问题的缘由并进展矫正n确定错误位置占调试95%的任务量n错误矫正后要进展回归测试n修正程序能够带来新的错误错误的特征和调试的困难n病症和缘由能够是相隔很远的n病症能够在另一个错误被纠正后消逝或暂时性消逝n病症能够实践上并不是由“错误引起的如舍入误差n病症能够是由不太容易跟踪的人工错误引起的n病症能够是和时间有关的,而不是处置问题n很难重新产生完全一样的输入条件照实时运用n病症能够时时有时无的n病症能够是由分布在许多不同义务中的缘由引起的调试技术n输出存储器内容n打印中间结果n自开工具自动插装调试战略n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论