




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程,第5讲 编码 、编码风格和程序复杂性,第5讲 编码 、编码风格和程序复杂性,5.1 编码的目的和任务 5.2 编码风格 5.3 程序复杂性度量,5.1 编码的目的,目的 把模块的过程性描述翻译为用选定的程序设计语言书写的源程序(源代码)。 依据 编码的主要依据是概要设计和详细设计说明文档。 任务 理解概要设计和详细设计说明书; 遵循编码原则和风格进行翻译,形成源代码。,编码中的问题,编码中产生的问题大多数是由于设计的错误或缺陷引起的,程序的质量首先取决于设计的质量。但编码仍然对程序的可靠性、可读性、可测试性、可维护性、执行效率产生深远的影响。 编码产生的源程序应该是正确、可靠,简明清晰,运行效率高。但是,保持程序的清晰就可能会降低程序的效率。 编码与选择的程序设计语言/工具有密切的关系。,5.2 编码风格,编码风格(程序设计风格Programming Style) 程序员习惯使用的编码方式。 好的编码风格可以使编写的程序更容易阅读、更容易修改。 早期的编码风格强调效率第一、占用内存少、包含的功能多。 现在的编码风格则强调“清晰第一,效率第二”。 现在的编码风格主要以可理解性、可修改性、可测试性为主要目标。,主要的编码风格,有意义的命名 清晰的表达式 使用标准的控制结构 限制使用GOTO语句 清晰与效率 实现源程序的文档化 输入/输出,(1)有意义的命名,一个名字用于标识这个对象时,应该带着说明其用途的一些信息。它应该是非形式的、简练的、容易记忆的,如果可能的话,最好是能够拼读的。 全局变量/局部变量 函数/过程(可采用名词或动宾结构) 常量 文件名/文件夹,例如在C+中类的成员有如下定义: class CTestView private: int m_iCounter; public: void GetCounter() return iCounter; ,前缀“m_ ”表示是成员变量,用“g_”表示全局变量。,“i”表示整数数据类型,动宾结构,例如C语言中的名字命名 #define MAXLENTH 80 #define STEP 10 char *strcpy(char *str1,char *str2) int search(char s,char c) void preorder(treenode *root) 文件名如,studentlist,(2)清晰的表达式,清晰、简单地表达意图,例,用C语言编程计算三角形的面积 :根据数学知识,若三直边a、b、c构成三角形,则必须满足条件:任意两边的之和大于第三边。,#include #include void main() float a,b,c,s,area; scanf(“%f,%f,%f“,#include #include void main() float a,b,c,x,y,z,s,area; scanf(“%f,%f,%f“,可以变为,(3)使用标准的控制结构,遵循单入口、单出口原则。 采用结构化程序设计所允许的基本控制结构。,if c then s; if c then s1 else s2; switch(i) case s1: case s2: ,While (c) do s ; Do s while (c); for(i=n;im; i+) s ,例 把非结构化程序改为结构化程序。,非结构化: While ( p ) do g; if(not q) then goto l; l:,结构化: flag=true; While ( p and flag ) do g; if( not q ) then flag=false; 问题思考: 通过这个例子,同学们是否可以把二重循环或三重循环的这类结构转换为结构化的?,不允许转上,但可以转下,(4)限制使用GOTO语句,提倡从深层次循环中退出 while c1 do s11; while c2 do s21; while c3 do s31; if c4 goto label; s32; s22; s12; label:,问题思考:这类结构如何向结构化转换?,goto语句的另外一种用法:转向出错处理。下例是一个堆栈的进栈操作,堆栈的最大容量是100。,int push(float fitem,int index,float stack) int iFlag=0; if(index=100) goto 10; index+; stackindex=fitem; return iFlag; 10: iFlag=1; return iFlag; ,注:本例可以用IF-THEN-ELSE结构进行描述,但本例对于堆栈满的处理更为醒目。,(5)清晰与效率的指导原则 先使程序正确,再提高运行速度; 使程序清楚,再使其快速;,(6)实现源程序的文档化,“软件=程序+文档” 有了详尽的文档,即使没有源程序,也能再现该软件。注释是文档化的一部分。 文档化包括以下内容: 使用有意义的变量名、标号(前已述) 适当的注释 别为每一条语句注释 注释应该与程序保持一致 注释数据布局 采用缩格方式排列程序结构 适当使用空格或圆括号等做隔离符,2种重要的注释: 序言性注释:模块首部 有关模块的功能说明 界面描述: 该模块被调用的语句格式; 所有参数的解释; 该模块需要调用的模块等; 一些重要变量的使用、限制等 开发历史,如 作者、日期 复查者、复查日期 修改者、修改日期 相关叙述等 描述行注释 功能性描述:程序段的功能说明,放在段首; 状态性的描述:说明数据的状态,放在段尾。,例 序言性注释,/ /SetGraphicValue()的作用是设置当前图片的属性 /fSdWendu 设定的温度 /fSdShidu 设定的湿度 /StartTime 代表整个图的起始时间 /TableTimeSpan 代表一帧图象的时间跨度 /bProgram 代表当前图片是否用于编辑程序 / void SetGraphicValue(float fSdWendu,float fSdShidu,CPoint YValue,time_t StartTime,time_t TableTimeSpan,BOOL bProgram) ,PSP建议的C+编码标准,例 PSP(Personal Software Process )建议的C+编码标准 (1),例 PSP建议的C+编码标准 (2),例 PSP建议的C+编码标准 (3),(7)I/O风格,绝大多数计算机系统都是人-机交互系统,故界面友善是十分重要的。 输入方面: 对输入数据进行有效性检验 输入格式力求简单、一致 给用户足够多的提示信息 组合检验时消除似是而非的选择 输出方面: 给输出数据必要的说明 报表、报告具有良好的格式 能提供“在线”帮助,5.3 程序复杂性度量,程序复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少,开发周期的长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。 定量度量程序的复杂性是很有用的方法。 Halstead McCabe 交叉复杂度,Halstead n1程序中出现的不同的运算符的个数 n2程序中出现的不同的运算对象的个数 N1程序中出现的运算符总个数 N2程序中出现的运算对象总个数 程序长度N N1+N2 估计程序长度 N0=n1logn1+n2logn2 估计错误数 E=Nlog2(n1+n2)/3000,预测的程序长度: N0n1log2n1+n2log2n210log210+7log27 52.87 实际的程序长度: NN1+N228+2250,McCabe环域复杂度 McCabe度量法是一种基于程序控制流的复杂性度量方法,它基于一个程序模块的程序图中环路的个数。 计算方法 V(G)=M-N+2P M有向图G中的弧数(注: M不含附加弧) N有向图G中的结点数 P有向图G中分离部分的数目。 正常情况,程序图是连通的但不是强连通的。 但可加一条弧从结束处连到开始处,可使程序图构成强连通图,此时, P1。可有 V(G)=M-N+P( (注: M含附加弧) =M-N+1 =判定结点数+1,例McCabe计算方法 “求一个有n个元素的数组中的最大者”的算法。用伪语言描述: START INPUT n ; INPUT a(i) ( i=1,2,n); max= a(1) ; FOR i=2 TO n,DO IF maxa(i) THEN max=a(i); PRINT max END V(G)=M-N+11191 3 判定结点数1 21 3,McCabe建议,对于复杂度超过10的程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年汽车制造行业新能源汽车技术应用与市场前景研究报告
- 2025年摄影器材行业摄影器材市场趋势分析研究报告
- 2025年数字娱乐行业市场发展与消费趋势分析报告
- 2025年人工智能教育行业发展态势与市场前景分析报告
- 2025年生物科技行业生物制药市场发展预测研究报告
- 2025年电影行业影视市场变化趋势与国际合作研究报告
- 教师职业道德行为规范与要求
- 眉山会计从业资格考试及答案解析
- 2025期货从业资格考试统考及答案解析
- 机动车安全员证考试题库及答案解析
- 2024外研版初中英语单词表汇总(七-九年级)中考复习必背
- 《大数据平台部署与运维》课程标准(含课程思政)
- CT检查设备十大品牌简介
- 英语中的时间表达(示范课例)
- 项目产品研发各阶段质量控制输出文件
- 2021苏教版科学(2017)五年级上册全册全单元知识点总结
- 脊柱外科进修汇报
- 《史记》上册注音版
- 苏州大学文学院语言学纲要课程笔记
- 危重症患者护理文书书写规范-课件
- 《学术英语(综合)》课后答案
评论
0/150
提交评论