《软件工程课件ch10软件实现.ppt》由会员分享,可在线阅读,更多相关《软件工程课件ch10软件实现.ppt(28页珍藏版)》请在三一办公上搜索。
1、1,第十章软件编码(Software Coding),信息学院计算机系 张翠肖,2,内容提要,正确理解软件编码软件编码的含义程序员应具备的能力软件编码规范目的与意义编码规范的要求软件代码检查错误的严重性与类型代码检查清单实例分析,3,Professional Programmer Software Engineer正确观点:软件编码是一个复杂而迭代的过程,包括程序设计和程序实现。软件编码要求正确地理解用户需求和软件设计思想正确地根据设计模型进行程序设计正确地而高效率地编写和测试源代码软件编码是设计的继续,会影响软件质量和可维护性,10.1 正确理解软件编码,4,10.1 正确理解软件编码,软件
2、编码的工作,5,软件编码的工作程序设计理解软件的需求说明和设计模型补充遗漏的或剩余的详细设计设计程序代码的结构设计审查检查设计结果记录发现的设计缺陷(类型、来源、严重性)编写代码应用编码规范进行代码编写所编写代码应该是易验证的,10.1 正确理解软件编码,6,代码走查确认所写代码完成了所要求的工作记录发现的代码缺陷(类型、来源、严重性)编译测试,10.1 正确理解软件编码,7,10.1 正确理解软件编码,编码过程与文档流,8,基础知识英语的功底数学基础(算法分析与设计)计算机科学基础知识基本技能认识事物的能力(抽象、模型、结构、层次)做事的逻辑性和条理性沟通技能、演讲技巧和团队协作能力学习新知
3、识和新技术的能力,10.2 程序员应具备的能力,9,个人素质方面,聪明有自我发展能力足够自信,有很强的工作驱动能力,知道如何开展工作沉着与镇定有创新精神 对待产品和技术 热爱技术,热心解决问题 针对变化和创新,有良好的适应和管理能力,举例:微软公司对员工的要求,10,举例:微软公司对员工的要求,注重客户的反馈,所有员工都要以客户为中心开展工作 员工代表公司的形象,团队合作方面,有团队精神,具备良好的交流能力 善于与人相处,你怎样看待这些要求?,11,内容提要,正确理解软件编码软件编码的含义程序员应具备的能力软件编码规范目的与意义编码规范的要求软件代码检查错误的严重性与类型代码检查清单实例分析,
4、12,10.2 编码规范,软件编码规范与特定语言相关的描写如何编写代码的规则集合现实软件全生命周期的 70%成本是维护软件在其生命周期中很少由原编写人员进行维护目的提高编码质量,避免不必要的程序错误增强程序代码的可读性、可重用性和可移植性,13,基本要求程序结构清析且简单易懂,单个函数的行数一般不要超过 100行(特殊情况例外)算法设计应该简单且直接了当,代码要精简,避免出现垃圾程序尽量使用标准库函数(类方法)和公共函数(类方法)。最好使用括号以避免二义性,10.2 编码规范,14,编码规范的要求,可读性要求:可读性第一,效率第二。,源程序文件应有文件头说明,函数应有函数头说明。,主要变量(结
5、构、联合、类或对象)定义或引用时,注释要,能够反映其含义。,常量定义有相应说明。,处理过程的每个阶段都有相关注释说明。在典型算法前都有注释。一目了然的语句不加注释。应保持注释与代码完全一致。,利用缩进来显示程序的逻辑结构,缩进量统一为 4 个字节,不,得使用 Tab 键的方式。,对于嵌套的循环和分支程序,层次不要超过五层。,15,编码规范的要求,举例:JAVA 程序的标准格式(课本 P198 示例 9.1),文件结构,说明版权和版本信息的文件头注释 package 和 import 语言 类和接口说明语句,Section 结构,Class/interface 的注释 Class/interfa
6、ce 语句,Class/interface 实现注释(必要时)Class(static)变量,Instance 变量(public,protected,package,private),Constructors,Methods(以功能进行分组),16,编码规范的要求,举例:JAVA 程序注释(课本 P205 示例 9.6),三种风格:文档风格、C 语言风格、单行注释 注意事项,程序中的注释不能过多,不必要注释含义已经十分清楚的代码,修改代码时应该同时修改注释,以保证注释和代码的一致性 注释应当准确易懂,防止出现二义性,注释的位置应该与被描述的代码相邻,应该写在程序代码的上方,并且和代码左对齐,
7、变量定义和分支语句(条件分支、循环语句等)必须写注释,因,为这些语句往往是程序实现某一特定功能的关键。,17,编码规范的要求,命名规则,标识符的命名应当直观,可以望文知义,最好采用英文单词,或其组合;,标识符的长度应当符合“最小长度下的最大信息”原则,过长的英文单词应该采用一些通用而合理的缩写或者应用领域专业术语的缩写;,程序中不要出现仅依靠大小写来区分的相似标识符;,程序中不要出现局部变量和全局变量同名的现象,免得引起,误解;,变量名应当使用“名词”或者“形容词名词”的形式;函数名应当使用“动词”或者“动词名词”的形式。,18,编码规范的要求,命名规则,类和接口的命名采用以大写字母开头的单词
8、组合而成;常量名采用全大写的单词组合而成,并在单词之间用单下划,线分隔,但是首尾最好不使用下划线;,变量名和参数名采用第一个单词首字母小写而后面的单词首,字母大写的单词组合;,可以使用前缀s_(表示 static)区别静态变量,在不得以使用全局变量时可以加前缀g_(表示 global),类的成员变量加前缀m_(表示 member)可避免成员变量与成员函数参数同名;函数名采用第一个单词首字母小写而后面的单词首字母大写的单词组合,同时使用 get、set和 is表示访问器函数。,19,编码规范的要求,结构化要求,禁止使用 GOTO(C 语言)语句。,用 IF 语句来强调只执行两组语句中的一组,禁止
9、 ELSE GOTO,和 ELSE RETURN。,避免从循环中引出多个出口,应保留函数(方法)只有一个,出口。,问题:以下示例有什么问题?如何修改?,p=(char*)malloc(300);if(cond1 0)strcpy(p,str);,else return;free(p);,20,编码规范的要求,正确性与容错性要求,程序首先是正确,其次是考虑优美和效率。,对所有的用户输入,必须进行合法性和有效性检查。所有变量在调用前必须被初始化。,改一个错误时可能产生新的错误,因此在修改前首先考虑对,其它程序的影响。,单元测试也是编程的一部分,提交联调测试的程序必须通过,单元测试。,21,编码规范
10、的要求,可重用与可移植性要求,重复使用的且完成相对独立功能的算法或接口,应该考虑封装成公共的控件或类,如时间、日期处理,字符串格式处理,数据库连接,文件读写等,以提高个人是系统中程序的复用或协同开发过程中程序的可重用。,相对固定和独立的程序实现方式和过程,应考虑做成程序模板,增强对程序实现方式的复用,如对符合一定规范的 XML数据的解析等过程。,22,内容提纲 正确理解软件编码 软件编码的含义 程序员应具备的能力 软件编码规范 目的与意义 编码规范的要求,You are here!你在这儿!,实例分析,23,例 1:程序注释,程序注释的原则,注释应当浅显、明白 注释不是程序员指南,注释不是标准
11、库函数参考手册,注释的主要任务是答疑解惑而不是增加程序的行数 好的注释是对设计思想的精确表述和清晰展现,问题:,例 1 的程序注释存在什么问题?,按照上述原则,如何修改例 1 的程序注释?,24,例 2:程序注释,例 2 所示的程序风格如何?你能够容易理解吗?编程人员的理由,使用 z 打头的变量名、函数名、宏定义名就像是为自己的旅行,箱贴标签,将 void,int,float 等基本数据类型重新命名,可以在最大程度上,保证代码的可移植性,使用宏定义表示一些基本的功能运算可以大幅度减少源程序,的行数,也可以被后者方便地复用,使用高度简练的缩写可以加强源代码的保密程度,你是否认同上述理由?为什么?
12、,25,例 3:内存问题,例 3 所示的程序运行时会崩溃,其中有四处足以让程,序崩溃的错误,找出错误并改加以正。,总结,非法内存访问的基本特征是代码访问了不该访问的内存地址 某些“自由的”语言更容易引发内存错误(如 C/C+),要避免产品中出现内存错误,好的编码规范、所选的语言和,工具、有效的测试等工作都是有意义的,26,例 3:内存问题,内存的分配方式,从静态存储区域分配,内存在编译时已分配好,在程序的整个运行期间都存在。例如:全局变量、静态变量等。,在堆栈上创建,在函数执行期间,函数内的局部变量(包括形参)的存储单元都创建在堆栈上,函数结束时这些存储单元自动释放(堆栈清退)。,从堆(hea
13、p)上分配,也称动态内存分配,程序运行期间用 malloc 或 new 申请任意数量的内存,程序员自己掌握释放内存的恰当时机(使用 free 或 delete)。,27,例 3:内存问题,建议,使用 malloc 或 new 申请内存之后,应该立即检查指针值是否为 NULL(或进行异常处理),以防使用值为 NULL 的指针。不要忘记初始化指针、数组和动态内存,防止将未初始化的,内存作为右值使用。,避免数组或指针下标越界,特别要当心“多 1”或“少 1”操作。动态内存的申请与释放必须配对,防止内存泄漏。,使用 free 或 delete 释放了内存之后,立即将指针置为 NULL,,防止产生“野指针”。,28,例 6:性能问题 例 6 所示程序的写法对程序的执行速度有所影响,请找出相关地方并进行改进。总结 改进算法可以显著提高速度 将代码和数据保存在更快的介质上同样可以显著提高速度 编译优化选项并不总能提高速度,编译与执行环境Win2000,cl,程序修改前代码修改后代码,优化无/02无/02,运行时间(秒)5.36810.7762.9542.694,