结构化方法(SD方法)是一种传统的软件开发方法,它是由结构化程序设计、结构化分析和结构化设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。本篇博文将逐一介绍这三部分。
结构化编程是一种编程范式,这种范式规定了我们在写程序时候的一些要求,其目的是使我们能够编出来的程序可读性、可维护性、可扩展性更佳,避免写出面条式的代码(面条式代码是一种对结构化不好的代码的形象比喻,代码直接相互交迭、相互跳转,所有代码都揉在一起,就如面条一样)。
结构化编程确实可以使得程序变得更清晰可读,但严格的限制也使得了有些时候编程会变得很不方便,因此也有人提出了反对的意见。如著名计算机科学家高德纳便提出了使用goto指令可以使得程序更清楚而有效率,也不会牺牲程序的可读性。在我们如今许多的程序设计里面,最常见的几个非结构化但又是相当有用的程序设计思路有如下两个。
程序多出口,即一个过程或函数里面有多个return,或循环里面的continue或者break。这样的设计允许了我们能在多重的嵌套中直接退出,或者提早退出循环。虽然这些违反了结构化设计的原则,并且可以使用纯粹的结构化设计实现,但是比起纯粹的结构化设计会节省许多的代码,并且不会非常影响程序的可读性。
错误处理,即像java里面的try-catch语句。因为没一条语句都有可能产生错误,因此在try-catch里面每一条语句都有可能是出口,相当于多出口,但只是错误处理里面出口并不是显式定义。错误处理在编程里面是非常必要的,因此错误处理也是一个合理的例外。
结构化分析一般指利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树、E-R图等。
数据流图(Data Flow Diagram):简称DFD,它也称为数据流程图。强调数据传递和加工角度
数据流图画法
(一)确定系统的输入输出
由于系统究竟包括哪些功能可能一时难于弄清楚,可使范围尽量大一些,把可能有的内容全部都包括进去。
(二)由外向里画系统的顶层数据流图
首先,将系统的输入数据和输出数据用一连串的加工连接起来。在数据流的值发生变化的地方就是一个加工。接着,给各个加工命名。然后,给加工之间的数据命名。最后,给文件命名。
(三)自顶向下逐层分解,绘出分层数据流图
对于大型的系统,为了控制复杂性,便于理解,需要采用自顶向下逐层分解的方法进行,即用分层的方法将一个数据流图分解成几个数据流图来分别表示 。
举个栗子:
其中=表示数据存储,椭圆表示数据进程,箭头表示直接连接线和动态连接线。
数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。简而言之,数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合。
结构化语言的显著特征是代码和数据的分离。如果开发了一些分离很好的函数,在引用时我们仅需要知道函数做什么,不必知道它如何做。exp,c语言。
判定表方法是黑盒测试方法的一种,主要用于输入和输出比较多,功能逻辑比较复杂的情况,通过画出判定表缕清需求中的功能逻辑。
判定表通常有以下四个部分组成:
举个栗子:
判定表的优点和缺点
优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可以避免遗漏。
缺点:不能表达重复执行的动作,例如循环结构。
判断树(Decision Tree)判又称决策树,是判断表的变形,一般比判断表更直观、易于理解。判定树是描述基本处理逻辑功能的有效工具。
举个栗子:
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 它是描述现实世界关系概念模型的有效方法。 是表示概念关系模型的一种方式。
举个栗子:
如果说结构化分析做的是需求分析,描述的是开发软件过程中做什么的问题,那么结构化设计(Structured Design)做的就是系统设计,描述的是开发软件过程中怎么做的问题。是一种面向数据流的设计方法。
举个栗子:
1.百度百科-结构化设计
2.结构化方法
3.结构化语言
4.数据流图
5.数据字典
6.[ 黑盒测试方法 ] 判定表驱动法
7.判定树和判定表