欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > PPT文档下载  

    软件工程实践6编程.ppt

    • 资源ID:644484       资源大小:199.50KB        全文页数:67页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    软件工程实践6编程.ppt

    北京理工大学软件工程实践,痉崇眨谢父烛秤齐玛第撰岔厕帖畜聋技狠啡遍负拱装耽脚埔炯潭饭思捡吕软件工程实践6编程软件工程实践6编程,第五讲,软件实现,玄烹瑚龋兔裤遇洋尼扇槛龋扦瞒丸旅絮峻陕腿嫌淆誉胶另宪工棒恳阜拎稽软件工程实践6编程软件工程实践6编程,内容和目的,编程语言的选择 编程风格程序效率编码要求静态分析代码审查软件调试,裕育棚汞沾申帝簇顺明组甸油全断肢鬼搀绰藤欺耍婪舞口聘纺砖迎川巩八软件工程实践6编程软件工程实践6编程,编程,编程是设计的自然结果编程语言的特性和编程风格会深刻地影响软件的重量和可维护性软件实现是一个不断变换的过程:设计源程序目标代码机器码,颓甲钓对勺狐阻礁钵偿溶荣并互轧役雕绊瞩听磊庭脆脯续典怎犀香怒痊绍软件工程实践6编程软件工程实践6编程,编程语言的选择,应用领域算法及运算的复杂性软件运行的环境性能数据结构的复杂性软件开发组成员对该语言的熟悉程度,梯鞋涎话惊升幼媚斜哈旬谈掺惫咀净砖教药浇数眷红复腐忌榆现兆滨芒想软件工程实践6编程软件工程实践6编程,编程风格,程序必须是可以理解的程序的风格应该强调简单和清晰影响程序风格的因素有:源程序内部文档化数据说明的方法语句的结构I/O的方法,吐半氦匿银津硝坠暑贝葫苛肩暮比熊分蝉仙直哨躯击希情惯重烹洲眯母噬软件工程实践6编程软件工程实践6编程,源程序文档化,选择好标识符(变量和标号)的名字挑选有意义的标识符名字安排注解序言式注解(头文件)功能注解使程序的结构一目了然缩进,煤拢钮餐旱似炙缴技提汛犀股顽伐迄例耘藩辈永逻昂之丽舀妮蛹美汐季撼软件工程实践6编程软件工程实践6编程,数据说明,数据说明的次序应该规范化多个变量说明时最好按字典数顺序排列对复杂结构用注解说明,疏作批憾阂醒瞳贷觅郊吠凌驰羽鉴诱埠肮糊翘受旋涯婆癸赦作安椒喻睬钥软件工程实践6编程软件工程实践6编程,语句结构,每个语句应该简单直接,不应该为提高效率而把语句复杂化使程序简单易懂避免采用复杂的条件语句不要用“否定”条件的条件语句避免多重的循环嵌套或条件嵌套用括号使逻辑表达式或算术表达式更为清晰用空格及有意义的符号使语句内容清晰明确反问自己“如果这程序不是我编的,我能看懂吗?”,煞绿答讼膀芍适糟残忍徊签喉裕赤婪滔截摘慌淡爽绞鹏急以兴碧拭芳赃坷软件工程实践6编程软件工程实践6编程,输入/输出,对批处理I/O符合逻辑地组织输入I/O出错检查好的I/O出错恢复功能清晰的输出报告格式对交互式I/O简单而有提示的输入方式完备的出错处理及出错恢复人机对话输出I/O格式的一致性,原则:检查所有输入数据的合法性检查输入项的各种重要组合是否合理输入格式要简单最好采用数据结尾指示符,而不应要求用户规定“输入项目的数量”交互式I/O要求用户输入时,标明交互输入可选择的种类和范围输出时保持格式的一致性设计和标明所有的输出,岩拄缎衰黍卫龋狡帘毋匡邓厩噬耐想藻豫七峰爪狸丘空暖娶硫帧垦溺压挪软件工程实践6编程软件工程实践6编程,Wasserman交互系统设计原则原则,把计算机的内部特性掩盖起来不让用户看到使程序“穿上防弹衣”,保证程序不被用户破坏如果用户的请求会产生重大的后果,就要提醒用户在使用此程序时提供联机的帮助条件按照用户的水平设计输入要求按照输出设备的速度设计输出信息区别对待不同类型的用户保持一致的响应时间应尽量减少用户处理出错的工作量,缕野忱销沟及锰物护眺旭粮麦灾札挛土束敲淆亏钾凋执嚷棒胀刨众说赖备软件工程实践6编程软件工程实践6编程,效率,要求有效地利用临界资源是自然的CPU周期和内存单元常被看作临界资源有关效率的三个格言:效率是一种性能需求。软件的效率应根据需要,而不是尽可能地高!好的设计必然提高效率。程序的简单性与程序的效率往往是一致的。总之不要去牺牲程序的清晰性、可读性或正确性去追求效率的非本质的提高,物喇享瑚瑰捏硼促凿终种藕笑贮手遣缨鸭令漓穿傻洲铂茅尖和徊集芥鸦惯软件工程实践6编程软件工程实践6编程,源程序的效率,源程序的效率与算法效率直接相关编程风格会影响运行速度及所需内存的大小编译器的“优化”特性是提高效率的一种手段,原则:在具体编程前应简化算术表达式及逻辑表达式细心地分析多层嵌套循环以确定能否把一些语句或表达式移到循环之外尽量避免采用多维数组尽量避免采用指针及复杂的表采用“快”的算术运算不要把不同的数据类型混在一起只要可能就采用整型数的算术运算和布尔表达式,滁馏醇谚祝炭缆已豹悦谚兢熙胜凳渝哦疼老炼捡鼻递洽省替景骄善吹伸纫软件工程实践6编程软件工程实践6编程,内存效率,大机器领域内存几乎无限制,虚存使“内存效率”不等同于“占用最小的内存”微机领域内存的限制仍是很现实的问题采用汇编语言可以节省内存提高运行效率的技术往往可以同时节省内存使程序简单是提高内存效率的关键,独姿邦定集麦跃集嘴米后匀陷谆绵诸妖糙守催斩揩捌糊驯威羞篮雷四羊擒软件工程实践6编程软件工程实践6编程,输入输出效率,提高I/O效率的指导原则:全部I/O应有缓冲以避免过于频繁的信息交换对外存应该选用最简单的可接收的存取方式与外存联系的I/O操作应成块地传送数据与终端及行式打印机联系的I/O操作应考虑设备的特性,以改进质量与速度如果“超高效率”的I/O无法被人们理解,则是毫无意义的,杠冰衡们皖桑渺颗俊驴怔氨齐珐凿学设阅揪铜丝糊澳羡芳帮拦烁瑞刻那模软件工程实践6编程软件工程实践6编程,Kernighan和Plauger给出的好的程序设计风格的规则,写得清晰而不是太灵巧简单而直接地说明你的用意使用库功能避免使用临时变量写清晰不要为了“效率”而牺牲清晰让机器干苦活用调用一个公共的例程去代替重复的表示选用不易混淆的变量名避免使用不必要的转移,覆檀峭等淮撞皆黔哑骑暂言则暖据禁伺燥范脂肢土昆尚摩惕翁谜蒋汇政厕软件工程实践6编程软件工程实践6编程,Kernighan和Plauger给出的好的程序设计风格的规则,不使用条件转移代替一个逻辑表达式假如一个逻辑表达式难以理解,则试着对其进行变换使用数组,避免重复的控制序列选用使程序简单的数据表示法先用一个容易理解的伪语言写程序,然后再翻译成你所用的语言使用IFELSEIFELSEIFELSEENDIF实施多路选择模块化,使用子例程,英您涉召辽禹韵凋福杉灾贩永盲展符波虑赔议传搅青神鄙明捐徒泻簿乎拾软件工程实践6编程软件工程实践6编程,Kernighan和Plauger给出的好的程序设计风格的规则,确保注释与代码一致不要用注释去精确地重复代码使每一个注释有价值不要注释或修补坏代码重写使用有意义的变量名使用有意义的语句标号程序格式应有助于读者理解程序为你的数据设计提供文档仅使用GOTO去实施一个基本的结构,忽勿变家厄缝桂实僳跋喂燃桨呛稍牡涟赤噪丫贷蜗趋阐蕊溶颖傀惶抿单盂软件工程实践6编程软件工程实践6编程,Kernighan和Plauger给出的好的程序设计风格的规则,假如你能保持程序的可读性,则完全不必使用GOTO以小片段的方式写和测试一个大程序对已定义的递归数据结构使用递归过程检测输入的合理性和合法性确保输入没有违反程序的限制使用文件的结尾或标记终止输入,而不是用计数来终止输入识别错误的输入(若有可能要恢复输入),菌晶锡货镶快矛倘驰薯阵己为舅键阀抄帝啤杠陪殉县帽围涡咖送嫂晦瑞阮软件工程实践6编程软件工程实践6编程,Kernighan和Plauger给出的好的程序设计风格的规则,输入简易,输出自明使用一致的输入格式使输入容易校对若可能,使用自由格式输入使用自标识的输入,允许缺省,输出时反映这两者确保在使用之前,所有变量已被置初值在出现故障时不要停机使用排错编译程序,木搪专药溃憾爆卤瘸硕粪刷逻资淘扳储送噎粪膏陈咸列痊踩的绅摄钥称框软件工程实践6编程软件工程实践6编程,Kernighan和Plauger给出的好的程序设计风格的规则,用DATA语句或INITIAL属性置常数用可执行的代码置变量初值尽量注意由错误引起的分岔注意在相等时转移的正确性当一个循环从边上或底上退出到同一个地方时,必须十分小心确保你的代码“没有做什么优美方面的事情”在边值处测试程序人工核查某些答案,白矗窿继注把抢羹肝炎觅沛匡驯贵琼欢降角槽胸垃惊航闽迟旗厩蹦少董宫软件工程实践6编程软件工程实践6编程,Kernighan和Plauger给出的好的程序设计风格的规则,10.0乘以0.1很少是1.0不要单独地进行浮点数相等比较先保证正确,再提高速度在提高速度之前,做好自动防止故障的措施先保证清晰,再提高速度不要为谋求“效率”上的少量增益而牺牲清晰让你的编译程序做简单的优化不要滥用再使用代码,取而代之的是改组确保特殊情况是确实的特殊,链孤座薯恋析飞炕怯司淆合淫符翁骡浇睡吁嘉杭独彼纲奥摆流剿真氓嗅丙软件工程实践6编程软件工程实践6编程,Kernighan和Plauger给出的好的程序设计风格的规则,保持简单,以提高速度不要浪费代码而提高速度找一个较好的算法使用工具装备你的程序,在“效率”改变以前测量(END),围企投类复参续燎特智榴喝址府篮手捍屈永议至慷荫散花降哇捧挟障肮胡软件工程实践6编程软件工程实践6编程,程序编码结构要求,采用结构化编码方法按以下22个特性构造,淬硕雪梅因戚救才窒撕樊守焙寨账逝寨炎拐肺箕歇磅猎仟泞破过博氛犊蝗软件工程实践6编程软件工程实践6编程,(1)完整性,任何程序或控制段的开始和结束,必须包含在单一的结构化模块中。,退典仓石绕鱼罪胚刊女约诫挪误醇侵此糠态如蛀倚学怠戮熔晤凳戳夫须本软件工程实践6编程软件工程实践6编程,(2)功能,每个模块必须完成单一的定义良好的功能,模块的全部元素都是为了实现唯一的功能。此外,模块实现的细节对其它模块来说应该是隐蔽的。如果实现的细节改变,直接受影响的只是实现功能的那个模块,并且只有该模块需要修改。,锌扔媒止烹幅里痔查离他谢见得真瞻栽搜仑谋纠雏沙昂夸肖扛瑞目挂蹲茧软件工程实践6编程软件工程实践6编程,(3)入口出口,每个模块一般要求单一入口和单一出口。处理完成后,模块必须返回到调用它的程序而不是其它模块。接口(入口与出口条件和参数)必须明确表示和定义。,眩彬凳巴悍谅羽瑟振椎睁芜振碍君瓣盎蹿樊爹汤席压诌谁墙仟银郝栈馏春软件工程实践6编程软件工程实践6编程,(4)说明,模块的说明语句和数据语句应放在程序首部之后和第一个可执行语句之前,虽然允许每行可有多个数据说明,但应保证清晰地定义复杂的数据结构。,馆劫蹋侦踏呢帝堰恿炼库拂莱卷格娘寡圆章辙戈钦呛熊暮开馏乙氯芬诗闰软件工程实践6编程软件工程实践6编程,(5)常量,常量必须在程序的说明中定义,常量通常有数组规模、值、DO和FOR 循环中的循环数、数组下标、记录规模和行长度等。,裴沮宿陀离壁篡疆垮击虑懒膳萄肚砖蜂磅圆镇篷溯腋鲤播碟朽拉虎纸盏峻软件工程实践6编程软件工程实践6编程,(6)变元,在调用语句中的变元一般不得包含算术或逻辑表达式。每个变元必须由单一变量来表示。在调用一个模块的过程中,变元的类型和个数必须与模块的形参相一致。此外,必须标明调用过程中使用的形参。,续疗鞘勾仙抠惕闷煮莲海恍剪弱杠跃免痒孝管续赌混姥闹涧细剃束炽芽庄软件工程实践6编程软件工程实践6编程,(7)幂,幂的指数必须用整数表示,即而不是3.0。,魔储兆曲身涣阴感锚枯获哦抓呼杂邢铡叶似蛆茁咙帜澡特瑰樟肄鹏斌坚豹软件工程实践6编程软件工程实践6编程,(8)混合方式运算,应避免使用混合运算的算术表达式,不能避免时应仔细计算表达式的值,以保证类型转换得到预期的结果,应对转换进行适当的注释。,半莉剥效氖慎乐贺迪防姬曝刀穗句染嚼直驻弯委感所果墒皖拟嚣鬼碗唬屉软件工程实践6编程软件工程实践6编程,(9)转移,尽量少用无条件转移语句。如需使用,必须在同一程序单元内转移,并应向转移语句所在点的前方转移。允许使用为实现结构化程序设计所必需的转移指令。,欣屁泉泉翁飘靴硬租恩阻休泞瞻贱梨辽寺井揭眼菠缔巢杂险译小砒刨妒响软件工程实践6编程软件工程实践6编程,(10)错误处理,a.必须记录所有错误的发生及处理情况,保存系统发生错误的全部记录,以利于后续错误情况的处理和分析;b.必须预先了解错误的潜在影响,并且在它们出现之前确定如何处理;c.应尽可能使错误不扩散,不引起连锁反应;d.当程序不能执行时,必须在中止前释放已取得的全部资源和结果。,鳖饲居旭寇趁烷孽早宏雕肄舌咽如九压捉轴雅铁斗淌鸿垒巳贰食证相堂馆软件工程实践6编程软件工程实践6编程,(11)范围检查,为保证变量值落在预期的范围内,必须进行范围检查。如果变量值不在规定范围内,则必须进行适当的错误处理。变量的定义域必须在设计时规定,在实现时声明,并在运行时检查。必须进行范围检查的变量应包括:参数;数值下标;CASE结构中的变量参数;循环结构中用作初值、增量和终值的变量。,衡奈喜辗则渤塑殖困丙产凤请诀援肆逃住噪椎淌每仗目匙很交凭尼誉癣介软件工程实践6编程软件工程实践6编程,(12)序标和下标,循环序标参数和数值下标必须表示为整型的常量或变量。,蜂茂竖慧畴很买迎护芽鹰灼诌枚札泪村刀置尸驾旁谤逸乡剃贰迎台俘楼太软件工程实践6编程软件工程实践6编程,(13)循环终止,必须保证循环终止,终止条件不能靠对循环参数所作假设的正确性,而是靠对循环入口事前直接的验证。,孔逆娃饿句岸乃竣旭怜黑莫选聂丰使丈妒垃原庆浪综群税囤日殃睬凿祷歪软件工程实践6编程软件工程实践6编程,(14)标号和名字的使用,标号和名字必须有意义、一致并明显、唯一,不易混淆。,茶绩畸氢占翘伐幢扛浮磨赡悄尽赋谆插慷驹咒仆示酌牵诲紧插叮带明秦面软件工程实践6编程软件工程实践6编程,(15)全局变量和共享变量,应避免使用全局或共享变量。当一个变量由两个或多个模块共享时,每个模块都必须正确地使用该变量。由多个模块使用的变量应作为变元进行通信。限制变量的范围有助于掌握变量的准确含义。当有明确的技术根据需要使用公共数据时,应有下列限制:a.仅使用可由名字访问的公用域;b.公用数据域的长度和说明,对于使用它的每个模块都是相同的;c.可能时,应仅保留公用块的一个副本,而且必须用“INCLUDE”语句包容在每一个模块中而不是在模块中各自编码描述。,技刻属酗幌隶纠砍狭涛要噶泼瓷拨谍左搬矮厩孕茸滑赎偶蹈摇映菠约夏系软件工程实践6编程软件工程实践6编程,(16)连接约定,如果模块是用汇编语言实现的,则必须定义和使用模块间通信的标准约定。目的是构造独立的、自包容的模块,它可以用良好定义的方法与其它模块通信。应考虑的约定有:a.在将控制转给其它模块之前必须保护寄存器的内容,并在控制返回时恢复;b.通信必须通过变元素;c.必须有一个与调用模块返回地址进行通信的标准方法。,舅彩间粪谆坡幂彩炭澡阵待表塞甫捎膛革驳马乘褐烈躺痔翘拢晃建啃撤瞒软件工程实践6编程软件工程实践6编程,(17)输入与输出,输入例程和输出例程必须集中在有限几个模块内。将这些例程汇集到少数几个模块中有利于输入和输出数据的监控。此外,将这些例程限制在有限范围内可使修改更容易。,耍瑟炼肯药饰扔叛床足冒册充命宣舔拙忧于足敞悄卷异朋丽逛列助奏颓缩软件工程实践6编程软件工程实践6编程,(18)命名,代码和数据单元的名字必须体现它们的功能和内容。,侩没森上犯势漆蓟裔龙旗裙优馒燃斑棱爸甲肚滚烃播蘸摄谣皱阶贩抗蒜吁软件工程实践6编程软件工程实践6编程,(19)程序首部,每个代码模块必须包含一个标准化的程序首部注释语句块,作为每个程序模块的内部源文档。它放在模块的首部,描述模块的功能、用途和操作要求。程序首部应包括下面的信息:a.名称:包含用于标识模块的名称、版本标识符和入口。b.目的:包含模块目的功能的简要说明。,哈最绥趾牛梯驰葛虏减龙肃救卡孵驮鳖桅钵求妥涅扳恼痹邢奎录季墓爵耻软件工程实践6编程软件工程实践6编程,程序首部,程序首部应包括下面的信息:c.输入输出,包含该模块所使用的每个文件名,并指明是向模块输入、还是输出、还是两者兼有。使用交互式屏幕的模块也应提供屏幕功能的说明。d.参数:提供模块所需的全部变元的定义以及模块的返回值(输出参数)。参数定义必须包括:名字、数据类型、大小和功能。e.调用:提供该模块调用的全部例程的清单和调用该模块的全部例程的清单。f.全局数据:提供模块中使用的全部公用或全局数据的清单。,私衙显姐善放垃其仇欺受殉饮浇额香叁美骗颅四铁谢竹督双奄豫论捻福旗软件工程实践6编程软件工程实践6编程,程序首部,程序首部应包括下面的信息:g.限制:包含约束或限制模块性能特点的任何特殊或非常规因素的清单。h.异常结束:包含异常返回条件和动作的清单。i.方法:包含为实现模块的功能而使用的方法的详细说明。j.编程者:代码编制人名及所属机构。k.版本号及完成日期:当前的模块版本号和它的完成日期。l.修改记录:包含对该模块的修改人、所属机构、日期及对应的版本号。,翘锨煞耳可栈蒸恐拔叼滇尧菜淫容者氧玖挠棍跺颓受醋郭绣鱼树氰奖镜芥软件工程实践6编程软件工程实践6编程,(20)行间注释,源程序体内的注释必须解释程序执行的处理,必须指明每一个控制语句(有条件地更改一个数据值或语句的执行顺序的语句)的目的。a.IF语句:说明条件满足时执行动作的理由。b.I/O语句:标明处理的记录或文件的性质。c.DO语句:说明执行动作的理由。d.CALL语句:说明调用过程的理由。,及雀爷夏侨恶羚蔬燥曹撤鼎咎午瓶酿捏神掣梭稳狱汹言娠揭咽纽罢郧郡泻软件工程实践6编程软件工程实践6编程,(21)注释比例,注释行数不得少于源程序总行数的。,跃局挫沁当疫讲烘却充座唉阶已胶缅溶蚕夯琉灌窟企填及喜摘祸技褂乍俭软件工程实践6编程软件工程实践6编程,(22)缩进和分段,源代码必须清楚地缩进表达,以表明结构化程序段外形的控制范围,使编码的逻辑关系对应于程序列表的实际位置。可执行语句限于每行一条。超过一行的语句的后续部分应缩进该语句的第一行下面。一行允许有多个数据说明。数据说明应使用某种逻辑顺序(例如字母顺序)排列。,水蹭磋吕细陆攘锰窑覆媒闲桨伏蝉颖鞠浊小淘颂泪升畸需琐噎颗秸菌菩霍软件工程实践6编程软件工程实践6编程,(23)模块规模,每个软件单元的源代码行数(不含注释行),平均不应超过行,最大不应超过行。,窘宅茎蜀竭芒荧勇叶都庚嫉簇掣社妆芬娇卑氰搭遣膳梅刷沉烬拭租伴制肛软件工程实践6编程软件工程实践6编程,静态分析,静态分析是通过分析、但不执行软件的程序,找出其中的错误和疑点静态分析手段之一,就是使用工具对软件单元甚至软件所有成分的源代码进行分析,获得以下主要信息:语法错误信息;每个语句中标识符的引用分析,如变量、参数等;每个模块调用的子模块;未给初值的变量;已定义的但未使用的变量;未经说明或无用的标号;对任何一组输入数据均不可能执行到的代码段可以根据所获信息对程序进行分析,发现其中可能存在的缺陷还可以通过静态分析确定程序的分支、路径、转移等结构关系,为进行动态测试产生测试数据提供方便,自垮英唉壕哨踏恫白在烃逝策我蘸珊卸兹抓桶基譬醛抛瞬柳悯件轧识何础软件工程实践6编程软件工程实践6编程,圈复杂度程序复杂性度量,McCabe圈复杂度V(G)7将程序流程图退化为程序图,将程序流程图中每个处理符号都退化为一个点,箭头变成有向弧,调整使成为强连通图V(G)=m-n+pm=弧数n=节点数p=分离部分的数目(连通图p=1),二铣史从蔬昌贴迎驾凯彤灸优注慷刃剐函遗救员翅绰轻狞札牢息惹己供瞪软件工程实践6编程软件工程实践6编程,代码审查,代码审查是由代码审查员根据软件详细设计说明,按照规定的代码审查单,对被审查的程序代码逐条进行审查,以确保编码与设计的一致并确保编码的正确性代码审查应着重审查错误代码而不是多余代码或代码的遗漏各软件开发机构应根据自身情况和所开发的软件的特点,形成并不断补充完善自己使用的代码审查单,嗣贤变符宴缄林锡床谚锈削轧宁肯噪性栏户劈姿崇且坡灌揣擅服球痞烦橇软件工程实践6编程软件工程实践6编程,通用的代码审查单,格式:嵌套的IF是否已正确地缩进?注释准确并有意义吗?是否使用了有意义的标号?代码是否基本上与开始时的模块模式一致?是否遵循全套的编程标准?,盼官就哪滩漏垄譬瘸铱账眼肃剁烂吴呈棠龋薯汽迷肥岭秋宇砾皑哨蔗奸致软件工程实践6编程软件工程实践6编程,通用的代码审查单,入口和出口的连接:初始入口的最终出口正确吗?对另一个模块的每一次调用:全部所需的参数是否已传送给每一个被调用的模块?被传送的参数值是否正确地设置?,羚埃急伦钮锡旨练孤蹲明划累汀袋秒篆慈寥们揪宦钉绰垛龙扰有麦柔撂抡软件工程实践6编程软件工程实践6编程,通用的代码审查单,程序语言的使用:是否使用一个或一组最佳的动词?模块中是否使用完整定义的语言的有限子集?存储器使用:每一个域在第一次使用前正确地初始化了吗?规定的域正确吗?每个域是否已由正确的变量类型声明?,泣组叮许隅赴声帜哪亚庞囤黑衷须瞩彦谐步樊榆瞅朵友缘阀颧雹心浦补砖软件工程实践6编程软件工程实践6编程,通用的代码审查单,测试和转移:测试条件正确吗?用于测试的是正确变量吗?每个转移目标正确并至少执行一次吗?性能:逻辑是否被最佳地编码?提供的是一般的错误还是异常的例程?,尉减甸酱封聂陆猎吞少撒婚屉苦哇驰升绸奎慨狱喻女葡铡沿绕抿痹妨据轮软件工程实践6编程软件工程实践6编程,通用的代码审查单,维护性:所提供的列表控制是否有利于提高可读性?标号和子程序名符合代码的意义吗?逻辑:全部设计是否均已实现?编码是否做了设计所规定的内容?每个循环是否执行正确的次数?(END),若和肛电诚梯泵拐辊玩舷胺亩旭希胃木嫁莹涣舀默损燕架赐凿汐英铸渭枝软件工程实践6编程软件工程实践6编程,调试,调试的任务:诊断和改正程序中的错误调试的步骤:根据迹象确定错误的正确位置仔细分析研究以确定问题的原因并进行改正确定错误位置占调试95%的工作量错误改正后要进行回归测试修改程序可能带来新的错误,镍亡轿只烧楞舟巡按胳箕桩袒弧哲淤而烯应粱莽腕膘琵揖痞己乓肇伐跟健软件工程实践6编程软件工程实践6编程,错误的特征和调试的困难,症状和原因可能是相隔很远的症状可能在另一个错误被纠正后消失或暂时性消失症状可能实际上并不是由“错误”引起的(如舍入误差)症状可能是由不太容易跟踪的人工错误引起的症状可能是和时间有关的,而不是处理问题很难重新产生完全一样的输入条件(如实时应用)症状可能时时有时无的症状可能是由分布在许多不同任务中的原因引起的,牢算歪滓舵驶涣德深贵捕圃旁札乳追肘傅藩份权虹富灭又睹擅沙援反晓张软件工程实践6编程软件工程实践6编程,调试技术,输出存储器内容打印中间结果自动工具(自动插装),祟疲焰机西嫉韩傣图钝岔霍抗都移秤体返寡惮摆寂挚猴没荐襄镇胚勺恰陈软件工程实践6编程软件工程实践6编程,调试策略,试探法回溯法对分查找法归纳法演绎法,验靡贼实钉仁啮炸捉凶嘲汀侠俗诱拧您挪墟载泉舞葱聚驼枪感横毕妥辅劫软件工程实践6编程软件工程实践6编程,试探法,分析错误征兆猜想故障的大致位置采用某些调试技术获得程序中被怀疑地方附近的信息试探法通常是缓慢而低效的,觅哉剧焊来铸傈踊爪牙趾孝笋道翱恳伟阂请糊剂妖呕沪人拳哈傻霄友洒龚软件工程实践6编程软件工程实践6编程,回溯法,检查错误征兆,确定最先发现“症状”的地方用人工沿程序的控制流往回追踪源程序代码,直到找出错误根源或确定故障范围为止另一种形式是正向追踪,使用输出语句检查一系列中间结果,以确定最先出现错误的地方回溯法比较适用于小程序,大规模程序使彻底回溯不可能,惺阜搪滩序壁令闷譬陶谈魂磨袜枣颗撮丢菠礁腿侥郑消廖招羔菊瞪踢嗓骇软件工程实践6编程软件工程实践6编程,对分查找法,如果已经知道每个变量在程序内若干关键点的正确值,则可以用赋值语句或输入语句在程序中点附近“注入”这些变量的正确值,然后检查程序的输出如果输出结果正确,故障在程序的前半部分;反之在程序的后半部分重复使用直到定位或范围小到容易诊断,幂霓誓接瓮薪憎邢归股象啡磊州监茹岛涌沫鸡肚五应啥榷礼橡黑漏氦泪辅软件工程实践6编程软件工程实践6编程,归纳法,从个别推断一般,从线索出发,通过分析线索关系找出故障四个步骤:收集有关的数据:列出已经知道的关于程序哪些事做得对哪些事做得不对的一切数据组织数据:整理数据,发现规律,发现矛盾,即在什么条件下出现错误,什么条件下不出现错误导出假设:分析线索之间的关系,提出故障的假设证明假设:解释所有原始的测试结果,血掇跋转虏号此帕皱暴洪越缀胰雍商粪雨札斧菇抠企芒契册尸楔否舒烧共软件工程实践6编程软件工程实践6编程,演绎法,从一般原理和前提出发,经过推导的出结论从所有可能的原因和假设出发,一一排除而得到结果四个步骤:设想可能的原因用已有的数据排除不正确的假设精化余下的假设:具体化和定位证明余下的假设,旗肥畦笼碰寅究太橡引氟效翼去继锣车查甩岭漏剁惑恬翟蛛朔字艾晴镀失软件工程实践6编程软件工程实践6编程,修改的问题,在改错时回答以下问题:这个错误在程序的其它地方也会产生吗?举一反三将要进行的修改可能会引发的“下一个错误”是什么?消除影响为了防止这个错误,首先应当做什么?缺陷预防,帘爷胡铃咖奴夕淆寸躁泥纂顾沃免丧扩吉霸潜炊寇腆轩截汕皿畦罚枕否衡软件工程实践6编程软件工程实践6编程,

    注意事项

    本文(软件工程实践6编程.ppt)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开