您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 软件制造工程第二章程序设计
软件制造工程第二章程序设计本章授课内容基础程序设计概述程序设计原理程序设计的启发式原则程序设计方法面向对象程序设计团队程序设计书的构成和理解程序设计概述__程序设计在软件开发中的位置软件工程管理规划阶段需求分析A开发阶段内部设计B外部设计移植、安装、维护移植安装维护HD程序设计·制造E组合测试F系统测试G运行测试以内部设计书为基础,对程序单元内的功能模块进行分割和功能模块的功能处理给予说明,作出程序设计书。按照程序设计书进行程序编码。按照程序设计书进行程序单元测试。C程序设计概述_概念程序设计概要设计又称为总体设计或外部设计,详细设计又称为过程设计或内部设计。程序设计是以详细设计为基础,对程序单元内的功能模块进行细化,对功能模块的功能处理要求和实现方法给予说明,并作出程序设计书。程序设计的结果将是编程工程和测试工程的主要依据。近年来,由于很多应用系统在开发周期短、开发成本低的条件下进行设计,常常把详细设计和程序设计的阶段合为一体。程序设计概述_作业流程及描述D1开发准备工作D1.1详细设计成果物的确认D1.1.1确认详细设计成果物D1.2制定工作计划D1.2.1制定工作计划D1.3检查工作计划D1.3.1检查工作计划在进行程序设计·制造作业之前,要确认详细设计的成果物。为了进行程序设计·制造的进度管理和项目运营管理,要作出项目开发体制表和详细的日程计划表(中、小日程表)对于制定的工作计划,要进行检查,确认作业内容。程序设计概述_作业流程及描述D2程序设计D2.1程序设计D2.1.1模块划分D2.1.2模块功能设计工作区变量定义D2.1.3模块逻辑设计D2.1.4D2.2程序设计检查D2.2.1程序设计检查以详细设计中确认的程序单元为基础,对程序单元内的功能模块进行分割处理。对程序功能结构图中的功能处理给与说明。定义程序中使用的公用变量和重要变量。设计各个模块的处理内容及其算法。对程序设计说明书进行检查,作出程序设计检查结果报告。程序设计概述_工作用表质量数据汇总表D5开发结束工作问题处理票(B票)简单问题处理票质量数据汇总表(程序单元)程序单元测试项目表(矩阵型)程序单元测试项目表D4程序单元测试问题记录一览表检查记录表模块功能的定义说明书工作缓冲区格式定义表程序追加处理说明书程序功能结构图D2程序设计问题记录一览表检查记录表开发体制表工作计划表(小日程表)工作计划表(中日程表)基本/详细设计作业内容检查表(确认基本/详细设计的成果物)D1`开发准备工作工作用表名称作业阶段程序设计的一个重要课题就是模块划分和模块设计,把开发的软件系统按功能逐次分割成层次结构,使每一部分完成简单的功能且各个部分之间又保持一定的联系,这种功能设计所包括的内容有:采用某种设计原理和方法,将一个复杂的系统按功能划分为成模块的层次结构;确定每个模块的功能,建立与已确定的软件需求的对应关系;确定模块间的调用关系;确定模块间的接口,设计接口的信息结构;评估模块划分的质量及导出模块结构的规则。程序设计原理模块的概念在软件的体系结构中,模块是可组合、分解和更换的单元。程序设计单元都被看成为“模块”,所谓模块就是程序对象的有名字的集合,例如,过程、函数、子程序、宏等。模块具有以下几种基本属性:接口:指模块的输入与输出;功能:指模块实现什么功能;逻辑:描述内部如何实现要求的功能所需的数据和处理流程;状态:指该模块的运行环境,即模块的调用与被调用关系。程序设计原理程序设计原理设计的原则:(l)分解—协调的原则。(2)信息隐蔽,抽象的原则,即上层模块只规定下层模块做什么和所属模块间的协调关系,但不规定怎么做,以保证模块的相对独立性和内部结构的合理性,使得模块与模块之间层次分明,易于理解,易于实施,易于维护。(3)自顶向下原则:首先抓住总的功能目标,然后逐层分解,即先确定上层模块的功能,再确定下层模块的功能。(4)一致性原则:要保证整个软件设计过程中具有统一的规范,统一的标准,统一的文件模式等等。(5)面向用户的原则,每个模块必须功能明确,接口明确,坚决消除多重功能和无用接口。模块的概念一个模块的规模应当取决于它的功能和用途。应减少接口的代价,提高模块的独立性。模块的独立性可以由两个定性标准度量,这两个标准分别称为聚合和耦合。成本(工作量)软件成本接口成本最小区域成本/模块模块数M程序设计原理抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。通过抽象,可以确定组成软件的过程实体。逐步求精是一种先总体,后局部的思维原则,先抓住主要问题并给予解决,然后分阶段逐步深入考虑问题的细节,也就是逐层分解,分而治之的方法。程序设计原理在一节不和谐的课堂里,老师叹气道:“要是坐在后排聊天的同学能象中间打牌的同学那么安静,就不会影响到前排睡觉的同学。”。这个故事告诉我们,如果不想让坏事传播开来,就应该把坏事隐藏起来,“家丑不可外扬”就是这个道理。为了尽量避免某个模块的行为去干扰同一系统中的其它模块,在设计模块时就要注意信息隐藏。应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。信息隐蔽指在设计和确定模块时,使得一个模块内部包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。程序设计原理模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,用两个定性的度量标准耦合性(coupling)和内聚性(cohesion)来衡量模块的独立性。程序设计原理耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。耦合按从弱到强的顺序可分为以下七种类型:非直接耦合、数据耦合、数据结构耦合、控制耦合、共通耦合、外部耦合、内容耦合。按上述顺序,耦合性逐渐升高,模块独立性逐渐降低。程序设计原理内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。内聚按强度从低到高共分七级:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、信息内聚、功能内聚。内聚性逐渐加强,功能趋于单一,模块独立性也逐渐加强。程序设计原理模块化的设计原则改进软件结构提高模块独立性模块规模应该适中保持适当的扇入和扇出模块的作用范围应在控制范围之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测以上启发式规则多数是经验数据,对改进设计,提高软件质量,有重要的参考价值程序设计的启发式原则ABCDEFABCDE′F′E′F′程序设计的启发式原则改进软件结构提高模块独立性经验表明,模块的规模要在一页以内,模块的总行数最好在30~60行,这种规模易于阅读和理解。过长的模块往往是分解不充分的表现,会增加阅读理解的难度;但小模块太多也会使模块之间联系变得复杂,增大系统在模块调用时传递信息所花费的开销,不值得单独存在,可以把它合并到上级模块中去。由于种种原因如功能和用途的约束,一个模块可能会大于一页,要以不影响程序的清晰为前提。程序设计的启发式原则一个模块的扇入表示有多少个模块直接调用它,一个模块的扇出表该模块控制的其它模块的数量,深度表示软件结构中控制的层数。经验表明,一个设计得好的典型系统平均扇出通常是3或4(扇出的上限通常是5~9)。扇出扇入深度程序设计的启发式原则_保持适当的扇入和扇出一个模块的作用范围(或称影响范围)指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。一个模块的作用范围应在其控制范围之内,且判定所在的模块应在其影响的模块在层次上尽量靠近。程序设计的启发式原则_模块的作用范围应在控制范围之内模块接口复杂是软件发生错误的一个主要原因,应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。接口复杂或不一致(即看起来传递的数据之间没有联系)是低内聚的表现,应该重新分析这个模块的独立性。程序设计的启发式原则_力争降低模块接口的复杂程度不要使模块间出现内容耦合从顶部进入模块并且从底部退出,软件比较容易理解,因此也比较容易维护程序设计的启发式原则_设计单入口单出口的模块程序设计的启发式原则_模块功能应该可以预测如果将一个模块看做黑盒子,就是说,只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。具有内部状态的模块,其输出不仅与输入有关,而且还取决于模块的当前状态,其功能是不可预测的,这就增加了模块的测试和维护难度,这条原则不是绝对的,如对于实时系统来说,针对不定时的输入,系统状态要不断发生变化,这种变化又直接影响下一个输入引起的输出。对于这种不可避免的情况,要引起充分注意,要将相应模块做特殊处理。无论测试还是维护都把模块状态作为一个重要影响因素来考虑程序设计方法_结构化方法结构化程序设计的内容使用三种控制结构逐步求精的设计方法fgcfgcf(c)(a)(b)I=?f1f2f3fn123n(d)fcT(e)程序设计方法_结构化工具流程图盒图(N-S图)PAD图HIPO图判定表判定树过程设计语言程序设计方法_结构化工具流程图处理用四方形图表示条件判断用菱形图表示用连接线把这些图形连接起来表示处理的流程程序设计方法_结构化工具盒图(N-S图)盒图是Nassi和Shneiderman提出来的,又称N-S图,没有箭头,不允许随意转移。在NS图中,每个“处理步骤”是用一个盒子表示的,所谓“处理步骤”可以是语句或语句序列。需要时,盒子中还可以嵌套另一个盒子,嵌套深度一般没有限制,只要整张图在一页纸上能容纳得下,由于只能从上边进入盒子然后从下边走出,除此之外没有其他的入口和出口,所以,NS图限制了随意的控制转移,保证了程序的良好结构。程序设计方法_结构化工具PAD图PAD图是日本日立公司于1973年发明的,指问题分析图(ProblemAnalysisDiagram),它是一种自左往右展开的二维树型结构。控制流程为自上而下、从左到右的执行。由机器自动通过走树的办法生成相应的源代码,大大提高了软件的生产率。程序设计方法_结构化工具程序设计方法_结构化工具例:1求A、B、C三个数中的最大值。例:2猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?程序设计方法_结构化工具例:1程序设计方法_结构化工具例:2程序设计方法_结构化工具HIPO图(层次图加输入/处理/输出图)HIPO图由下面三部分组成:H(分层)图。即以方框形式表示程序的主要功能、次要功能及其与模块间的关系。总览IPO图。为H图提供输入变量表、处理功能表和输出变量表。详细IPO图。为底层模块提供输入变量表、处理功能表和输出变量表。HIPO图是一种图解式设计工具。在概要设计、详细设计、程序设计、测试和维护的不同阶段,都可以使用HIPO图对设计进行描述程序设计方法_结构化工具班级号、学号学生姓名语、数、外成绩输入显示处理DB存在检查处理输出DB显示处理显示处理输入数据检查DB登录学生基本成绩表班级号、学号学生姓名语、数、外成绩错误信息不存在存在正确不正确HIPO图(层次图加输入/处理/输出图)程序设计方法_结构化工具判定表在许多软件设计中,常常需要设计一个模块,根据多种条件的复杂组合,选择执行相应的动作,这种设计过程用判定表表示比较合适。判定表可作为输入数据,被直接读入机器,由“表驱动”算法程序自动处理,判定表的第一行是规则号,每一列对应一条处理规则
本文标题:软件制造工程第二章程序设计
链接地址:https://www.777doc.com/doc-153223 .html