北京理工大学软件工程实践PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第14页/共55页
3 逐步细化的设计方法…
• 逐步细化方法是结构化程序设计的心脏。
1)中心思想 a. 程序设计是一个由粗到细的过程; b. 程序设计不仅包括对控制结构的设计,也包括对数据结构的设计,两者都要一步步地细化。
第15页/共55页
3 逐步细化的设计方法 2)指导原则
a. 先分解主要问题,次要的问题可暂时搁置; b. 坚持渐进的原则,每一步的变化不要太大; c. 过程的细化与数据结构的细化宜并行、交叉地进行; d. 选用适合于问题的设计工具; e. 最后一步应详细到所得结果可以直接翻译为源程序。 3)优点 a. 便于控制开发的复杂性; b. 便于验证程序的正确性。
是结构化程序设计理论
第7页/共55页
“结构化”起源:对GOTO的认识
• 1968年Dijkstra在ACM通讯中发表了“GOTO语句是有害的”文章,认为:GOTO语句是有害的,是造成程序 混乱的祸根,程序的质量与GOTO语句的数量成反比,应该在所有高级程序设计语言中取消GOTO语句
• 激起了强烈的反响和长期广泛的论战
以时间次序以质量指标以软件规模以不同的视图以开发人员的技先对复杂问题进行分析找出基本要素尽量使之独立然后各个击破简单的单元易于加工维修可以标准化通用化已有模块的组合基于自底向上的思路软件开发的原则4重要带有普遍意义特征的方面或内容被抽象出来次要的缺乏普遍意义的方面或内容被忽略抽象是分隔化原则的一种特殊应用软件开发的原则5软件由于其错误新需求新环境而产生变化要求采用为变化而设计的技术软件开发的原则6尽量找出对类似问题或相关问题的具有一定普遍意义的解决方法并在相应产品开发中应用使软件产品具有一定的通用性对普遍性通用性问题的解决方法具有质量经济方面的价值由于难以确定用户的具体需求只能从不完善逐步走向完善microsoft在采用逐步完善原则方面取得了成功软件开发的原则8在质量成本之间进行权衡软件开发的原则9描述的句子不要太长软件开发的原则10注意技术与工具更新软件开发的原则11要分析错误产生的原因举一反三软件开发的原则12切实的计划谢谢
第16页/共55页
模块化原则
• 主要思想是:将整个系统进行分解成为若干功能独立的,能 分别设计、编程和测试的模块
• 程序员能单独地负责一个或几个模块的开发 • 开发一个模块不需要知道系统其它模块的内部结构和编程细
节 • 模块之间的接口尽可能简明,模块应尽可能彼此隔离
第17页/共55页
模块化应达到的要求
第26页/共55页
耦合度
• 耦合度:耦合度是各模块之间相互联系的一种度量,它是对模块独立性的直接衡量,耦合度越弱就意味着 模块的独立性越高,则模块间相互影响就越小。
• 耦合度的强弱可以由弱至强分为非直接耦合、数据耦合、特征耦合、控制耦合、外部耦合、公共耦合和内 容耦合七个等级。
第27页/共55页
内聚度
四句指导工作的准则
• 分层分片,均衡分解;父子平衡,推迟细节。 • 分层就是逐步细化;分片就是用一组数据流
图来代替一大张包罗万象的总图。 • 均衡分解是指自顶向下画分层数据流图时,
各个子系统的分解程度应大致均匀。 • 父子平衡是指数据流图的父图与子图在输入
数据和输出数据上应该分别保持一致。 • 推迟细节是指为了优先考虑重要问题,允许
• 分割或合并结构图中的模块,应以提高模块独立性为首要的标准:力求提高内聚,降低耦合,简化接口, 少用全局性和控制型信息
• 要适当考虑快的大小 • 对模块位置应否变更,视处理是否方便来定,不必拘泥于数据流图
第36页/共55页
保持高扇入/低扇出的规则
• 扇入数指调用该模块的模块个数 • 扇出数指该模块调用的模块个数 • 扇入高则上级模块多,能增加利用率 • 扇出低则下级模块少,能减少复杂度 • 扇出数以3-4为宜,最好不超过5-7 • 软件结构通常具有“瓮”形或“清真寺”形的形状
2)消除管道性模块,提高内聚度:管道性模块的块内联系很弱,只是像管道一样将一些参数从主模块传送到 它的几个下层模块,对这样的模块,应予以消除;
3)适当考虑系统将来可能发生的变化;
第33页/共55页
改进初始结构图
4)注意模块的大小:限制模块大小是降低复杂性的手段之一; 5)适当调整调用和被调用的次数,即深度、宽度、扇出和扇入都要适当。一个模块调用或被调用过多,往往
第18页/共55页
信息隐藏方法
• Parnas提出 • 信息隐藏是模块化程序设计的基本方法 • 信息隐藏:为了实现部件的可见性控制,在分层构造软件模块时,要求这些部件只在模块内部可见,在模
块外部不可见
第19页Байду номын сангаас共55页
结构化分析方法
• 结构化分析(SA)方法是结构化程序设计理论在软件需求分析阶 段的运用。它是七十年代中期倡导的基于功能分解的分析方法, 常用于基于瀑布模型的软件研制过程的需求分析阶段,其目的 是帮助弄清用户对软件的需求。
第8页/共55页
论据
• 1966年,Boehm和Jacopini证明了程序设计语言只要上旬、选择和重复三种形式的控制结构就足以表达 出各种其他形式的结构
• 1970年McKeeman称其XPL编译程序仅用一个GOTO语句 • 1972年设计的操作系统只在五处使用了标号和GOTO语句
第9页/共55页
北京理工大学 软件工程实践
汤铭端 中国航天科工集团公司204所
第1页/共55页
第三讲
结构化方法
第2页/共55页
内容和目的
• 了解结构化方法的产生和有关概念 • 掌握结构化方法的基本原则 • 了解结构化分析、设计、编程方法的基本内容 • 了解软件开发的一般原则
第3页/共55页
软件开发方法
• 软件开发方法是软件开发过程所遵循的方法和步骤,其目的在于有效地得到一些工作产品,既程序和文档, 并且满足质量要求
• 用一组标准的准则和工具从事程序设计,称为结构化程序设计; 这些准则和工具包括一组基本控制结构,自顶向下扩展原则, 模块化和逐步求精
3) 使用画图工具做媒介, 减少与用户交流时发生 问题的可能性;
出,使用户能够尽早地 看到结果,及时地提出 意见;
4) 进行系统设计之前建 8) 对系统的评价不仅是
立一个系统的逻辑模型; 指开发和运行费用的评
第22页/共55页
结构化分析方法四大特点
一是用画图的方法 二是自顶向下地分解 三是强调逻辑而不是物理 四是没有重复性
标系统的逻辑模型; 4) 完善目标系统并补充细节,写出目标系统的软件需求规格说
明; 5) 评审直到确认完全符合用户对软件的需求。
第21页/共55页
八条指导原则
1) 请用户共同参与开发; 6) 自顶向下的方法进行
2) 编写用户资料,考虑
测试;
他们的专门技术水平和 7) 验收之前,就让用户
阅读与使用资料的目的; 看到系统的某些主要输
1 清晰第一效率第二
• 著名的“清晰第一,效率第二”已成为当今主导的程序设计风格 • “先求清楚后求快” • “保持程序简单以求快” • “写清楚——不要为‘效率’牺牲清晰”
第13页/共55页
2 设计先于编码
• “开始写程序越早,完成程序需要的时间就越长。” • “设计先于编码”已成为所有程序设计必须遵守的一条原则。 • 设计一定要利用各种设计工具来进行。
结论 • 1974年Knuth发表了总结性文章:“带有GOTO的结构化程序设计” • 令人信服地总结和证实了以下三点:
• 滥用GOTO语句确实有害,应尽量避免 • 完全避免使用GOTO语句也并非是个明智的方法,有些地方使用GOTO语
句,会使程序流程更清楚、效率更高 • 争论的焦点不应该放在是否取消GOTO语句,而应该放在用什么样的程
第23页/共55页
结构化分析的工具
1) 数据流图(DFD); 2) 控制流图(CFD); 3) 数据字典(DD); 4) 控制逻辑表达方法,包括状态转换图(STD)等; 5) 处理逻辑表达方法,包括结构化语言、判断树和判断表; 6) 数据存储结构规范化; 7) 数据立即存取图(DIAD)。
第24页/共55页
事务 分析
(b)事务型结构
第31页/共55页
动作 1
动作 2
动作 3
主模块
输入模块
主加工模块
(a) 事务控制模块
输出模块
接受模块
动作发送模块
动作1模块 动作1模块 动作1模块
SC
(b)
第32页/共55页
改进初始结构图…
1)减少块间联系,降低耦合度:可从方式、作用、数量等方面着手,其中最常用的是减少模块间传递的参数 个数;
是设计不好的迹象; 6)整体考虑问题:即尽可能研究整张结构图,而不是只分别考虑一张结构图的各个部分。
第34页/共55页
三条指导规则
1)对模块分割、合并和变动模块调用关系的指导规则 2)保持高扇入/低扇出的规则 3)把作用域保持在控制域之内的规则
第35页/共55页
对模块分割、合并和变动模块调用关系的指导规则
第25页/共55页
结构化设计方法
• 70年代提出的面向数据流、重点确定软件结构的设计方法 • “结构化设计就是采用最佳的可能方法设计系统的各个组成部分以
及各成分之间的内部联系的技术。也就是说,结构化设计是这样一 个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个 具体有清楚定义的问题。” • 基本思想是将软件设计成由相对独立、单一功能的模块组成的结构。 • 评价模块结构质量的两个具体标准——内聚度和耦合度
争辩
否定GOTO
肯定GOTO
取消GOTO后,程序 易理解、易排错、易 维护
没有其它好的结构代 替GOTO的话,容易 滥用GOTO
无GOTO的程序容易 进行正确性证明
第10页/共55页
在块和进程的非正常 出口处往往需要
使用GOTO会使程序 执行效率较高
在合成程序目标时, GOTO语句往往是有 用的,如返回语句用 GOTO
• 管理特征:增强对软件开发活动管理的能力方面的特色,如易管理性、支持或 阻碍团队工作的程度、中间阶段的确定、工作产品、配置管理、阶段结束准则、 费用估计等
• 经济特征:给软件组织产生的在质量和生产力方面的可见效益,如分析活动的 局部效益、全生存周期效益、获得该开发方法的代价、使用它的代价、管理的 代价等
序结构上 • 最后一点使关键,肯定以提高程序清晰性为目标的结构化方法
第11页/共55页
结构化方法
• 结构化程序设计:一种良好定义的软件开发技术,它采用自顶向下设计和实现方法,并严格地采用结构化 程序的控制构造
• 结构化方法的原则: • 清晰第一效率第二 • 设计先于编码 • 自顶向下逐步细化
第12页/共55页
• 按照DeMarco的定义,“结构化分析就是使用数据流图(DF D)、数据字典(DD)、结构化英语、决策表和决策树等工 具,来建立一种新的、称为结构化规格说明的目标文档。”
第20页/共55页
结构化分析五个步骤
1) 通过对用户的调查,以软件的需求为线索,获得当前系统的 具体模型;
2) 去掉具体模型中非本质因素,抽象出当前系统的逻辑模型; 3) 根据计算机的特点分析当前系统与目标系统的差别,建立目
• 程序设计方法是软件开发方法的组成部分 • 此外还有分析方法和设计方法
第4页/共55页
评价软件开发方法的四大特征
• 技术特征:支持各种技术概念的方法特色,如层次性、抽象性、并行性、安全 性、正确性等
• 使用特征:用于具体开发时的特色,如易理解性、易移植性、易复用性、工具 的支持、任务范围、使用的广度、活动过渡的可行性、产品的易修改性、对正 确性的支持等
第5页/共55页
选用软件开发方法的考虑因素
1 对该开发方法是否已具有经验,或者已有受过培训的人员 2 开发项目的进度、人员组成情况 3 为开发项目提供的资源如何 4 计划、组织、管理的可行性 5 开发项目的领域知识准备情况
第6页/共55页
航天的考虑
• 结构化方法较全面、最成熟、最基础、使用最广泛、有成功经验 • 结构化方法适合航天软件研制工作 • 结构化方法是基础性方法 • 结构化方法包括就形成了配套的软件结构化分析方法、结构化设计方法和结构化编程方法,其核心和基础
第29页/共55页
建立初始结构图
开始
细化/修改软件需求 规格说明中的 数据流图


是变换 型吗?
变换 分析
事物 分析
将映射得来的初始结构图 改进为最终结构图
对最终结构图进行评审
结束 从数据流图过渡到结构图
第30页/共55页
DFD
传入部分 传入
变换中心 变换
传出部分 传出
接受部分 接受
(a)变换型结构 事务中心
• 具有可修改性:对整个系统的一次修改只涉及少数几个模块, 这种局部性的修改不仅能满足系统修改的要求,而且不会影响 系统已经具有的良好质量
• 具有易读性:每个模块的含义和职责被明确,模块之间的接口 关系清楚,从而降低复杂性,使得阅读和理解比较方便
• 具有易验证性:只有每个模块能实现正确,才可能使整个系统 的正确性有必要的前提
• 内聚度是指一个模块内部各成分(语句或语句段)之间的联系程度,内聚度高,则模块的相对独立性势必 会提高。
• 内聚度由低到高可划分为偶然内聚、逻辑内聚、时间内聚、过程内聚、通讯内聚、顺序内聚和功能内聚七 个等级。
第28页/共55页
结构化设计方法设计步骤
1) 建立初始结构图; 2) 改进初始结构图。
第37页/共55页
把作用域保持在控制域之内的规则
• 一个模块的控制域,等于模块本身加上其下级模块。 • 一个模块的作用域,是受这个模块中的判定所影响的模块。 • 规则的含义是:
a. 作用域不要超过控制域的范围; b. 软件系统的判定,其位置离受它控制的模块越近越好。
第38页/共55页
结构化编程方法
相关文档
最新文档