CMM能做什么

中山大学软件研究所 李磊
二00三年十一月十日

上一页 1 2  


  此项研究可以看作为CMM的补充----技术补充(显然管理是离不开技术的),为软件企业提供达到某CMM等级特别是CMM 2等级的可操作性技术手段。
  总之,为使软件开发达到可控的愿望不仅是CMM的设想,也是每个软件企业家的梦想,因此为达到此目的的研究是有意义的和有必要的。
  前节已述,并不是所有软件开发都是可工程化的,例如,以算法为中心的软件开发(因为它们不满足可重复性等),因此,此项研究仅针对复杂信息系统软件,例如:ERP,HIS和电子政务系统(的某些部分)等。
以下是此项研究的主要内容。

5.1 可工程化与不可工程化部分相分离技术
  如果复杂信息系统是可以全部或者易于工程化的,则软件工程开发根本不存在问题,并且CMM也没有存在的意义。事实上,复杂信息系统的工程化是困难的。因为目前在理论上还难以找到有效的方法。
  复杂信息系统也一定存在着可以或易于工程化的部分,否则CMM也不会提出这一问题。
因此我们希望研究出一种方法使得可工程化部分与不可(或难以)工程化部分相分离。对于可工程化部分采用工程化技术和管理,对于不易工程化部分采用目标化管理。
  我们的研究结果表明,通常同业务相关部分(大部分)是可工程化部分,并且关系到工程质量的成败;而同计算机技术(小部分)是不易工程化部分。如果这些不能有效地分离,则无论对过程如何控制,也难以达到对软件质量的控制。
我们的研究结果还说明:
  可工程化部分,或说业务规则部分,是以逻辑为基础的,也有人干脆称为业务逻辑。CMM也认可这一观点,它认为"软件是一种逻辑系统,设计软件比设计硬件所使用的逻辑量要多10到100倍"。
  对于逻辑的问题应当采用逻辑的表达方法,例如,说明性(declarative)表达方法。这种方法在现有的软件中也有采用,例如参数配置方法。这是最初始的说明性表达方法。
不易工程化部分,或说控制部分,是以自动机为基础的,有人干脆称之为业务引擎,在CMM中没有讨论到一点。容易理解业务引擎可以使得业务规则"动"起来,从而得到结果。这种方法在目前的软件工程中引起了越来越广泛的重视,因此各种各样的业务引擎被采用和商品化。这些业务引擎常被称之为"中间件"。
  如果把某程序开发语言定义为源语言,则业务引擎可以看作为(meta-Interpreter)元解释器,并且业务逻辑可以看作为元程序。理论研究表明,采用元结构的软件有更好的可控性。

5.2 软件结构
  当一个软件的说明成份和控制成份被分离之后,软件的结构也一定发生变化。因为在原来的软件中说明和控制成份是相混合的。变化后的软件结构我们称之为分层软件结构(或简称分层结构),如下图所示:

  从上图可以看出数据表示已不再是软件的核心,并且数据的变化事实上成为了业务流程的"副作用"(Side-effect)。
  在复杂信息系统中,业务逻辑对应实体对象可能不只一种,例如,ERP中的人事和生产管理,其中人事管理所对应的实体对象是员工,而生产管理所对应的实体对象是产品。如果用不同的业务引擎来处理不同实体对象的业务规则,并且,使得它们之间是松耦合的,则构成了一个多agents系统结构。采用这样的结构事实上使得复杂业务逻辑被分解了。无疑这可以降低软件复杂程度,从而降低开发风险。
  CMM的一个基本假设是,用户的需求是确定的,并且经过软件工程人员的努力是可以搞清楚的。在这种情况下,以过程控制保证软件的质量,从而完成软件工程。但是这一假定在大多数情况下是不成立的。因为,在通常的情况下,用户无法叙述清楚他们的需求,并且仅仅靠人?quot;努力"也不能保证理解用户叙述清楚的需求,特别是,用户的需求本身就是在变化的,因此通常需求是不确定的。对于需求不确定的软件工程,仅仅从过程管理的角度,无论如何也是无法解决的问题。
  对于不确定的软件需求,软件的结构应当支持这种不确定性。软件的分层和代理结构能够比较好地支持这种不确定性。事实上所有的软件都在一个进化的过程中,确定只是相对的,因此支持不确定性的软件结构也可称为可进化的软件结构。可进化的软件结构是提升软件质量的关键技术。

5.3 开发平台
  如果人们可以把对软件开发的主要注意力集中在对业务逻辑的理解和描述上,而不是集中在所采用的计算机实现技术上,则显然可以大大地降低软件的开发的难度,并且使得软件开发过程容易做到透明化。但是软件无论如何是与计算机技术相关的。为解决这一问题可研究一组引擎(中间件)来适当地屏蔽计算机技术相关性,这一组引擎我们称之为开发平台,其中包括:

  • 操作控制引擎
    Form调度自动机,每个Form为最小调度单位,它的输入是Form属性描述和Form之间的调度关系和条件等。

  • 对象状态引擎
    对象状态推导自动机,它根据对象状态变化的规则集自动演绎对象的状态变化。它的输入为对象属性描述,状态变化规则集,当前所发生的事件等。

  • 数据一致性验证引擎
    数据正确性验证自动机,它验证用户的每一个输入是否合法,正确。它的输入是数据一致性规则集。

  • 数据访问控制引擎
    用来屏蔽对数据库的直接访问,实现应用系统同数据库系统的相对独立。

  • 消息交换引擎
    用来协调代理之间的互动工作。

  上述引擎的实现,无疑已经基本实现了业务逻辑与计算机技术的隔离。而业务逻辑的描述和软件的表示层是容易工程化的。这样就实现了软件开始过程的相对透明化。上述叙述讨论的是,如何在已经得到正确需求的情况下,如何开发出高质量软件。但是对于如何得到正确需求没有涉及。
  众所周知,需求获取过程是难以工程化的。但是如果能对已获得的需求进行形式化,并且在上面建立演绎系统,则对于需求分析是有助的。因此本项研究还涉及需求的形式表达方法和表达平台,并且具备一定的推导能力。这个平台可发现可能的错误和不完善。但是这个系统不试图对需求进行一致性和正确性判定,因为这是不可解问题。

5.4 开发过程控制工具
  事实上,目前已经存在着许多软件开发过程控制工具(SDPC),例如各种case工具,微软公司的project,北大青鸟等。但是当软件开发技术和结构发生变化时,软件开发过程控制工具也应当是不同的,因此本项研究也包括SDPC。明显,SDPC的开发不存在理论和技术上的困难,或者说是"可工程化的",因此不存在"关键技术"。

六 基础理论
第一, 已被分离和分解的业务逻辑说明性表达方法,基础理论为说明性程序设计。
第二, 操作控制和对象状态引擎的实现,基础理论是情景演算和动作逻辑。
第三, 分层结构的软件开发方法,基础理论是元程序设计。

七 结束语
  如果没有理论上的突破,则无论用任何方未来解决软件工程问题都是困难的,CMM也是如此。

 

上一页 1