第九章软件实现课件_第1页
第九章软件实现课件_第2页
第九章软件实现课件_第3页
第九章软件实现课件_第4页
第九章软件实现课件_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第九章软件实现第九章软件实现1程序员的秉性•具备诚实的品性–勤奋的程序员在调试无穷多的Bug时,已经深深地体会了“诚实”的意义•信奉简单实用主义–程序员的基本工作是将复杂的问题转化为计算机能处理的一些简单的程序•喜欢技术挑战–程序员喜欢接触新技术,愿意攻克技术难题–高水平的程序员喜欢与高水平的程序员一起工作–这种喜好可能导致程序员干活偏离项目真正的需求程序员的秉性•具备诚实的品性2程序员应具备的能力•基础知识–英语的功底–数学基础(算法分析与设计)–计算机科学基础知识•基本技能–认识事务的能力(抽象、模型、结构、层次)–做事的逻辑性和条理性–沟通技能、演讲技巧和团队协作能力–学习新知识和新技术的能力•职业化训练和实践经验程序员应具备的能力•基础知识3如何做好程序员•职业道德

–上班时间不干与工作无关的事情•你如何看待上班玩游戏?•下班后待在公司里干与工作无关的事情行不行?–不损害集体利益•常见的损害行为:泄密、盗取成果•怎样减少无意的泄密?–不干危害社会的事情•你如何看待黑客行为?•问题:在大学生涯中,如何培养这些素质?如何做好程序员•职业道德4如何做好程序员•工作态度–认真负责•在办公室老实上班,工作时间比别人长,是“认真负责”吗?•怎样是真正意义的“认真负责”?–服务意识•程序员要为后续阶段和产品质量的工作提供服务•你对用户提出的要求应采取什么态度?–团队协作•如何在团队中发挥自己的作用?•问题:在课程实验中,你对上述要求有体会吗?如何做好程序员•工作态度5如何做好程序员•高效率地工作

–合理安排一天的时间

•你怎样安排一天的时间?如何保证精力充沛的?

–开会

•如何看待会议?怎样使得会议效率高?

–处理电子邮件

•电子邮件是很好的通信工具,但使用不当可能损害工作效率

•你认为以什么方式处理电子邮件比较好?

–随时记录

•你是否有随时记录问题和灵感的习惯?如何做好程序员•高效率地工作6如何做好程序员学无止境–不断学习新技术•“主动”学习是很关键的•学习的内容完全依赖个人的喜好吗?–提高综合才能•缺乏表达能力和管理能力是软件开发人员的通病•应该真正学会软件工程的思想–向错误和失败学习•抓住一切机会,勇于实践•随时有面对无知和承认错误的勇气,善于总结和提高如何做好程序员学无止境7软件编码规范•软件编码规范–与特定语言相关的描写如何编写代码的规则集合•现实–软件全生命周期的70%成本是维护–软件在其生命周期中很少由原编写人员进行维护•目的–提高编码质量,避免不必要的程序错误–增强程序代码的可读性、可重用性和可移植性软件编码规范•软件编码规范8软件编码规范•基本要求

–程序结构清析且简单易懂,单个函数的行数一般不要超过100行(特殊情况例外)。–算法设计应该简单且直接了当,代码要精简,避免出现垃圾程序。–尽量使用标准库函数(类方法)和公共函数(类方法)。–最好使用括号以避免二义性。•问题:以下示例有什么问题?如何修改?if(cond1&&cond2||cond3&&cond4||cond5&&cond6)doSomethings();软件编码规范•基本要求9软件编码规范•可读性要求:可读性第一,效率第二。•举例:JAVA程序的标准格式(课本P198示例9.1)–文件结构•说明版权和版本信息的文件头注释•package和import语言•类和接口说明语句–Section结构•Class/interface的注释•Class/interface语句•Class/interface实现注释(必要时)•Class(static)变量•Instance变量(public,protected,package,private)•Constructors•Methods(以功能进行分组)软件编码规范•可读性要求:可读性第一,效率第二。10软件编码规范•举例:JAVA程序注释(课本P205示例9.6)

–三种风格:文档风格、C语言风格、单行注释–注意事项

•程序中的注释不能过多•不必要注释含义已经十分清楚的代码•修改代码时应该同时修改注释,以保证注释和代码的一致性•注释应当准确易懂,防止出现二义性•注释的位置应该与被描述的代码相邻,应该写在程序代码的上方并且和代码左对齐•变量定义和分支语句(条件分支、循环语句等)必须写注释,因为这些语句往往是程序实现某一特定功能的关键。软件编码规范•举例:JAVA程序注释(课本P205示例911软件编码规范代码的版式:适当的空行代码行及行内空格分行、对齐与缩进命名规则声明注释软件编码规范代码的版式:12软件编码规范软件编码规范的要求:可读性要求:可读性第一,效率第二。结构化要求正确性与容错性要求可重用与可移植性要求软件编码规范软件编码规范的要求:13错误严重性•问题:

–编译没有错误是否说明程序没有错误?–如何发现程序中的逻辑错误或语义错误?•严重性是代码检查的基本特性,通过其分类可以划定错误的优先顺序,以便理性地调度工作。•错误的严重性

–严重的:需求没有满足–很小的:不影响运行和维护–中等的:除了以上两种情况错误严重性•问题:14错误类型•逻辑问题

–遗漏的事件或步骤;重复的逻辑;忽视的前提条件;不必要的函数;误解;忽视的条件测试;检查错误的变量;不正确的循环等•计算问题

–不充分的或不正确的等式表达式;精确性的损失;符号约定错误•接口/时间问题

–不正确的中断处理;不正确的I/O时间分配;不匹配的子程序•数据处理问题

–不正确的数据初始化;不正确的数据访问或数据存储;不正确的数据标量值或单位;不正确的数据维数•不正确的数据范围错误类型•逻辑问题15错误类型•数据问题–不正确或缺少敏感数据;不正确或缺少操作数据;不正确或缺少表中的嵌入数据;不正确或缺少外部数据;不正确或缺少输出数据;不正确或缺少输入数据•文档问题–模糊说明等•文档的质量–可适用的标准不匹配等•之前修改引起的错误•互操作性问题–与其他软件或构件不兼容错误类型•数据问题16代码检查清单

•代码检查:类–类的命名是否与需求和设计相符?–能否是抽象的?–类的头部是否说明了该类的目的?–类的头部是否引用了相关的需求和设计元素?–是否说明了该类所从属的包?–是否尽量地私有(private)?–应该是final(Java语言)吗?–是否已经应用了文档标准?代码检查清单

•代码检查:类17

代码检查清单

代码检查:属性代码检查:构造函数代码检查:方法头代码检查:方法体

代码检查清单

代码检查:属性18

实例分析例1:程序注释•程序注释的原则–注释应当浅显、明白–注释不是程序员指南–注释不是标准库函数参考手册–注释的主要任务是答疑解惑而不是增加程序的行数–好的注释是对设计思想的精确表述和清晰展现•问题:–例1的程序注释存在什么问题?–按照上述原则,如何修改例1的程序注释?

实例分析例1:程序注释19

例2:变量命名规则例2所示的程序风格如何?你能够容易理解吗?

例2:变量命名规则例2所示的程序风格如何?你能够容易理解20

例3:内存问题•例3所示的程序运行时会崩溃,其中有四处足以让程序崩溃的错误,找出错误并改加以正。•总结

–非法内存访问的基本特征是代码访问了不该访问的内存地址–某些“自由的”语言更容易引发内存错误(如C/C++)–要避免产品中出现内存错误,好的编码规范、所选的语言和工具、有效的测试等工作都是有意义的

例3:内存问题•例3所示的程序运行时会崩溃,其中有四处足21

例3:内存问题•内存的分配方式–从静态存储区域分配内存在编译时已分配好,在程序的整个运行期间都存在。例如:全局变量、静态变量等。–在堆栈上创建在函数执行期间,函数内的局部变量(包括形参)的存储单元都创建在堆栈上,函数结束时这些存储单元自动释放(堆栈清退)。–从堆(heap)上分配,也称动态内存分配程序运行期间用malloc或new申请任意数量的内存,程序员自己掌握释放内存的恰当时机(使用free或delete)。

例3:内存问题•内存的分配方式22

例3:内存问题建议–使用malloc或new申请内存之后,应该立即检查指针值是否为NULL(或进行异常处理),以防使用值为NULL的指针。–不要忘记初始化指针、数组和动态内存,防止将未初始化的内存作为右值使用。–避免数组或指针下标越界,特别要当心“多1”或“少1”操作。–动态内存的申请与释放必须配对,防止内存泄漏。–使用free或delete释放了内存之后,立即将指针置为NULL,防止产生“野指针”。

例3:内存问题建议23

例4:例外处理

•总结–异常处理机制相当有用,但同时也容易被误用而导致代码结构混乱–在使用异常处理的过程中,小心其中可能存在的内存问题–有必要认真把握异常处理中的跳转和嵌套机制

例4:例外处理

•总结24

例5:性能问题•例5所示程序的写法对程序的执行速度有所影响,请找出相关地方并进行改进。•总结–改进算法可以显著提高速度–将代码和数据保存在更快的介质上同样可以显著提高速度–编译优化选项并不总能提高速度

例5:性能问题•例5所示程序的写法对程序的执行速度有所25

习题

习题26

习题第一个for循环的代码简练且结构清晰,但效率较低;第二个for循环的执行效率较高,但结构不够紧凑。

习题第一个for循环的代码简练且结构清晰,但效率较低;27

习题

习题28

习题程序1:系统运行崩溃。原因:GetMemory(str,100)并没有将申请到的内存传回到调用程序,str一直是NULL,从而导致非法内存访问,使程序崩溃。

习题程序1:系统运行崩溃。29

习题

习题30

习题程序2:显示“HelloWorld.”

温馨提示

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

评论

0/150

提交评论