方法学的对比
各种软件工程方法的适用范围不尽相同,目前使用得最广泛的软件工程方法是传统方法学和面向对象方法学。
(1)传统方法学
软件工程传统方法学也称为结构化方法,采用结构化技术,包括结构化分析,结构化设计和结构化程序设计,来完成软件开发任务。
软件工程传统方法学通常会使用的工具有:E-R图(实体-联系图Entity Relationship Diagram),数据流图(Data Flow Diagram,DFD),状态转换图,IPO图,数据字典(Data Dictonary ,DD),结构化语言,判定表,判定树等。
软件工程传统方法学把软件开发分成偌干个阶段,顺序完成各阶段的任务,每个阶段的开始和结束都有严格的标准;每个阶段结束时要进行严格的技术审查和管理
结构化的核心思想是‘自顶向下,逐步分解’,特别适合数据处理领域的问题(例如会计行业)。但由于使用了整体静态的分析方法,并不能很好的应对变化,不适合解决大规模的,特别复杂的项目。
核心建模方法:数据流图,自顶向下的建模方法,在软件工程传统方法学中此建模方法既是需求分析技术,也是完成需求规格化的技术手段。
(2)面向对象方法学
面向对象方法学的重要流派有Grady Booch的Booch方法,James Rumbaugh的OMT(Object Modeling Technique)和Ivar Jacobson的OOSE(Object-oriented software engineering)等。现代的面向对象方法学通常采用业务建模,用例技术,OOA(面向对象分析),OOD(面向对象设计),OOP(面向对象程序设计)来完成软件开发任务。
面向对象方法学通常使用的工具有:uml(序列图,类图,对象图,用例图,状态图,活动图,组件图等),面向对象开发语言等。
面向对象的核心思想是一切皆对象。用对象描述整个世界,对象的结构(属性+方法),对象之间的关系(继承,关联,组合,聚合,依赖)和对象状态的封装(使用对象的方法改变对象的属性)构成了整个模型。面向对象模型的建立所需要的知识与我们平常的对真实世界的认知很接近,这使得我们建立模型的成本大大降低。由于创建软件模型的知识和人对现实世界的认知高度吻合,使得软件模型能跟随现实世界的变化而变化,从而使软件有较好的稳定性和应对变化的能力。这也是隐隐暗示着我们:软件的精髓在于描述,而不是创造。
核心建模方法:
业务建模(组织建模):分析与愿景(Vision)相关的业务流程,寻找可用软件改善之处,常用工具 :序列图,活动图,类图(领域模型)。
需求建模:汇聚需改善的要求形成待开发系统的需求,也就是系统的外在表现。常用工具:用例图,用例规约。
分析建模:为支撑系统的外在表现,用对象的方式描述系统内部结构和运行机理。常用工具:类图(分析模型),序列图,状态图。
设计建模:将分析建模得到模型映射到某具体的技术平台上。此阶段产生的模型按层次和抽象程度可分为:架构模型(系统结构),详细设计模型(用设计模式改善过的类图,某类数据库的表结构),程序设计模型(代码)。
面向对象方法学适应多种开发模型(软件生命周期,软件过程模型),由于UML创始人(Grady Booch、James Rumbaugh和Ivar Jacobson)的原因RUP(Rational Unified Process,统一软件开发过程)成了面向对象方法学目前最常用的开发模型。
(3)传统方法学与面向对象方法学的联系与比较
传统方法学与面向对象方法学的联系:
面向对象方法学脱胎于传统方法学,虽然目前面向对象方法学已经成为了主流,传统方法学开始势微。但面向对象方法学是在汲取了传统方法学的精髓发展而来的,俩者实际上有着很多相同,相通之处。
a。为了描述领域概念,面向对象方法学用的是类图,软件工程传统方法学有E-R图,如果是面向对象用的是贫血模型(entity(实体类)没有业务逻辑方法),那就几乎和E-R图一模一样了。
b。在面向对象方法中为了详细的描述少数的核心类的状态变化和封装的业务逻辑,我们通常会为这些核心类建立状态机图。状态机图就是软件工程传统方法学的状态转换图发展而来的.传统方法学的状态转换图是针对的整个系统的状态图,它是表明了系统的外在表现,这就跟需求规格说明书差不多的用途了。只不过如果系统稍微复杂一些,状态转换图就很难被建立起来。所以在实际开发中很少能看到状态转换图的,却能看到为描述少数的核心类的状态变化的状态机图。
c。用例技术是面向对象方法学的需求获取和描述的利器。但在James Rumbaugh的OMT方法中的描述需求时用的是功能模型,还在用传统方法学的数据流图。直到Ivar Jacobson的OOSE方法中在OMT的基础上,发明了用例,创建了需求模型(注重系统对外提供的价值),取代了使用数据流图进行需求分析和建立功能模型。就算现在的用例规约(用例的文本形式),也保留功能的一些特点,例如:依然有输入输出的选项,依然有主路径(成功路径,主要流程),异常路径(支线流程)等。
传统方法学与面向对象方法学的比较:
这两种方法学都可以创建出优秀的软件,但众多影响软件开发的因素中,经济因素往往占主导地位,也可以说软件开发是经济学。而软件开发的成本通常成为首先要考虑的问题。
a.软件工程传统方法学是面向过程的,面向过程用的是尼古拉斯·沃斯 提出那个著名的等式:程序 = 算法 +数据结构。但是数据结构是计算机存储、组织数据的方式,也就是说软件工程传统方法学用的是面向计算机的思想。而软件要处理的问题大都不计算机领域的问题,其他领域的问题要转换到计算机领域来解决,在这两者之间往往存在着巨大差距,这就导致了软件工程传统方法学制作软件成本高昂。而面向对象的思想与我们的日常认知很接近,可以复用我们平常的知识,这会让我们制作软件会容易得多,大大降低了成本。
b。面向对象的基本构成是对象,对象的构成是 属性+影响属性的方法,从某种角度也可以看成是对象是算法 +数据结构的结合体,这个粒度要比面向过程的单个过程和分散的数据要大,同样功能需求的软件用面向对象技术分析要比面向过程技术分析要更容易。因为分解的粒度大就会导致要分析的东西会变少。人在同一时间只能同时关注7+2个事物,需要关注的事物少会有助于大脑对事件的把握,降低了脑负荷,这也相当于降低了开发成本。