admin 管理员组文章数量: 887039
2024年2月5日发(作者:linux常用命令网站)
软件工程中的结构化程序设计
软件工程的基本思想是面对复杂的问题,让软件的开发按照工程的概念、原理、技术和方法模式来实施,有计划地按照要求分阶段实现。针对大型项目开发,为了保证软件产品质量,提高软件开发效率,在进行详细设计、程序设计之前,必须先确定软件总体结构。软件总体结构设计的方法主要有结构化设计、面向数据结构的设计和面向对象的设计,其中结构化设计方法是应用最广泛的一种,它是建立良好程序结构的方法,提出了衡量模块质量的标准是“高内聚、低耦合”。
另外,结构化设计(structured design,SD)方法是一种面向过程的设计方法或面向数据流的设计方法,它可以与结构化分析方法、结构化程序设计(structured programming)方法前后呼应,形成了统一、完整的系列化方法。结构化设计方法以需求分析阶段获得的数据流图为基础,通过一系列映射,把数据流图变换为软件结构图。
结构化程序设计通常使用自上往下的设计模型,开发员将整个程序结构映射到单个小部分。已定义的函数或相似函数的集合在单个模块或字模块中编码,这意味着,代码能够更有效的载入存储器,模块能在其它程序中再利用。模块单独测试之后,与其它模块整合起来形成整个程序组织。
程序流程遵循简单的层次化模型,采用“for”、“while”等循环结构。几乎任何语言都能使用结构化程序设计技术来避免非结构化语言的通常陷阱。非结构化程序设计必须依赖于开发人员避免结构
问题,从而导致程序组织较差。大多数现代过程式语言都鼓励结构化程序设计。
结构化设计主要有两种图形工具:结构图和层次图。结构图和层次图基本上是大同小异,都是用来描述软件结构的图形工具,图中设有很多方框,一个方框就代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)用来表示模块的调用关系。二者描述重点不一样。
1.结构图
结构图主要描述软件结构中模块之间的调用关系和信息传递问题。基本成分有模块、调用和数据。
在通常情况下会在结构图中用箭头注释一下表示模块在调用过程中信息的来回传递。可以根据箭头的尾部形状标明某种信息,认定一种形状作为一种信息符号,自己只要按箭头形状就可以区分传递的信息是数据还是控制信息了。比如:尾部是空心圆就表示传递的是数据,实心圆就表示传递的是控制信息。结构图不仅仅只是一些基本符号,其实还有不少附加符号,用来表示模块的选择调用或循环调用的。
2.层次图
层次图主要描述软件系统的层次结构以及各个功能的隶属关系,特别适合于自顶向下设计使用。在层次图里除顶层之外,每个方框里都加编号,记录它所在的层次及在该层次的位置。一般最上层的模块含有退出、输入、处理、输出、查询和系统维护模块。根据系统的具体要求,下层再将功能进一步细化。
层次图和结构图对于模块调用次序方面要求的并不严格。在画模块方面,很多人习惯按调用次序从左到右的方法画模块,其实又没有规定一定要这样,出于其他方面的考虑(例如为了减少交叉线),完全可以不按这种次序画,还有就是在层次图和结构图中并不指明什么时候调用下层模块。一般情况下上层模块中除了调用下层模块的语句之外还有其他语句,到底是先执行调用下层模块的语句还是先执行其他语句,丝毫不在图中指明。事实上,层次图和结构图往往只表明一个模块用来调用哪些模块,对于一些模块内不含其他成分的根本就不作表示。
数据流程图转换为初始软件结构图后,按照高内聚低耦合、模块化、信息隐藏的原则,应该对初始软件结构图进行优化。考虑设计优化问题时应该记住,“一个不能工作的‘最佳设计’的价值是值得怀疑的”。软件设计人员应该致力于开发能够满足所有功能和性能要求,导出不同的软件结构,对它们进行评价和比较,力求得到“最佳”的效果,这种优化真正的优点,就是能够把软件结构设计和详细设计很好地分开。通常,用下述方法对初始化软件结构进行优化是合理的:在不考虑时间因素的前提下开发并精化软件结构。在得到初始的功能结构图之后,如果发现有几个模块有相似之处,可消除重复功能,改善软件结构;模块功能的完善化。一个完整的功能模块,不仅应能完成指定的功能,而且还应当能够告诉使用者完成任务的状态,以及不能完成的原因;模块的作用范围应在控制范围之内。模块的控制范围包括它本身及其所有的从属模块;模块的作用范围是指模块内一个判
定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围;尽可能减少高扇出结构。模块的扇出过大,将使得系统的模块结构图的宽度变大,宽度越大结构图越复杂。模块的扇出过小也不好,这样将使得系统的功能结构图的深度大大增加,不但增加了模块接口的复杂度,而且增加了调用和返回的时间开销,降低系统的工作效率。比较适当的模块扇出数目为2~5个,最多不要超过9个;模块的大小要适中。限制模块的大小是减少复杂性的手段之一,因而要求把模块的大小限制在一定的范围之内。模块的大小一般用模块的源代码数量来衡量,通常在设计过程中,将模块的源代码数量限制在50~100行左右,即一页纸的范围内,这样阅读比较方便;设计功能可预测的模块,避免过分受限制的模块。一个功能可预测的模块不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果;软件包应满足设计约束和可移植性。一个仅处理单一功能的模块,由于具有高度的内聚性,而受到了设计人员的重视。
版权声明:本文标题:软件工程中的结构化程序设计 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1707147312h510721.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论