探讨软件工程概念模型

2008-04-09 04:09:34来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  “今天,我比以往更加确信,概念的完整性是产品质量的核心。……这个原理决不仅限于软件系统,它适合于所有的复杂事物。” ——Brooks《人月神话》

  “模型可以澄清相互间的关系,识别出关键元素,有意识地减少可能引起的混淆。”
    ——Forsberg,K.《可视化项目管理》

  软件工程内容广泛,新技术新热点层出不穷。如何快速掌握软件工程新技术,以及如何对众多软件工程技术综合运用,以取得最佳的实践效果,已经成为很现实的问题。本文认为,通盘把握软件工程概念模型,将对解决上述问题大有裨益。

  一、什么是软件工程概念模型

  模型就是抽象,就是有意识地忽略事物的某些特征。抽象带来的好处是能够反映模型中元素之间的关系,清晰把握大局。

  概念模型是模型的一种,简单说就是抽象程度极高的一种模型。

  软件工程概念模型是对软件工程领域进行抽象描述的模型,它能够使我们对软件工程有一个完整把握。

  二、一个精简的软件工程概念模型

  《软件工程——技术、方法与环境》一书中,有一个极为精简的软件工程概念模型:



  该模型可以用一句话概括:软件工程是(目标,方法,活动)三元组。它体现了目标-方法-活动的3维正交关系:

  · 任何目标,都要依照特定方法,由特定活动实现;

  · 任何方法,都是指导特定活动,来完成某种目标;


  · 任何活动,都由特定方法指导,来完成某种目标。

  三、一个细化的软件工程概念模型

  下图是笔者理解的软件工程概念模型(采用UML类图的语法):



  1、 模型概述

  图中,“理论与经验”和“工具”可以认为是2个比较独立的概念,其他概念可以被分为4组——“方法论”、“过程”、“目标”、“项目”,分别标以不同颜色。这4组主要概念构成了软件工程概念模型的骨架,可以描述为:为达到一定的“目标”,我们建立起相应的“项目”,在某种“方法论”的指导下,按照一定的“过程”,生产出相应的软件“产品”。

  从这个模型的骨架中,我们能清晰看到上面精简模型的影子——(目标,方法,活动)三元组。但显著区别是,更加强调“活动”的组织和控制方式——“过程”。这是软件实践发展的必然结果,因为,随着软件产品的复杂程度不断提高,势必要更加强调“过程”。Roger S. Pressman在其经典著作《软件工程:实践者的研究方法》里就指出:大约每隔5至10年,软件界就会重定义“问题”,将其焦点从“产品”转移到“过程”。

  2、 方法论

  “方法论”是在一定“原则与策略”指导下的一套相关的“方法与技术”,而“方法论”可以分为“开发方法论”和“过程方法论”2种。相应的,“原则与策略”可以是开发策略,例如著名的“功能分解”策略;也可以是过程策略,例如迭代模型等“过程模型”,就是过程策略。

  应当说,“过程方法论”是随着软件实践的深入,在“开发方法论”产生之后才产生的概念。Roger S. Pressman在其经典著作《软件工程:实践者的研究方法》里就指出:大约每隔5至10年,软件界就会重定义“问题”,将其焦点从产品转移到过程。在本文后面的章节,笔者将用“过程方法论”的概念解释“Agile到底是过程还是方法论”的迷惑。

  另外,值得一提的是,在实际当中,存在“方法”其实是指“方法论”的现象,在此说明一下。一方面,“方法论”是为完成特定目的一套“方法”,“方法论”和“方法”是一对多的关系;另一方面,实际中人们常将“方法论”简称为“方法”,所以也可以认为“方法”是个递归的概念,它可以是“原子方法”,也可以是“方法论”。至此,当你同时面对“Agile方法”和“Agile方法论”这2种说法时,就不必迷惑了。



  3、 过程

  “过程模型”是对具体“过程”的抽象,它仅规定了后者的框架,例如瀑布模型规定了“过程”是线性框架;“过程模型”的例子还有螺旋模型、喷泉模型、迭代模型等。一个具体“过程”包括“开发子过程”和“管理子过程”2个子过程,它们分别由一组相关的“开发活动”和“管理活动”组成。“开发活动”开发出或再加工“开发工件”,“管理活动”使用“管理工件”,对“开发活动”和“开发工件”进行管理。
“过程开发与改进”是一个特殊的“管理子过程”。“过程开发与改进”与其它一般的“管理子过程”相比,后者是为软件产品的开发服务的,而前者是以开发和改进软件过程本身为目的。软件工程大师Osterweil在其论文《Software Processes are Software Too》中高屋建瓴地指出:软件过程也是软件。软件有一个开发的过程,软件过程也有一个开发的过程;软件开发产出软件产品,软件过程开发产出过程产品。

  RUP是著名的软件过程产品。CMM是著名的软件过程改进框架,它本身不是特定软件过程的定义,它只是建议如何一步一个台阶地改进软件过程。在本文后面的章节,笔者将从“过程开发与改进”的角度,谈谈RUP的定制和CMM的定位问题。

  4、 目标

  任何实践都是有“目标”的,软件实践也不例外;比如“开发Bug跟踪系统”就是一个“目标”的例子。“目标”的完成,依赖于一系列“任务”的完成;比如上述“目标”可以分解为“分析”、“设计”、“编码”、“实现”等“任务”。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何编写高质量“软件需求说明书”

下一篇:需求调研分析中的项目干系人概念