《软件工程模型与方法 11、软件实现.ppt》由会员分享,可在线阅读,更多相关《软件工程模型与方法 11、软件实现.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程模型与方法软件工程模型与方法Models&Methods of Software Engineering第十一章 软件实现 修佳鹏 2本章内容本章内容u11.1 软件实现概述u11.2 程序设计语言与集成开发环境u11.3 程序设计方法u11.4 程序设计风格u11.5 程序效率311.1软件实现概述软件实现概述u本节内容u11.1.1软件实现的目标 u11.1.2软件实现的任务 411.1软件实现概述软件实现概述u从宏观上讲,软件实现包括详细设计、程序编码、单元测试和集成测试。u从微观上来讲,软件实现指程序编码和单元测试。u程序编码是详细设计的继续,程序编码过程的组织方式,编程语言特
2、性和程序设计风格会对软件的质量即可靠性、可读性、可测试性和可维护性等产生深远的影响。511.1.1软件实现的目标u软件实现的目标就是选择某种程序设计语言,将详细设计结果进行编码实现,并形成可执行的软件系统的过程。u程序编码作为软件工程过程的一个阶段,是详细设计的继续,其输入是详细设计说明书,输出是源程序和可执行程序。611.1.2软件实现的任务u(1)程序设计语言的选择。根据软件系统的特点和设计方案,选择一种或多种程序设计语言作为编码实现的工具。u(2)集成开发环境的选择。集成开发环境是来帮助程序设计者组织、编译、调试程序的开发工具软件。u(3)程序实现算法的设计。针对要实现特定功能的程序模块
3、,设计其实现所需的数据结构和算法。u(4)程序编码实现。明确了上述任务之后,在集成开发环境中使用该程序设计语言,按照设计好的算法和数据结构,将程序实现,并通过集成环境进行调试,发现并改正错误,完成程序编码工作,输出正确的可执行程序。711.2程序设计语言与集成开发环境程序设计语言与集成开发环境u11.2.1程序设计语言简介u11.2.2程序设计语言的选择 u11.2.3集成开发环境简介u11.2.4集成开发环境的选择811.2.1程序设计语言简介1机器语言机器语言u机器语言是由机器指令代码组成的语言,是计算机唯一能够直接识别的语言,由0和1构成,是最早期人与计算机交互的程序语言。u用机器语言编
4、写程序,对程序员要求相当高 u机器语言难于记忆和理解,编写的程序很不直观 911.2.1程序设计语言简介2汇编语言汇编语言u汇编语言比机器语言直观,用助记符代替操作码,用地址符号或标号代替地址码,所以汇编语言亦称为符号语言。u汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点。u汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。1011.2.1程序设计语言简介3高级程序设计语言高级程序设计语言u高级程序设计语言从20世纪50年代末至60年代初开始兴起,它用更接近自然语言的方式表示要完成的操作,高级程序设计语言易理解、易使用、易维护,已经成为
5、目前程序编码的主要工具,按照不同的角度可以分为:编译语言与解释语言;结构化语言与面相对象语言;通用语言与专用语言.1111.2.1程序设计语言简介3第四代语言第四代语言 u第四代语言(Fourth-Generation Language,以下简称4GL)是一种面向问题的程序设计语言,实现了在更高一级层次上的抽象,可以极大地提高软件生产率,缩短软件开发周期。u按照4GL的功能可以将其划分为查询语言和报表生成器、图形语言、应用生成器、形式规格说明语言等几类。1211.2.2程序设计语言的选择u程序设计语言的选择是程序编码的第一步,开发人员需要根据软件类型、质量要求、技术水平等多方面进行综合考虑,选
6、择适当的程序设计语言,一般从以下几个方面考虑:软件的应用领域;系统用户的要求;现有的工具环境;开发环境成本;程序员的水平 软件可移植性的要求 1311.2.3集成开发环境简介集成开发环境简介 u集成开发环境(IDE:Integrated Development Environment)IDE通常指运行在Windows操作系统中的图形界面软件系统,其将编辑源程序、调试程序、生成可执行文件等功能集成到一起,极大方便了程序员的编程工作。uIDE通常至少由一个编辑器、一个编译器工具链和一个调试器组成,目前常用的IDE通常包含以下功能:项目和源代码的管理功能;源代码编辑提示功能;编辑功能。包括复制、粘贴
7、、查找、替换等;1411.2.3集成开发环境简介集成开发环境简介 程序跟踪调试功能;生成可执行文件功能;与其他插件结合的功能;屏幕管理功能。u目前比较常用的IDE包括:微软公司的Visual Studio,开源的JAVA集成开发环境Eclipse,Borland公司的Delphi、C+Builder、JBuilder等,使用IDE进行程序编码的优点有:快速生成项目的文件结构;快速生成源文件的框架代码;具有提示功能,快速找到需要使用的数据结构和函数;能够提示详细的调试信息,有利于快速发现错误;方便完成复杂的部署工作。1511.2.4集成开发环境的选择u每种程序设计语言都有多种由不同厂家、不同机构
8、提供的集成开发环境,这些集成开发环境在外观、易用性、能力等方面都存在着一些差异,在选择集成开发环境的时候,主要考虑以下因素:程序员的熟悉程度;开发环境的费用;软件的易用性;集成环境的成熟度;与其他软件的配合;软件规模。1611.3程序设计方法程序设计方法u本节内容u11.3.1结构化程序设计方法u11.3.2面向对象程序设计方法 1711.3程序设计方法程序设计方法u所谓程序设计方法学就是讨论程序的性质、程序设计理论和方法的科学,包含的内容非常丰富,包括结构化程序设计、面向对象程序设计、程序正确性证明、程序变换、程序的形式说明与推导、程序综合、自动程序设计等。1811.3.1结构化程序设计方法
9、结构化程序设计方法 u结构化程序设计技术是在20世纪60年代末、70年代初为了解决“软件危机”而提出来的,结构化程序设计策略确实提高了程序的执行效率,减少了程序出错的概率,极大减少了维护的费用。u其基本思想是“自顶向下,逐步求精”,即将程序按照功能划分为若干个基本模块,这些模块形成一个树状结构,功能相对独立,每个模块内部均是由顺序、选择和循环三种基本结构组成,模块实现过程中可以使用子程序。1911.3.1结构化程序设计方法结构化程序设计方法 1结构化程序设计的基本原则结构化程序设计的基本原则:(1)使用语言中的顺序、分支、循环等有限的基本控制结构表示程序逻辑;(2)选用的控制结构只准许有一个入
10、口和一个出口;(3)程序语句组成容易识别的块,每块只有一个入口和一个出口;(4)复杂结构应该用基本控制结构进行组合嵌套来实现;(5)语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中应前后一致;(6)严格控制GOTO语句.2011.3.1结构化程序设计方法结构化程序设计方法 1结构化程序采用结构化程序采用“自顶向下,逐步求精自顶向下,逐步求精”方法进行设计方法进行设计先 2111.3.1结构化程序设计方法结构化程序设计方法u例如,要求用筛选法求100以内的素数 main()建立2到100的数组A,其中Aii;-1 建立2到10的素数表B,其中存放2到10以内的素数;-2
11、 若Aii是B 中任一数的倍数,则剔除Ai;-3 输出A 中所有没有被剔除的数;-4上述框架中每一个加工语句都可进一步细化成一个循环语句。2211.3.1结构化程序设计方法结构化程序设计方法umain()u/*建立2到100的数组A,其中Aii*/-1uint A101;ufor(i=2;i=100;i+)Ai=i;u/*建立2到10的素数表B,其中存放2到10以内的素数*/-2uB1=2;B2=3;B3=5;B4=7;u/*若Aii是B 中任一数的倍数,则剔除Ai*/-3ufor(j=1;j=4;j+)u 检查A 所有的数能否被Bj整除并将能被整除的数从A中剔除;-3.1u/*输出A 中所有
12、没有被剔除的数*/-4for(i=2;i=100;i+)若Ai没有被剔除,则输出之;-4.1u继续对3.1和4.1细化下去,直到最后每一个语句都能直接用程序设计语言来表示为止。2311.3.1结构化程序设计方法结构化程序设计方法umain()ufor(i=2;i=100;i+)Ai=i;uB1=2;B2=3;B3=5;B4=7;u/*若Aii是B 中任一数的倍数,则剔除Ai*/ufor(j=1;j=4;j+)u /*检查A 所有的数能否被Bj整除并将能被整除的数从A 中剔除*/u for(i=2;i=100;i+)u if(AiBj*Bj=Ai)Ai=0;u/*输出A 中所有没有被剔除的数*/
13、ufor(i=2;i=100;i+)u /*若Ai没有被剔除,则输出之*/u if(Ai!=0)u printf(“A%d%dn”,i,Ai);u2411.3.2面向对象程序设计方法u面向对象的方法是一种分析方法、设计方法和思维方法。u在面向对象程序设计过程中,类的实现是核心问题。所有的数据和操作都被封装在类的实例中,而整个应用则被封装在一个更高级的类中。u在应用软件的主类中,通过各个类的实例,实现对象之间的通信和操作,从而建立所要实现的应用软件。2511.3.2面向对象程序设计方法1类的关系类的关系 一个类的实现常常在某些方面依赖于其它类的实例,所以实现类的时候就会涉及到处理类之间的关系。类
14、的关系可以是应用级关系,也可以是类内属性的实现关系,下面介绍三种类继承实现方式 :(1)针对实现的继承;(2)针对特殊化的继承;(3)is kind of(是一种)继承.2611.3.2面向对象程序设计方法2类的实现类的实现 类的实现有多种方案,其中一种方案是先开发一个比较小的、简单的类,作为开发比较大的、复杂的类的基础,实现时需要考虑如下内容:(1)软件库(Software Base);(2)复用(Reuse);(3)断言(Assertions);(4)调试(Debugging);(5)错误处理(Error Handling);(6)内建错误处理(Built_In Error Handlin
15、g;(7)用户定义的错误处理(User_Defined Error Handling);(8)多重实现(Multiple Implementation)。2711.3.2面向对象程序设计方法3应用程序的实现应用程序的实现 u应用程序的实现是在所有的类都被实现之后的事情。事实上,实现一个应用程序是一个比用过程化方法更简单、更简短的过程。u当我们把类开发出来后,就已经实现了应用程序的大部分工作。每个类提供了完成应用程序所需要的某种功能。2811.4程序设计风格程序设计风格u本节内容u11.4.1源程序文档化 u11.4.2数据说明 u11.4.3语句结构 u11.4.4输入和输出(I/O)u11.
16、4.5错误处理 2911.4程序设计风格程序设计风格u好的程序设计风格可以极大提高程序的质量,在程序设计中要使程序结构合理、清晰,加入清晰的注释信息,避免使用逻辑复杂的算法,使用有含义的变量命名方式等等。u程序设计风格一般表现在5个方面:源程序文档化、数据说明的方法、表达式和语句结构、输入/输出方法、错误处理。3011.4.1源程序文档化源程序文档化 1.标识符的命名标识符的命名u标识符即符号名,包括模块名、变量名、常量名、子程序名、数据区名、缓冲区名、类名、接口名、包名等。u标识符名应能反映它所代表的实际东西,具有一定实际意义。u名字不是越长越好,过长的名字会使程序的逻辑流程变得模糊,给修改
17、带来困难。u在一个程序中,一个变量只应用于一种用途。就是说,在同一个程序中一个变量不能身兼几种工作。3111.4.1源程序文档化源程序文档化 2程序的注释程序的注释u一些正规的程序文本中,注释行的数量占到整个源程序的13到12,甚至更多。注释一般分为以下两种:(1)序言性注释:通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。(2)功能性注释:嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,不要解释具体是怎么做的。3211.4.1源程序文档化源程序文档化 3源程序布局源程序布局u源程序布局指源程序的代码编排格式。在源程序中,可以利用空格、空行和移
18、行,提高程序的可视化程度。u这样可使程序的逻辑结构更加清晰,层次更加分明。3311.4.2数据说明数据说明 u声明数据结构的过程叫做数据说明。在编写程序时,要尽量遵循数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下几点。数据说明的次序应当规范化,使数据属性容易查找,也有利于测试、排错和维护;当多个变量名用一个语句说明时,应当对这些变量按字母的顺序排列;如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的用途和特点。3411.4.3语句结构u在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片面追求效率而使
19、语句复杂化。一般应从以下方面加以注意:一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确;程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑;程序编写得要简单,写清楚,直截了当地说明程序员的用意;除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二;3511.4.3语句结构首先要保证程序正确,然后才要求提高速度;让编译程序做简单的优化;尽可能使用库函数;避免使用临时变量而使可读性下降;尽量用公共过程或子程序去代替重复的功能代码段;用调用公共函数去代替重复使用的表达式;使用括号来清晰地表达算术表达式和逻辑表达式的运算顺序;避免不必要的转移;尽量只采用
20、三种基本的控制结构来编写程序;3611.4.3语句结构用逻辑表达式代替分支嵌套;避免使用空的ELSE语句和IFTHEN IF的语句;避免使用ELSE GOTO和ELSE RETURN结构;使与判定相联系的动作尽可能地紧跟着判定;避免采用过于复杂的条件测试;尽量减少使用“否定”条件的条件语句;避免过多的循环嵌套和条件嵌套;不要使GOTO语句相互交叉;避免循环的多个出口;使用数组,以避免重复的控制序列等。3711.4.4输入和输出(I/O)u不论是批处理的输入输出方式,还是交互式的输入输出方式,在设计和程序编码时都应考虑下列原则:对所有的输入数据都进行检验;检查输入项的各种重要组合的合理性;使得输
21、入的步骤和操作尽可能简单;输入数据时,应允许使用自由格式输入;应允许缺省值;输入一批数据时,最好使用输入结束标志;屏幕上给出状态信息;应保持输入格式与输入语句的要求一致;给所有的输出加注解,并设计输出报表格式。3811.4.5错误处理u错误处理大致可包含两类技术:避开错误技术;容错技术。u要考虑以下错误处理方法:返回错误代码;调用错误处理函数;显示错误信息;记录日志;退出程序。3911.5程序效率程序效率 u11.5.1讨论效率的准则 u11.5.2算法对效率的影响 u11.5.3存储效率 u11.5.4输入/输出效率 4011.5.1讨论效率的准则u程序的效率是指程序的执行速度及程序所需占用
22、的内存的存储空间。程序效率的几条准则为:效率是一个性能要求,应当在需求分析阶段确定效率方面的要求;效率是靠好的设计来提高的;程序的效率与程序的简单性相关,但是不要以牺牲程序的清晰性和可读性来提高软件的效率。4111.5.2算法对效率的影响算法对效率的影响 u指导原则:尽可能化简有关的算术表达式和逻辑表达式 尽可能将某些语句或表达式移到循环外面;尽量避免使用多维数组;尽量避免使用指针和复杂的二维数组;采用“快速”的算术运算;避免在表达式中出现类型混杂;尽量采用整数算术表达式和布尔表达式;选用等效的高效率算法。4211.5.3存储效率存储效率 u采用结构化程序设计,将程序功能合理分块,使每个模块或一组密切相关模块的程序体积大小与每页的容量相匹配,可减少页面调度,减少内外存交换,提高存储效率。u建议使用尽可能小的数据类型以节约存储空间,例如用short取代int,用float代替double,但这会带来一定的精度损失。4311.5.4输入输入/输出效率输出效率 u指导原则:输入输出的请求应当最小化;安排适当的缓冲区,以减少频繁的信息交换;对辅助存储(例如磁盘),选择尽可能简单的、可接受的存取方法;对辅助存储的输入输出,应当成块传送;尽可能改善输入输出的质量和速度;任何不易理解的、对改善输入输出效果关系不大的措施都是不可取的;任何不易理解的所谓“超高效”的输入输出是毫无价值的。