最近正在猛看软件工程,发现这门学科真的很有用,尤其是对于企业级别的软件的开发作用巨大。下面我就写一些关于软件工程方面的东西,就当作总结一下所学的内容吧。
我想这个问题应该从软件危机开始讲起吧,软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重的问题。具体来说:
l
对软件开发成本和进度的估计常常很不准确。
l
用户对“已完成的”软件系统不满意的现象经常发生。
l
软件产品的质量往往靠不住。
l
软件常常是不可维护的。
l
软件通常没有适当的文档资料。
l
软件成本在计算机系统总成本中所占的比例逐年上升。
l
软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。
而软件工程这门学科的出现也是为了从宏观的角度来观察软件,解决危机。软件工程师把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;研究中提到的途径。
软件工程的过程可以用软件生命周期来表示,生命周期的具体内容为:问题定义、可行性研究、需求分析、概要设计、详细设计、编码和单元测试、综合测试、软件维护。生命周期模型又分为以下几种:瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型。
E-R
图、数据流图、状态转换图是结构化分析中的重点图。
E-R
图中包含了实体、关系和属性等三种基本成分。通常用矩形框代表实体,用连接相关实体的菱形框表示关系、用椭圆形或圆角矩形表示实体的属性,并用无向边把实体与其属性连接起来。数据流图有四种基本符号:正方形表示数据的源点或终点;圆角矩形代表变换数据的处理;开口矩形代表数据存储;箭头表示数据流,即特定数据的流动方向。在状态图中,初态用实心图表示,终态有一对同心圆表示。中间状态用圆角矩形表示,可以用两条水平横线把它分成上、中、下
3
个部分。上面部分为状态的名称,这部分是必须有的;中间部分为状态变量的名字和值,这部分时可选的;下面部分是活动表,这部分也是可选。
数据字典是所有与系统相关的数据元素的有组织的列表,并且包含了对这些数据元素的精确、严格的定义,从而使得用户和系统分析员双方对输入、输出、存储的成分甚至中间计算有结果有共同的理解。简而言之,数据字典是描述数据的信息的集合,是对系统中使用的所有数据元素的定义的集合。大多数数据字典都包含以下信息:名字、别名、使用地点与方式、内容描述、补充信息。
说完了结构化分析,该说说结构化设计了。其中模块是很重要的概念。模块是由边界元素限定的相邻的程序元素的序列,而且有一个总体标识符来代表它。有五条标准来评价一种设计方法定义有效的模块系统的能力:模块可分解性、模块可组装性、模块可理解性、模块连续性、模块保护性。有效的模块化的软件比较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要。独立的模块比较容易测试和维护。这是因为相对说来。修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够“插入”模块。模块的独立程度可以由两个定性标准来度量,这两个标准分别成为内聚和耦合。耦合衡量不同模块彼此间互相依赖的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。最好能做到松耦合、高内聚。
表示软件结构的图形工具有层次图、
HIPO
图和结构图,通常使用层次图描绘软件的层次结构。在层次图中一个矩形框代表一个模块,框间的连线表示调用关系。在自顶向下逐步求精设计软件的过程中,使用层次图很方便。
HIPO
图是美国
IBM
公司发明的“层次图加输入
/
处理
/
输出图”的英文缩写。为了使
HIPO
图具有可追踪性,在层次图里除了顶层的方框之外,每个方框都加了编号。结构图和层次图类似,也是描述软件结构的图形工具,图中一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。因为按照惯例总是图中位于上方的方框代表的模块调用下方的模块,即使不用箭头也不会产生二义性,为了简单起见,可以只用直线而不用箭头表示模块间的调用关系。
之后应该是过程设计了。过程设计的工具有:程序流程图、盒图(
N_S
图)、
PAD
图、判定表、判定树、过程设计语言(
PDL
)。程序流程图又成为程序框图,它是历史最悠久的使用最广泛的描述过程设计的方法,然而它也是用得最混乱的一种方法。盒图有下述特点:
l
功能域明确,可以从盒图上一眼就看出来。
l
不可能任意转移控制。
l
很容易确定局部和全程数据的作用域。
l
很容易表现嵌套关系,也可以表示模块层次结构。
PAD
图是问题分析图的英文缩写,自
1973
年由日本日立公司发明以后,已得到一定程度的推广。判定表能清晰地表示复杂的条件组合与应做的动作之间的对应关系。一张判定表由四部分组成,左上部列出所有条件,左下部是所有可能作的动作,右上部是表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作。判定表右半部的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作。(未完待续)