软件工程第3章结构化设计方法1.0(精)
- 格式:doc
- 大小:4.46 MB
- 文档页数:25
软件工程——结构化方法上世纪60年代,由于计算机计算能力和处理的问题复杂度的急速增长,爆发了众所周知的软件危机。
为了应对软件危机带来的危害,解决管理大型复杂软件的难题,学术界与工业界共同研究并提出了许多有效的软件开发方法。
而其中影响最为深远的,分支最为庞大的方法就是结构化方法。
自1967年起就涌现出了许多软件工程领域有关结构化的相关概念与方法。
如结构化程序设计,结构化分析技术,结构化设计。
本文将针对它们进行介绍以及其应用。
结构化编程结构化编程(Structured programming)是上世纪60年代迪杰斯特拉,科拉多·伯姆及朱塞佩·贾可皮尼等计算机科学家所提出的。
图灵奖得主迪杰斯特拉(Edsger Wybe Dijkstra)在1968年的一篇名称为《GOTO陈述有害论》的论文写到:最近我发现为什么使用goto语句具有灾难性的影响,而且我认为goto语句应该从所有的高级语言中废除,因为它使分析和验证程序正确性(特别是涉及循环)的任务变得复杂。
——Go To Statement Considered Harmful Edsger W.Dijkstra科拉多·伯姆于1966年5月在《Communications of the ACM》期刊发表论文,说明任何一个有goto指令的程序,可以改为完全不使用goto指令的程序。
下面来看一个例子,用于展示goto带来的差可读性。
void foo{A:...if(c==1)goto B;else goto C;B:...if(c==2) goto A;else goto C;C:...if(c==3)goto B;else goto A;}因此为了应对这些弊端,迪杰斯特拉提出了结构化程序设计。
首先他证明了任何程序都可以用以下三种流程架构所组成。
可分为循序(sequence)、选择(selection)及重复(repetition),循序是指程序正常的运行方式,运行完一个指令后,运行后面的指令。
1.结构图1.1结构图的基本成分结构图的基本成分有模块、调用和数据。
结构图和层次图基本上是大同小异,主要是用来描绘软件结构的一种图形工具,图中设有很多方框,一个方框就代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)用来表示模块的调用关系。
在通常情况下我们会在结构图中用箭头注释一下表示模块在调用过程中信息的来回传递。
我们可以根据箭头的β部形状标明某种信息,认定一种形状作为一种信息符号,自己只要按箭头形状就可以区分传递的信息是数据还是控制信息了。
比如:β部是空心圆就表示传递的是数据,实心圆就表示传递的是控制信息。
1.2附加符号结构图不仅仅只是一些基本符号,其实还有不少附加符号,它是用来表示模块的选择调用或循环调用的。
其实,层次图和结构图对于模块调用次序方面要求的并不严格。
再画模块方面很多人习惯按调用次序从左到右的方法画模块,其实又û有规定一定要这样,出于其他方面的考虑(例如为了减少交叉线),我们完全可以不按这种次序画,还有就是在层次图和结构图中并不指明什ô时候调用下层模块。
一般情况下上层模块中除了调用下层模块的语句之外还有其他语句,到底是先执行调用下层模块的语句还是先执行其他语句,丝毫不在图中指明。
事实上,层次图和结构图往往只表明一个模块用来调用哪些模块,对于一些模块内不含其他成分的根本就不作表示。
2.信息流的类型在需求分析阶段,用SA方法产生了数据流图。
面向数据流的设计能方便地将数据流图(data flow diagram,DFD)转换成程序结构图。
DFD中从系统的输入数据流到系统的输出数据流的一连串连续变换形成了一条信息流。
DFD的信息流大体可分为两种类型,就是中心变换流和事务流。
2.1变换流:信息在沿着输入通·进入系统,同时由外部形式变换成内部形式进入系统的信息,通过变换中心经加工处理,以后再沿着输出通·的变换成外部形式离开系统。
当数据流具有了信息流的这种特征时这种信息流就叫做变换流。
软件工程中的结构化设计方法
结构化设计方法是软件工程中一种重要的方法,它是一种以解决特定问题为目标,以模块化、模块交互和模块关系为基础的设计方法。
结构化设计方法的基本思想是把一个复杂的问题分解成一系列相互关联的子问题,然后分别解决这些子问题,最后再把这些子问题的解决方案组合起来,从而解决原来的复杂问题。
结构化设计方法的优点在于可以把一个复杂的问题分解成若干个简单的子问题,从而使问题的解决更加容易。
此外,结构化设计方法还可以提高软件的可维护性和可扩展性,因为它可以把软件的功能模块化,使每个模块可以独立地更新和维护,而不会影响整个系统的运行。
1MSD 的绘制(基础知识)
�
模块结构图
在学习
MSD 的时候我们要了解数据流程图的种类,我们一般分为变换型数据流图和事
务型数据流图。
变换型(输入-变换-输出)
事务型(加工为获得的数据流分离成几个数据流,并分别为其选择处理路径)�映射方法:
(另一例见我上课所给)
2课堂练习及往年习题
�
我们以一个实例来说明变换型的DFD 图
如何转换成MSD 图。
(演变过程见我上课所给)�绘图步骤如下
1穿过虚线的每一天实线为输入get 模块,右虚线为输出put 模块。
2细化方法:输入模块圆圈为处理,左边为
输入;处理模块圆圈为处理;输出模块圆圈为处理,右边为输入;3牢记输入-变换-输出
�事务型的DFD 图转换成MSD 图见课本P55。
对于事务型的MSD 主要是找对路径。
(1)2009-1
(2)
(3)2010-1
(4)
课本P71。
结构化程序设计方法结构化程序设计(Structured Programming)是一种软件开发的方法论,旨在提高程序的可读性、可维护性和可测试性。
通过将程序设计分解成多个小的、可重复使用的有序模块,结构化程序设计能够更好地组织和管理大型的复杂软件项目。
结构化程序设计方法的核心思想是使用逻辑结构和控制结构来组织程序的各个部分。
逻辑结构包括顺序结构、选择结构和循环结构,而控制结构包括顺序控制、选择控制和循环控制。
通过这些结构,开发人员可以清晰地定义程序的执行流程,以实现程序的正确性和可靠性。
首先,结构化程序设计要求程序应该采用顺序结构来定义数据和执行过程。
这意味着程序应该按照从上到下的顺序依次执行,每个语句都应该有清晰的输入和输出。
这种顺序结构使程序的逻辑更加可读和可理解,有助于减少错误和提高代码质量。
其次,结构化程序设计强调使用选择结构来处理不同的情况。
选择结构可以根据特定的条件来选择性地执行某些语句或语句块。
例如,使用if-else语句可以根据条件的真假执行不同的代码块。
这种选择结构能够处理复杂的程序逻辑,使程序更加灵活和可扩展。
再次,结构化程序设计鼓励使用循环结构来重复执行相似的代码块。
循环结构可以根据特定的条件来重复执行某些语句或语句块,以实现程序的迭代和循环。
例如,使用while循环可以在满足条件的情况下重复执行某些代码块。
借助循环结构,程序可以更高效地处理大量的数据和任务。
此外,结构化程序设计还强调模块化和函数化的设计思想。
模块化将程序拆分成多个小的、独立的模块,每个模块具有清晰的功能和接口。
函数化则将程序的功能封装到函数中,可以重复使用和调用。
这种模块化和函数化的设计思想使程序更易于开发、维护和测试,也有利于团队合作和代码重用。
总之,结构化程序设计方法通过逻辑结构和控制结构的应用,能够更好地组织和管理程序,提高程序的可靠性和可维护性。
结构化程序设计的核心思想包括顺序结构、选择结构和循环结构,以及模块化和函数化的设计思想。
研讨软件工程结构化设计方法1.1结构化设计流程(1)对数据流图实行研究、分析及审查,这主要能够协助我们从软件需求规格说明中掌握数据流加工过程。
(2)以数据流图为依据对数据处理的类型实行确定,需要注意的是,针对事务型及变换型,我们要对其实行分别分析及处理。
(3)通过数据流图对系统初始结构图实行推导。
(4)采取启发式原则对系统初始结构图实行改进,直到结构图满足我们的要求为止。
(5)利用数据字典以及分析模型ER图对数据实行设计,这又包括数据文件设计以及数据库设计。
(6)以状态转换图、加工规格说明为依据,实行过程设计。
1.2体系结构设计方法(1)基于数据流方法设计过程。
这个设计方法也被称之为过程驱动设计方法,在使用这个方法的过程中,主要是和软件需求分析阶段的SA实行衔接,然后将数据流图所表示的信息转化为程序结构设计描述。
(2)典型数据流及典型系统结构。
对于典型数据流类型来说在,主要包括事务型数据流以及变换型数据流,在数据流的类型存有区别的时候,其所获得的系统结构也会存有差异。
一般来说,我们会把系统中的全部数据流认作变换流,数据沿输入通道进到系统中,经历数据变化,把数据外部形势转变为内部表示,再利用变化中心实行处理,最后沿输出通道离开系统,而这种数据就被称之为变换流。
不过,在遇到明显带有事务特性数据流的时候,则最好采取事务型映射方法设计。
具体来说,变换流系统结构图主要包括了输入、变换中心以及输出这三个部分。
至于事务流,其数据则会沿输入通道到达事务中心,然后事务中心将以输入数据的类型为依据选择一个动作实行执行,在事务流中,事务中心是明显存有的,各种活动流将以事务中心作为起点按照辐射的形状流出。
(3)变换映射方法。
所谓变换分析,主要是从数据流图中将系统结构图导出,其具体的步骤为:首先,对数据流图实行重画;其次,对有效输入、有效输出以及变换中心部分实行区分;第三,实行一级分解及二级分解。
具体来说,在对数据流图实行重画的过程中,为建立好系统结构,要对数据流图实行平铺,其中物流输入在左边,物理输出在右边。
软件工程中的结构化设计方法张耀民【摘要】针对大型项目开发,为了保证软件产品质量,提高软件开发效率,在进行详细设计、程序设计之前,必须先确定软件总体结构,而结构化设计方法是进行软件总体结构的主要方法.该方法以需求分析阶段获得的数据流图为基础,通过一系列映射,把数据流图变换为软件结构图.在此主要分析了不同类型数据流图如何“映射”成软件总体结构,并给出了优化软件结构的规则,及不同类型数据流图“映射”成软件总体结构图时顶层、第1层及其下层的转换方法,其可操作性强.%For large-scale project development, the general software structure must be confirmed to guarantee the quality of the software product and improve the software development efficiency before a detailed design and program design. The structured design method is a main method to design the general structure of software, The method takes the data flow diagram obtained in the requirement analysis stage as a foundation to convert the data flow graphs to the software structure diagrams through a series of maps. This paper analyzes how different types of data flow diagrams map into the software general structure and gives the rules of optimizing software structure. The innovation is a conversion method of top layer, first layer and bottom layer when a different type of data stream graph is converted into a general software structure diagram. The method has a strong operability.【期刊名称】《现代电子技术》【年(卷),期】2012(035)016【总页数】4页(P39-42)【关键词】软件工程;结构化设计;软件结构优化;映射【作者】张耀民【作者单位】陕西工商职业学院,陕西西安 710119【正文语种】中文【中图分类】TN919-34软件工程的基本思想是面对复杂的问题,让软件的开发按照工程的概念、原理、技术和方法模式来实施,有计划地按照要求分阶段实现。
第三篇——软件⼯程之结构化设计⽅法软件⼯程有很⼤的⼀个章节介绍结构化分析⽅法。
对于结构化分析,我认为它是整体和细节的桥梁,把⼀个软件整体分成⼏个块,不同的块负责不同的内容,⽐如数据输⼊,数据处理,数据输出;然后在块的基础上敲定细节,需要读⼊哪些数据,数据的类型,怎么读⼊数据,数据输⼊后的计算、查询、添加、删除、修改,数据输出的格式等等。
⼀个软件可能是⼀个很⼤的⼯程,但是它也是由许多⼩部件搭建起来的,如何确定这些⼩部件,这时候就需要⽤到结构化分析⽅法。
对于结构化的具体知识,结合书上的内容,做了⼀个整理。
可能不完善,但是对于基本概念的掌握很有帮助。
结构化分析⽅法是在模块化,⾃顶向下逐步细化及结构化程序设计基础之上发展起来的,可以分为两类:⼀类是根据系统系统的数据流进⾏设计,还有⼀类是根据系统的数据结构进⾏设计。
软件设计的5个原则:1 分⽽治之:将⼤型复杂的问题分解成许多容易的⼩问题,软件的体系设计,模块化设计都是分⽽治之的具体策略。
2 模块独⽴性:指软件系统中每个模块只设计软件要求的具体⼦功能,与软件系统中其他模块的借⼝是简单的。
耦合性越⾼,模块独⽴性越若弱。
3 提⾼抽象层次:抽象是指护⼠⼀个主题中与当前⽬标⽆关的⽅⾯,以便更注意与当前⽬标有关的⽅⾯。
软件设计时,尽量提⾼软件的抽象层次,按抽象级别从⾼到低进⾏软件设计,将软件的体系结构,按⾃顶向下⽅式,对各个层次的过程细节和数据细节逐层细化,直到⽤程序设计的语句能够实现为⽌。
当然实现这个过程需要我们对软件的接⼝,模块的运⾏等等有⾜够的熟悉。
4 复⽤性设计:指在构造新的软件的时候,不必从零做起,可以直接使⽤已有的软构件即可组装成新的系统。
5 灵活性设计:引⼊灵活性的⽅法有,降低耦合并提⾼内聚(易于提⾼替换功能);建⽴抽象(创建有多态操作的接⼝和⽗类);不要将代码写死(消除代码中的常数);抛出异常(由操作的调⽤者处理异常);使⽤并创建可复⽤的代码。
模块结构及表⽰:⼀个软件系统需要很多模块(包括程序设计中的函数和⼦程序)组成,称不能再分解的模块为原⼦模块。
软件工程结构化设计的基本步骤软件工程是一个综合性学科,它涉及到软件的开发、测试、维护等多个方面。
其中,结构化设计是软件工程中非常重要的一个环节,它直接影响到软件的质量和可维护性。
那么,软件工程结构化设计的基本步骤是什么呢?在本文中,我们将深入探讨软件工程结构化设计的基本步骤,帮助你更好地理解这一重要主题。
一、需求分析软件工程结构化设计的第一步是需求分析。
在这个阶段,你需要与用户进行充分的沟通,了解用户的需求和期望。
通过需求分析,你可以明确软件的功能性需求和非功能性需求,从而为后续的设计工作奠定基础。
在需求分析阶段,我建议你采用面向对象的方法来描述用户需求,并将其转化为可执行的任务。
这样做可以帮助你更好地理解用户的需求,并为后续的设计工作提供清晰的指导。
二、概要设计概要设计阶段是软件工程结构化设计的第二步。
在这个阶段,你需要将需求分析阶段得到的需求转化为软件的整体架构。
这包括确定系统的模块划分、模块之间的接口设计等工作。
概要设计是软件工程中非常关键的一个环节,它直接影响到后续的详细设计和编码工作。
在概要设计阶段,我建议你采用结构化的方法来设计软件的整体架构。
这样做可以帮助你清晰地描述软件的功能和结构,并为后续的详细设计提供有力的支持。
三、详细设计详细设计是软件工程结构化设计的第三步。
在这个阶段,你需要进一步细化概要设计阶段得到的软件架构,包括设计每个模块的具体功能和接口。
详细设计阶段是软件工程中非常具体的一个环节,它直接关系到软件的实现和性能。
在详细设计阶段,我建议你采用模块化的方法来设计每个模块的功能和接口。
这样做可以帮助你更好地组织软件的设计思路,并为后续的编码工作提供清晰的指导。
四、编码和测试编码和测试是软件工程结构化设计的最后两步。
在编码阶段,你需要根据详细设计阶段得到的设计图纸来实现软件的各个模块。
你还需要编写相应的测试用例,以确保软件的功能和性能达到预期的要求。
在测试阶段,你需要对软件进行全面的测试,包括单元测试、集成测试和系统测试等多个方面。
结构化程序设计方法1.结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。
2.结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
结构化的程序:自顶向下;逐步细化;模块化设计;结构化编码。
模块化设计的思想实际上是一种“分而治之”的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单了。
划分子模块时应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。
结构化程序设计(structured programming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。
其概念最早由E.W.Dijikstra在1965年提出的。
是软件发展的一个重要的里程碑,它的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、重复三种基本控制结构构造。
详细描述处理过程常用三种工具:图形、表格和语言。
图形:程序流程图、N-S图、PAD图表格:判定表语言:过程设计语言(PDL)结构化程序设计曾被称为软件发展中的第三个里程碑。
该方法的要点是:(1)没有GOTO语句;//在有资料里面说可以用,但要谨慎严格控制GOTO语句,仅在下列情形才可使用:·用一个非结构化的程序设计语言去实现一个结构化的构造。
·在某种可以改善而不是损害程序可读性的情况下。
(2)一个入口,一个出口;(3)自顶向下、逐步求精的分解;(4)主程序员组。
其中(1)、(2)是解决程序结构规范化问题;(3)是解决将大划小,将难化简的求解方法问题;(4)是解决软件开发的人员组织结构问题。
结构化程序设计的三种基本结构结构化程序设计的三种基本结构是:顺序结构、选择结构、循环结构结构化程序设计原则和方法的应用基于结构化程序设计原则、方法以及结构化程序基本构成结构的掌握和了解,在结构化程序设计的具体实施中,要注意把握如下要素:1. 使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑;2. 选用的控制结构只准有一个入口和一个出口;3. 程序语句组成容易识别的块,每块只有一个入口和一个出口;4. 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现;5. 语言中没有的控制结构,应该采用前后一致的方法来模拟;6. 严格控制 GOTO语句的使用。