软件工程实践(3)结构化_第1页
软件工程实践(3)结构化_第2页
软件工程实践(3)结构化_第3页
软件工程实践(3)结构化_第4页
软件工程实践(3)结构化_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京理工大学

软件工程(ruǎnjiànɡōnɡchénɡ)实践汤铭端中国航天科工集团公司204所共五十六页第三(dìsān)讲结构化方法(fāngfǎ)共五十六页内容(nèiróng)和目的了解结构化方法(fāngfǎ)的产生和有关概念掌握结构化方法的基本原则了解结构化分析、设计、编程方法的基本内容了解软件开发的一般原则共五十六页软件开发方法(fāngfǎ)软件开发方法(fāngfǎ)是软件开发过程所遵循的方法(fāngfǎ)和步骤,其目的在于有效地得到一些工作产品,既程序和文档,并且满足质量要求程序设计方法是软件开发方法的组成部分此外还有分析方法和设计方法共五十六页评价(píngjià)软件开发方法的四大特征技术特征:支持各种技术概念的方法特色,如层次性、抽象性、并行性、安全性、正确性等使用特征:用于具体开发时的特色,如易理解性、易移植性、易复用性、工具(gōngjù)的支持、任务范围、使用的广度、活动过渡的可行性、产品的易修改性、对正确性的支持等管理特征:增强对软件开发活动管理的能力方面的特色,如易管理性、支持或阻碍团队工作的程度、中间阶段的确定、工作产品、配置管理、阶段结束准则、费用估计等经济特征:给软件组织产生的在质量和生产力方面的可见效益,如分析活动的局部效益、全生存周期效益、获得该开发方法的代价、使用它的代价、管理的代价等共五十六页选用软件开发方法(fāngfǎ)的考虑因素1对该开发方法是否已具有经验,或者已有受过培训的人员2开发项目的进度、人员组成情况3为开发项目提供的资源如何4计划、组织、管理的可行性5开发项目的领域(lǐnɡyù)知识准备情况共五十六页航天(hángtiān)的考虑结构化方法较全面、最成熟、最基础、使用最广泛、有成功经验结构化方法适合航天(hángtiān)软件研制工作结构化方法是基础性方法结构化方法包括就形成了配套的软件结构化分析方法、结构化设计方法和结构化编程方法,其核心和基础是结构化程序设计理论共五十六页“结构化”起源(qǐyuán):对GOTO的认识1968年Dijkstra在ACM通讯中发表了“GOTO语句是有害的”文章,认为(rènwéi):GOTO语句是有害的,是造成程序混乱的祸根,程序的质量与GOTO语句的数量成反比,应该在所有高级程序设计语言中取消GOTO语句激起了强烈的反响和长期广泛的论战共五十六页论据(lùnjù)1966年,Boehm和Jacopini证明了程序设计语言只要上旬、选择和重复(chóngfù)三种形式的控制结构就足以表达出各种其他形式的结构1970年McKeeman称其XPL编译程序仅用一个GOTO语句1972年C.Strachey设计的操作系统只在五处使用了标号和GOTO语句共五十六页争辩(zhēngbiàn)否定GOTO取消GOTO后,程序(chéngxù)易理解、易排错、易维护没有其它好的结构代替GOTO的话,容易滥用GOTO无GOTO的程序容易进行正确性证明肯定GOTO在块和进程的非正常出口处往往需要使用GOTO会使程序执行效率较高在合成程序目标时,GOTO语句往往是有用的,如返回语句用GOTO共五十六页结论(jiélùn)1974年Knuth发表了总结性文章:“带有GOTO的结构化程序设计”令人信服地总结和证实了以下三点:滥用GOTO语句确实有害,应尽量避免完全避免使用GOTO语句也并非是个明智的方法,有些地方使用GOTO语句,会使程序流程更清楚、效率更高争论(zhēnglùn)的焦点不应该放在是否取消GOTO语句,而应该放在用什么样的程序结构上最后一点使关键,肯定以提高程序清晰性为目标的结构化方法共五十六页结构化方法(fāngfǎ)结构化程序设计(shèjì):一种良好定义的软件开发技术,它采用自顶向下设计(shèjì)和实现方法,并严格地采用结构化程序的控制构造结构化方法的原则:清晰第一效率第二设计先于编码自顶向下逐步细化共五十六页1清晰第一效率(xiàolǜ)第二著名的“清晰第一,效率第二”已成为当今主导的程序设计风格(fēnggé)“先求清楚后求快”“保持程序简单以求快”“写清楚——不要为‘效率’牺牲清晰”共五十六页2设计(shèjì)先于编码“开始写程序越早,完成程序需要的时间就越长。”“设计先于编码”已成为所有(suǒyǒu)程序设计必须遵守的一条原则。设计一定要利用各种设计工具来进行。共五十六页3逐步(zhúbù)细化的设计方法…逐步细化方法是结构化程序设计的心脏。1)中心思想a.程序设计(chénɡxùshèjì)是一个由粗到细的过程;b.程序设计不仅包括对控制结构的设计,也包括对数据结构的设计,两者都要一步步地细化。共五十六页3逐步(zhúbù)细化的设计方法2)指导原则a.先分解主要问题,次要的问题可暂时搁置;b.坚持渐进的原则,每一步的变化不要太大;c.过程的细化与数据结构的细化宜并行、交叉地进行;d.选用适合于问题的设计工具;e.最后一步应详细到所得结果可以直接翻译为源程序。3)优点a.便于控制开发的复杂性;b.便于验证(yànzhèng)程序的正确性。共五十六页模块化原则(yuánzé)主要思想是:将整个系统进行分解成为(chéngwéi)若干功能独立的,能分别设计、编程和测试的模块程序员能单独地负责一个或几个模块的开发开发一个模块不需要知道系统其它模块的内部结构和编程细节模块之间的接口尽可能简明,模块应尽可能彼此隔离共五十六页模块化应达到(dádào)的要求具有可修改性:对整个系统的一次修改只涉及少数几个模块,这种局部性的修改不仅能满足系统修改的要求,而且不会影响系统已经具有的良好质量具有易读性:每个模块的含义和职责被明确,模块之间的接口关系清楚,从而降低复杂性,使得阅读和理解比较方便具有易验证性:只有每个模块能实现正确(zhèngquè),才可能使整个系统的正确(zhèngquè)性有必要的前提共五十六页信息(xìnxī)隐藏方法Parnas提出信息隐藏是模块化程序设计的基本(jīběn)方法信息隐藏:为了实现部件的可见性控制,在分层构造软件模块时,要求这些部件只在模块内部可见,在模块外部不可见共五十六页结构化分析方法(fāngfǎ)结构化分析(SA)方法是结构化程序设计理论在软件需求分析阶段的运用。它是七十年代中期倡导的基于功能分解的分析方法,常用于基于瀑布模型的软件研制过程的需求分析阶段,其目的是帮助弄清用户对软件的需求。按照DeMarco的定义,“结构化分析就是使用数据流图(DFD)、数据字典(DD)、结构化英语、决策表和决策树等工具,来建立一种新的、称为结构化规格说明(shuōmíng)的目标文档。”共五十六页结构化分析五个步骤(bùzhòu)1)通过对用户的调查,以软件的需求为线索,获得(huòdé)当前系统的具体模型;2)去掉具体模型中非本质因素,抽象出当前系统的逻辑模型;3)根据计算机的特点分析当前系统与目标系统的差别,建立目标系统的逻辑模型;4)完善目标系统并补充细节,写出目标系统的软件需求规格说明;5)评审直到确认完全符合用户对软件的需求。共五十六页八条指导(zhǐdǎo)原则1)请用户共同参与开发;2)编写用户资料,考虑他们的专门技术水平和阅读与使用资料的目的;3)使用画图工具(gōngjù)做媒介,减少与用户交流时发生问题的可能性;4)进行系统设计之前建立一个系统的逻辑模型;5)自顶向下进行分析设计;6)自顶向下的方法进行测试;7)验收之前,就让用户看到系统的某些主要输出,使用户能够尽早地看到结果,及时地提出意见;8)对系统的评价不仅是指开发和运行费用的评价,而是对整个生存过程中的费用和收益的评价。共五十六页结构化分析方法(fāngfǎ)四大特点一是用画图的方法二是自顶向下地分解三是强调(qiángdiào)逻辑而不是物理四是没有重复性共五十六页结构化分析的工具(gōngjù)1)数据流图(DFD);2)控制流图(CFD);3)数据(shùjù)字典(DD);4)控制逻辑表达方法,包括状态转换图(STD)等;5)处理逻辑表达方法,包括结构化语言、判断树和判断表;6)数据存储结构规范化;7)数据立即存取图(DIAD)。共五十六页四句(sìjù)指导工作的准则分层分片,均衡分解;父子平衡,推迟细节。分层就是逐步细化;分片就是用一组数据流图来代替一大张包罗万象的总图。均衡分解是指自顶向下画分层数据流图时,各个子系统的分解程度应大致均匀。父子平衡是指数据(shùjù)流图的父图与子图在输入数据(shùjù)和输出数据(shùjù)上应该分别保持一致。推迟细节是指为了优先考虑重要问题,允许将一些细节推迟到下层数据流图来处理。共五十六页结构化设计(shèjì)方法70年代提出的面向数据流、重点确定(quèdìng)软件结构的设计方法“结构化设计就是采用最佳的可能方法设计系统的各个组成部分以及各成分之间的内部联系的技术。也就是说,结构化设计是这样一个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个具体有清楚定义的问题。”基本思想是将软件设计成由相对独立、单一功能的模块组成的结构。评价模块结构质量的两个具体标准——内聚度和耦合度共五十六页耦合度耦合度:耦合度是各模块之间相互联系的一种度量,它是对模块独立性的直接衡量,耦合度越弱就意味着模块的独立性越高,则模块间相互影响就越小。耦合度的强弱可以由弱至强分为非直接耦合、数据耦合、特征耦合、控制耦合、外部耦合、公共(gōnggòng)耦合和内容耦合七个等级。共五十六页内聚度内聚度是指一个模块内部各成分(语句或语句段)之间的联系程度,内聚度高,则模块的相对独立性势必会提高。内聚度由低到高可划分(huàfēn)为偶然内聚、逻辑内聚、时间内聚、过程内聚、通讯内聚、顺序内聚和功能内聚七个等级。共五十六页结构化设计(shèjì)方法设计(shèjì)步骤1)建立初始(chūshǐ)结构图;2)改进初始结构图。共五十六页建立(jiànlì)初始结构图开始细化/修改软件需求规格说明中的数据流图是变换型吗?变换分析事物分析将映射得来的初始结构图改进为最终结构图对最终结构图进行评审结束是否从数据流图过渡到结构图共五十六页传入传入部分变换中心传出部分(a)变换型结构传出变换接受事务分析动作1动作2动作3接受部分事务中心(b)事务型结构DFD共五十六页主模块输入模块主加工模块输出模块(a)事务控制模块接受模块动作发送模块动作1模块动作1模块动作1模块(b)SC共五十六页改进(gǎijìn)初始结构图…

1)减少块间联系,降低耦合度:可从方式(fāngshì)、作用、数量等方面着手,其中最常用的是减少模块间传递的参数个数;2)消除管道性模块,提高内聚度:管道性模块的块内联系很弱,只是像管道一样将一些参数从主模块传送到它的几个下层模块,对这样的模块,应予以消除;3)适当考虑系统将来可能发生的变化;共五十六页改进(gǎijìn)初始结构图4)注意模块(mókuài)的大小:限制模块(mókuài)大小是降低复杂性的手段之一;5)适当调整调用和被调用的次数,即深度、宽度、扇出和扇入都要适当。一个模块调用或被调用过多,往往是设计不好的迹象;6)整体考虑问题:即尽可能研究整张结构图,而不是只分别考虑一张结构图的各个部分。共五十六页三条指导(zhǐdǎo)规则1)对模块分割、合并和变动模块调用关系(guānxì)的指导规则2)保持高扇入/低扇出的规则3)把作用域保持在控制域之内的规则共五十六页对模块分割、合并和变动模块调用关系(guānxì)的指导规则分割或合并结构图中的模块,应以提高(tígāo)模块独立性为首要的标准:力求提高(tígāo)内聚,降低耦合,简化接口,少用全局性和控制型信息要适当考虑快的大小对模块位置应否变更,视处理是否方便来定,不必拘泥于数据流图共五十六页保持(bǎochí)高扇入/低扇出的规则扇入数指调用该模块的模块个数扇出数指该模块调用的模块个数扇入高则上级模块多,能增加利用率扇出低则下级模块少,能减少复杂度扇出数以3-4为宜,最好不超过5-7软件结构通常具有(jùyǒu)“瓮”形或“清真寺”形的形状共五十六页把作用域保持(bǎochí)在控制域之内的规则一个模块的控制域,等于模块本身加上其下级模块。一个模块的作用域,是受这个模块中的判定所影响的模块。规则的含义是:a.作用域不要(bùyào)超过控制域的范围;b.软件系统的判定,其位置离受它控制的模块越近越好。共五十六页结构化编程方法(fāngfǎ)用一组标准的准则和工具从事(cóngshì)程序设计,称为结构化程序设计;这些准则和工具包括一组基本控制结构,自顶向下扩展原则,模块化和逐步求精结构化编程方法派生于结构化程序设计理论,它要求使用顺序、选择、循环等基本控制结构,并遵循增加程序产量、提高程序可读性、容易测试和验证的原则来编写程序。共五十六页结构化编程应遵循(zūnxún)的原则…1)使用(shǐyòng)程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑;2)选用的控制结构只准许有一个入口和一个出口;3)程序语句组成容易识别的块,每块只有一个入口和一个出口;4)复杂结构应该用嵌套的基本控制结构来实现;共五十六页结构化编程应遵循(zūnxún)的原则5)语言中所没有的控制结构,应该采用前后一致的方法来模拟;6)严格控制GOTO语句,仅在下列情况才可使用:a.用一个非结构化的程序设计语言去实现一个结构化的构造;b.若不使用GOTO语句会使功能模糊;c.在某种可以(kěyǐ)改善而不是损害程序可读性的情况下。共五十六页结构化编程方法(fāngfǎ)的主要优点1)易于理解、使用和维护。程序员采用结构化编程方法,降低了程序的复杂性,因此容易编写程序。程序员能够进行逐步求精、程序证明和测试,以确保程序的正确性,程序容易阅读并被人理解,便于用户使用和维护。2)提高编程工作的效率,降低了软件开发成本。由于结构化编程方法能够把错误控制到最低限度,因此能够减少调试和查错时间。结构化程序是由一些为数不多的基本结构模块组成,这些模块甚至可以由机器自动(zìdòng)生成,从而极大地减轻了编程工作量。共五十六页软件开发的原则(yuánzé)(1)规范严格的原则遵循严格化原则,可以达到开发出正确、成功的软件产品的目的软件开发过程是创造性的工作过程,但严格化不会抑制创造性严格的分析设计可以增强对创造性成果的信心严格化对可靠性、维护性、可移植性、可理解性等产生影响(yǐngxiǎng)过程详细记录可供精确地掌握和控制开发过程共五十六页软件开发的原则(yuánzé)(2)分隔化的原则解决复杂(fùzá)问题时从不同的方面把问题分隔开,然后单独集中精力解决每一个方面的问题分隔化原则是要将相互关系不太紧密的方面分割开,对相互联系仅考虑其影响分隔的途径:以时间次序、以质量指标、以软件规模、以不同的视图、以开发人员的技能共五十六页软件开发的原则(yuánzé)(3)模块化的原则先对复杂问题进行分析,找出基本要素,尽量使之独立,然后(ránhòu)各个击破简单的单元易于加工、维修,可以标准化、通用化复杂问题的分解,基于自顶向下的思路已有模块的组合,基于自底向上的思路共五十六页软件开发的原则(yuánzé)(4)抽象化的原则重要、带有普遍意义特征的方面或内容被抽象出来,次要的、缺乏普遍意义的方面或内容被忽略抽象是分隔(fēngé)化原则的一种特殊应用共五十六页软件开发的原则(yuánzé)(5)预见变动(biàndòng)的原则软件由于其错误、新需求、新环境而产生变化要求开发时就要考虑到软件变动的要求PARNAS的原则开发系列产品渐进开发,从子集出发,信息隐藏,保持接口不变采用为变化而设计的技术共五十六页软件开发的原则(yuánzé)(6)通用化的原则尽量找出对类似(lèisì)问题或相关问题的具有一定普遍意义的解决方法,并在相应产品开发中应用,使软件产品具有一定的通用性对普遍性、通用性问题的解决方法具有质量、经济方面的价值对通用和专用,需要在经济和效率方面进行权衡通用性原则是设计通用的软件产品的一个最基本原则共五十六页软件开发的原则(yuánzé)(7)逐步完善的原则由于难以确定用户的具体需求,只能从不完善逐步走向(zǒuxiàng)完善必须注意:记录每一个有意义的渐进文档必须尽早反映变动,变动得到控制MICRO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论