软件工程CH6.ppt
- 文档编号:18123231
- 上传时间:2023-08-13
- 格式:PPT
- 页数:67
- 大小:2.13MB
软件工程CH6.ppt
《软件工程CH6.ppt》由会员分享,可在线阅读,更多相关《软件工程CH6.ppt(67页珍藏版)》请在冰点文库上搜索。
1,2023/8/13,软件工程,主讲人:
张博E_Mail:
QQ:
20550326,2023/8/13,2,第六章编码,问题定义,可行性研究,可行否?
需求分析,终止项目,开发时期,主要内容6.1编码概念6.2程序设计语言6.3编码风格6.4编码工具,概要/详细设计,编码,2023/8/13,3,6.1编码概念,程序设计语言的特性、程序设计风格会深刻地影响软件的质量和可维护性。
概要设计报告,详细设计报告,源程序清单,程序设计语言,2023/8/13,4,6.1编码概念,【目标】产生正确可靠、简明清晰、具有较高效率的源程序。
【说明】源代码越是简明和清晰,就越便于验证源代码和设计文档的一致性,越容易对它进行测试和维护;清晰和效率却常常会有矛盾。
清晰性好的程序一般效率较低;要求效率高的程序往往清晰度不太好。
对于大多数模块,编码时应该把简明清晰放在效率前。
2023/8/13,5,6.1编码概念,【目标】产生正确可靠、简明清晰、具有较高效率的源程序。
【结构化的程序设计】严格控制GOTO语句,2023/8/13,6,6.1编码概念,例1:
打印A、B、C中的最小值程序1if(AB)goto120;if(BC)goto110;100write(C);goto140;110write(B);goto140;120if(AC)goto130;goto100;130write(A);140end,2023/8/13,7,6.1编码概念,例1:
打印A、B、C中的最小值程序2if(AB)and(AC)thenwrite(A);elseif(AB)and(BC)thenwrite(B);elsewrite(C);endifendif,2023/8/13,8,6.1编码概念,【目标】产生正确可靠、简明清晰、具有较高效率的源程序。
【结构化的程序设计】严格控制GOTO语句使用语言中基本控制结构表示程序逻辑顺序、选择、重复;选用的控制结构只准许有一个入口和一个出口;,2023/8/13,9,6.1编码概念,例2:
二分法求方程f(x)0在区间a,b中的根(假设在闭区间a,b上函数f(x)有唯一的一个零),2023/8/13,10,6.1编码概念,例2:
二分法求方程f(x)0在区间a,b中的根程序1f0=f(a);f1=f(b);if(f0*f10)x0=xm;f0=fm;elsex1=xm;finish:
printf(xm);,正常出口,非正常出口,2023/8/13,11,6.1编码概念,例2:
二分法求方程f(x)0在区间a,b中的程序2f0=f(a);f1=f(b);if(f0*f10)x0=xm;f0=fm;elsex1=xm;printf(xm);,正常出口,非正常出口,2023/8/13,12,6.1编码概念,例2:
二分法求方程f(x)0在区间a,b中的程序3f0=f(a);f1=f(b);if(f0*f10)x0=xm;f0=fm;elsex1=xm;printf();,正常出口,引入变量finished,改for型循环为while型,将单入口多出口结构改为单入口单出口结构。
2023/8/13,13,6.1编码概念,【目标】产生正确可靠、简明清晰、具有较高效率的源程序。
【基本思想自顶向下,逐步求精】把一个模块的功能逐步分解。
详细设计模块功能细化为一系列具体的步骤。
编码阶段用程序设计语言把具体的步骤翻译成一系列的程序。
2023/8/13,14,6.1编码概念,例3:
用筛选法求100以内的素数。
(从2到100中去掉素数2,3,5,7的倍数,剩下的就是100以内的素数。
)【先按程序功能写出一个框架】main()/1、建立2到100的数组A,其中Aii/2、建立2到10的素数表B/3、若Aii是B中任一数的倍数,则剔除Ai/4、输出A中所有没有被剔除的数,2023/8/13,15,6.1编码概念,例3:
用筛选法求100以内的素数。
【对框架中的局部再做细化,得到整个程序】main()for(inti=2;i=100;i+)Ai=i;/1B1=2;B2=3;B3=5;B4=7;/2for(intj=1;j=4;j+)/*3.1检查A所有的数能否被Bj整除并将能被整除的数从A中剔除*/for(intk=2;k=100;k+)/*4.1若Ak没有被剔除,则输出*/,2023/8/13,16,6.1编码概念,例3:
用筛选法求100以内的素数。
【对框架中的局部再做细化,得到整个程序】main()for(j=1;j=4;j+)for(i=2;i=100;i+)if(0=Ai%Bj)Ai=0;/3.1for(i=2;i=100;i+)if(0!
=Ai)printf(“A%d%dn”,i,Ai);/4.1,2023/8/13,17,6.1编码概念,【基本思想自顶向下,逐步求精】优点:
符合人们解决复杂问题的普遍规律。
用先全局后局部,先抽象后具体的过程开发出来的程序具有清晰的层次结构。
同一层节点的细化工作相互独立。
每一步工作仅在上层节点的基础上做不多的设计扩展。
2023/8/13,18,6.2程序设计语言,计算机硬件仅仅知道0和1,有问题需要计算机解决的人,交流的鸿沟,2023/8/13,19,6.2程序设计语言,程序设计语言指编写计算机程序所用的语言,是人与计算机进行交流的工具。
【程序设计语言的特性】会影响人思维和解决问题的方式;会影响人和计算机通信的方式和质量;会影响其它人阅读和理解程序的难易程度。
程序设计语言,计算机硬件仅仅知道0和1,有问题需要计算机解决的人,编码以前一定要慎重地选择一种适当的程序设计语言。
2023/8/13,20,6.2.1程序设计语言分类,按发展过程,程序设计语言分为:
低级语言,高级语言,硬件,依赖于机器,系统软件,硬件,独立于机器,机器语言,汇编语言,2023/8/13,21,6.2.1程序设计语言分类,按发展过程,程序设计语言分为:
低级语言,高级语言,机器语言,汇编语言,人工智能Lisp、Prolog,C、C+、C#JAVA,2023/8/13,22,6.2.3程序设计语言的选择,【适宜的程序设计语言】使编码时困难减少;减少程序测试量;得到更容易阅读、更容易维护的程序。
【选择编程语言的经验准则】系统用户的要求;选择适合应用领域的语言;可以得到的软件工具是否有支持某种语言程序开发的软件工具可以利用人的因素尽量选用程序员和系统维护人员熟悉的语言环境,以节省开发时间,也有利于将来使用和维护工作,2023/8/13,23,6.2.3程序设计语言的选择,【语言选择的一些比较、综合性资料】C/C+是程序员必须掌握的语言吗http:
/2005年11月程序语言世界排行榜揭晓Java居首位http:
/PHP窜红:
革命尚未成功Java仍需努力http:
/perl仍是很有用的语言吗?
http:
/,2023/8/13,24,世界前20位语言排行榜(1-10),2023/8/13,25,世界前20位语言排行榜(11-20),2023/8/13,26,世界前10位语言01-05内发展,2023/8/13,27,6.2.3程序设计语言的选择,【语言选择的一些比较、综合性资料】C/C+是程序员必须掌握的语言吗http:
/2005年11月程序语言世界排行榜揭晓Java居首位http:
/PHP窜红:
革命尚未成功Java仍需努力http:
/perl仍是很有用的语言吗?
http:
/使用VisualC+2005的现代语言功能编写更快的代码http:
/2006年互联网七大趋势观察:
Web2.0将受挫http:
/,2023/8/13,28,6.3编码风格,良好的编码风格能在一定程度上弥补语言存在的缺点,反之,如果不注意风格,即使使用了高级语言也很难写出高质量的程序。
【主要内容】6.3.1程序文档化6.3.2数据说明6.3.3语句结构6.3.4输入/输出6.3.5效率,2023/8/13,29,6.3.1程序文档化,【1、标识符的命名】【2、安排注释】【3、程序的视觉组织】,2023/8/13,30,6.3.1程序文档化,【1、标识符的命名】标识符即符号名,包括模块名、变量名、常量名、标号名、子程序名、数据区名以及缓冲区名等。
名字应有一定实际意义,应能反映它所代表的实际事物。
Times次数的量;Total总量;Average平均值;Sum和。
选择精炼的、意义明确的名字,必要时可使用缩写名字。
注意缩写规则要一致,并且要给每一个名字加注释。
在一个程序中,一个标识符只应用于一种用途。
2023/8/13,31,6.3.1程序文档化,【2、安排注释】注释决不是可有可无的。
注释是程序员与程序读者之间通信的重要手段。
一些正规的程序文本中,注释行的数量占到整个源程序的13到12,甚至更多。
分类:
序言性注释功能性注释,2023/8/13,32,6.3.1程序文档化,【2、安排注释】序言性注释置于每个模块的开头部分,给出整体说明,对于理解程序本身具有引导作用。
对明确规定序言性注释要求程序编制者逐项列出。
2023/8/13,33,6.3.1程序文档化,【2、安排注释】序言性注释程序标题:
有关本模块功能和目的的说明。
主要算法接口说明:
调用形式,参数描述有关数据描述:
重要的变量及其用途,约束或限制条件模块位置:
隶属于哪一个软件包开发简历:
模块设计者,复审者,复审日期等修改日期、修改原因,2023/8/13,34,6.3.1程序文档化,【2、安排注释】功能性注释嵌在源程序中,用以描述其后的语句或程序段是在做什么工作好描述其后的程序段在做什么工作差解释下面语句怎么做如:
/*ADDAMOUNTTOTOTAL*/TOTAL=AMOUNTTOTAL,差:
在解释下面语句怎么做,2023/8/13,35,6.3.1程序文档化,【2、安排注释】功能性注释嵌在源程序中好描述其后的程序段在做什么工作差解释下面怎么做如:
/*把月销售额计AMOUNT入年度总额TOTAL*/TOTAL=AMOUNTTOTAL,好:
描述其后的程序段在做什么工作,2023/8/13,36,6.3.1程序文档化,【2、安排注释】功能性注释嵌在源程序中,用以描述其后的语句或程序段是在做什么工作好执行了下面的语句会怎么样差解释下面怎么做注意:
描述一段程序,而不是每一个语句。
注释要正确。
2023/8/13,37,6.3.1程序文档化,【3、程序的视觉组织】恰当地利用空格、空行突出运算的优先性,避免发生运算的错误。
如:
(A17)ANDNOT(B49)ORC(A17)ANDNOT(B49)ORC自然的程序段之间可用空行隔开。
2023/8/13,38,6.3.1程序文档化,【3、程序的视觉组织】移行(向右缩进)对于选择语句和循环语句,把其中的程序段向右做阶梯式移行。
使程序的逻辑结构更加清晰。
2023/8/13,39,6.3.1程序文档化,【3、程序的视觉组织】移行(向右缩进)如,两重选择结构嵌套,向右缩进后层次清楚IF()THENIF()THENELSEENDIFELSEENDIF,2023/8/13,40,6.3.2数据说明,注意数据说明的风格。
使程序中数据更易于理解和维护数据说明必须注意以下几点:
1、数据说明的次序应当规范化2、说明语句中变量安排有序化3、使用注释说明复杂数据结构,2023/8/13,41,6.3.2数据说明,【1、数据说明的次序应当规范化】数据说明的次序与语法无关,其次序是任意的。
最好使数据说明的先后次序固定方便阅读、理解。
有利于测试,排错和维护。
2023/8/13,42,6.3.2数据说明,【1、数据说明的次序应当规范化】常量说明简单变量类型说明数组说明同一类型的数据说明按如下顺序排列:
整型说明浮点型说明字符型说明逻辑型说明,2023/8/13,43,6.3.2数据说明,【2、说明语句中变量安排有序化】当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列。
如:
integersize,length,width,cost,price;integercost,length,price,size,width;,2023/8/13,44,6.3.2数据说明,【3、使用注释说明复杂数据结构】如果设计了一个复杂的数据结构,应当使用注释来做必要的补充。
2023/8/13,45,6.3.3语句结构,编码阶段构造单个语句。
语句构造力求简明清晰、直接;不能为了片面追求效率而使语句复杂化。
【1、在一行内只写一条语句】【2、程序编写首先应当考虑清晰性】【3、程序要能直截了当地说明程序员的用意】,2023/8/13,46,6.3.3语句结构,【1、在一行内只写一条语句】在一行内只写一条语句,并且采取适当的移行(向右缩进),使程序的逻辑和功能变得更加明确。
许多程序设计语言允许在一行内写多个语句。
但这种方式会使程序可读性变差,不可取。
2023/8/13,47,6.3.3语句结构,【1、在一行内只写一条语句】如,有一段升序排列程序FORI:
=1TON1DOBEGINT:
=I;FORJ:
=I1TONDOIFAJATTHENT:
=J;IFTITHENBEGINWORK:
=AT;AT:
=AI;AI:
=WORK;ENDEND;,由于一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性变得很差。
2023/8/13,48,6.3.3语句结构,【1、在一行内只写一条语句】FORI:
=1TON-1DOBEGINT:
=I;FORJ:
=I1TONDOIFAJATTHENT:
=J;IFTITHENBEGINWORK:
=AT;AT:
=AI;AI:
=WORK;ENDEND,改进布局1,2023/8/13,49,6.3.3语句结构,【1、在一行内只写一条语句】FORI:
=1TON-1DOBEGINT:
=I;FORJ:
=I1TONDOIFAJATTHENT:
=J;IFTITHENBEGINWORK:
=AT;AT:
=AI;AI:
=WORK;ENDEND,改进布局2,2023/8/13,50,6.3.3语句结构,【2、程序编写首先应当考虑清晰性】【3、程序要能直截了当地说明程序员的用意】程序编写首先应当考虑清晰性不要刻意追求技巧性。
如,有一个用Pascal语句写出的程序段:
Ai:
=AiAt;At:
=AiAt;Ai:
=AiAt;功能交换Ai和At中的内容。
目的节省一个存储单元。
此段程序不易看懂,2023/8/13,51,6.3.3语句结构,【2、程序编写首先应当考虑清晰性】【3、程序要能直截了当地说明程序员的用意】程序编写首先应当考虑清晰性不要刻意追求技巧性。
如,有一个用Pascal语句写出的程序段:
改写后WORK:
=At;At:
=Ai;Ai:
=WORK;,读者一目了然,2023/8/13,52,6.3.3语句结构,【2、程序编写首先应当考虑清晰性】【3、程序要能直截了当地说明程序员的用意】inti;intj;FORi1TONDOFORj=1TONDOV(i,j)(ij)*(ji)除法运算()在除数和被除数都是int时,其结果只取整数部分。
2023/8/13,53,6.3.3语句结构,FORi1TONDOFORj=1TONDOV(i,j)(ij)*(ji)当ij时,V(i,j)=(ij)*(ji)=0当ij时,i/j=0;当ji时,j/i=0;当ij时,V(i,j)=(ij)*(ji)=1,2023/8/13,54,6.3.3语句结构,【2、程序编写首先应当考虑清晰性】【3、程序要能直截了当地说明程序员的用意】inti;intj;FORi1TONDOFORj=1TONDOIF(i=j)V(i,j)1;ELSEV(i,j)0;,2023/8/13,55,6.3.3语句结构,4、除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。
不要为了追求效率、技巧性而丧失了清晰性。
事实上,程序效率的提高主要应通过选择高效的算法来实现。
5、避免采用过于复杂的条件测试。
6、尽量减少使用“否定”条件的条件语句。
IFNOT(CHAR0)OR(CHAR9)THENIF(CHAR0)AND(CHAR9)THEN,2023/8/13,56,6.3.3语句结构,7、避免使用空ELSE语句和IFTHENIF语句。
这种结构容易使读者产生误解。
IF(CHARA)THENIF(CHARZ)THENPRINT“Thisisaletter。
”;ELSEPRINT“Thisisnotaletter。
”,可能产生二义性问题,2023/8/13,57,6.3.4输入/输出,不论是批处理的输入输出方式,还是交互式的输入输出方式,在设计和编码时都应考虑下列原则:
对每个输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;检查输入项的各种重要组合的合理性,必要时报告输入状态信息;使得输入的步骤和操作尽可能简单;保持简单的输入格式,允许用自由格式输入;应允许缺省值;,2023/8/13,58,6.3.4输入/输出,不论是批处理的输入输出方式,还是交互式的输入输出方式,在设计和编码时都应考虑下列原则:
输入一批数据时,不要由用户指定输入数据数目;在交互式输入时,明确提示可使用的选择项、取值范围。
在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;设计输出报表格式。
2023/8/13,59,6.3.5效率,效率是性能要求,应该在需求分析阶段确定效率方面的要求。
效率是靠好设计来提高的。
源程序的效率与详细设计阶段确定的算法的效率直接相关。
详细设计翻译转换成源程序代码后,效率反映:
程序运行时间存储效率输入/输出效率,2023/8/13,60,6.4编码工具,为了高效低成本地生产出高度可靠的程序代码,人们研究出一类特殊的程序,使用它们能减轻人的劳动,提高编码效率和可靠性。
集成开发环境(IDE)VS.Net、Eclipse、JBuilder、Delphi代码管理工具(SourceControl)ClearCaseLT,VCF,WinCVS,SCCS,RCS等,2023/8/13,61,6.4编码工具,代码管理工具作用“即使你的团队只有你一个人,你的项目只需一周的时间;即使那是用过就扔的原型;即使你的工作并非源码;确保每样东西都处在源码控制(SourceControl)之下文档、电话号码表、给供应商的备忘录、makefile、构建与发布流程、烧制CD的shell脚本每样东西。
”程序员修练之道,2023/8/13,62,6.4编码工具,代码管理工具作用大型软件开发项目通常有许多程序员参加编码;程序代码往往分散在许多不同的文件或库中;在不同时期会产生出同一个系统的许多不同版本,这些不同的版本分别适合于不同环境的需要;与大型软件系统相联系的主要问题记录程序开发和维护的历程保证同一个系统的不同版本中公共代码的一致性,2023/8/13,63,TheProblemtoAvoid,2023/8/13,64,TheLock-Modify-UnlockSolution,2023/8/13,65,6.4编码工具,代码管理工具CVS(并行版本系统,ConcurrentVersionSystem)在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。
由仓库管理员统一管理这些源程序。
每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。
用户做的任何修改首先都是在本地进行,然后用cvs命令进行提交,由cvs仓库管理员统一修改。
可以做到跟踪文件变化,冲突控制【参考资料】http:
/,2023/8/13,66,TheCopy-Modify-MergeSolution,2023/8/13,67,代码管理工具subversion、TortoiseSVN【参考资料】http:
/,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 CH6