系统思想在软件系统分析设计教学中的重要性
2011-12-31康一梅
计算机教育 2011年10期
摘要:分析系统思想在工程设计中的重要性,以及目前软件分析设计教学中的相关问题,提出首先让学生掌握系统论的核心思想与概念,逐步培养学生习惯性地用系统思想去分析问题、解决问题,将系统思想融入讲授系统分析设计的各个环节中,让学生在潜移默化中学习用工程化的方法进行复杂系统的分析、设计与优化。
关键词:软件系统分析设计;系统;系统工程;设计决策
系统思想的核心是系统的整体观念,以及用系统工程的方法分析问题、解决问题的思路。任何系统都是一个有机的整体,亚里士多德说过“整体大于部分之和”,也就是说,系统设计不是各个部分的机械组合或简单相加。系统工程是把工程设计视为决策制定过程的一门学科,这意味着系统设计的每一个环节,都是一个以系统的整体功能和目标为目标函数的决策制定过程。
有效的系统工程方法是成功开发复杂系统的关键因素。系统与系统工程思想是所有工程设计人员需要具备的基本素质,对于软件系统设计人员也是一样。事实上,软件工程发展之初,即是将系统工程的一些思想引入到软件领域,以解决软件开发中存在的诸多问题。国外许多著名工科大学都非常注重系统工程方法与实践能力的培养。美国麻省理工学院(MIT)针对所有工程领域的硕士开设“系统工程”公共课,并将该课程定位为系统设计与管理相关专业的核心课程。但是国内很少有学校为学习工程设计的学生开设系统工程相关课程。笔者认为在软件系统分析设计的教学中应该将其作为基础,在介绍软件系统分析设计方法中融入系统思想与系统工程方法。
1当前教学中存在的问题
目前,国内软件系统分析设计的水平普遍偏低。国内软件行业有能力设计实现一个可用系统,但是,难以设计优秀的、复杂的大系统,已经设计的软件系统的可持续性普遍较差,软件系统设计的内在质量难以与国际顶尖的软件系统相提并论。这与国内的软件分析设计教学有直接关系,目前软件分析设计教学中普遍存在以下问题:
1) 注重工具,不注重设计方法。
许多时候,教学中更崇拜工具使用及表达形式而忽略了内容。如将UML误当作分析设计方法,其实UML是一种辅助分析设计的描述方法,并非分析设计方法。
2) 注重技术,不注重设计决策与评估。
在许多教学与设计实践中,将技术提升到最核心的位置,然而技术是为系统目标服务的,技术的选择应以系统目标为设计决策目标,需要考虑功能、性能、人员、周期、经济等因素,科学地进行设计决策。通常,这些设计策略的抉择往往完全依赖于开发人员模糊的经验与直觉,而设计评审 [1-4]也同样依赖于“专家”及同行的经验与直觉。
3) 注重细节,不注重系统整体效果。
由于从教师到学生都缺乏系统思想,在软件设计过程中,他们更关注细节,而忽视系统整体。如过分关注可有可无的功能、界面风格等,设计中常常由于局部过于优化而影响整体性能。
4) 注重实现与应用,不注重优化。
系统设计是一个不断迭代优化的过程,可用的系统与好的系统有很大的差别。一个好的系统应有很好的可扩展性、适应性等,这样的系统有很强的生命力,如微软的Windows、Office等软件系统。
要解决上述问题,就需要在软件系统分析设计的教学中,培养学生的系统思想,让他们具备复杂系统的分析设计能力。
2在教学中引入系统思想
2.1让学生掌握系统思想
在教学中,让学生掌握系统论的核心思想和以下基本概念,并且习惯性地用其分析问题、解决问题。
1) 系统的整体概念。系统论的核心思想是系统的整体观念。系统中各要素不是孤立地存在着,每个要素在系统中都处于一定的位置上,起着特定的作用。要素之间相互关联,构成了一个不可分割的整体。要素是整体中的要素,如果将要素从系统整体中割离出来,它将失去要素的作用;要素的目标一旦背离了系统的整体目标,那么要素应被放弃或修改。
2) 系统的要素。任何系统都须具有九个要素:目标、环境、边界、部件(子系统、模块、类或函数)、相关部件、接口、输入、输出、约束。在系统分析时要明确这些要素,缺少要素的系统规格说明是不完整的;在系统设计时要基于目标、环境、边界及约束确定部件、相关部件、接口、输入、输出。
3) 系统的关键特征。系统应具有以下三个特征:
① 一致性:一个系统应该有这个系统统一的特征,使系统是协调一致的,而非混乱拼凑不协调。让学生在设计系统时,不论是人机交互、系统结构、编码规范等各个方面都应保持一致。
② 功能依赖性:子系统间的关系是基于系统的功能或目标要求,而非由于与系统目标无关的因素而建立关系。让学生在设计系统时,明确每个部件与其他部件间的依赖关系,以及提供的功能服务。在评审设计方案时,孤立的部件应被删掉或重新设计。
③ 有用的目标:系统的目标应该是有用的、有意义的。让学生在确定系统与部件的目标(包括功能)时,评估其价值,应放弃无用的系统或部件。
2.2将系统思想融入软件系统分析设计中
在介绍系统思想的基础上,教师在讲授系统分析设计的过程中,应该融入系统思想,让学生在潜移默
化中学习基于系统思想的分析设计。具体可以从以下几个方面展开:
1) 将系统的整体概念融入系统分析设计中。
在分析设计时,应从整体到细节,就如胚胎发育的过程一样,先有整体,然后逐渐发育出各个器官。因此,学生学习分析设计一个系统时,首先要明确系统的总体目标;然后确定系统的范围、边界和约束;之后确定系统与环境的交互,包括输入、输出、接口;最后才是各个功能模块及其交互等。
2) 用系统的核心要素构建设计决策模型,评估、优化系统分析设计。
将软件设计看做一个决策过程,这种思想将艺术化的设计变成科学的工程化问题。可以将设计看作是一种问题求解,设计问题可以用目标、约束、候选方案、代表、答案来描述[5],绝大多数设计问题是没有确定性答案的NP难题[6]。构建决策模型时,目标和约束是非常重要的,比如,任何工程问题都会有成本约束。软件设计必须考虑经济因素,这在目前的软件系统分析设计教学中很少涉及。
3) 基于系统特征设计、评估系统。
系统的特征是人们从自然系统中总结出来的系统固有属性,但是在人工系统中,这些属性往往会因设计缺陷被破坏。教师应不断强化这些理念,让学生在任何一个设计活动中都不忘这些设计原则。例如,系统要满足一致性,那么,从外观上,一个系统的色彩应该协调一致才美观;从结构上,整体的结构也应具有一致性,软件整体若采用层次体系结构,那么所有的子系统都应在这个整体的层次结构中。此外,一致性还应该体现在目标一致性上,各个要素都应该为了共同的、一致的目标工作。尤其对于多人开发的复杂大系统,一致性设计尤其重要。教师应培养学生这样的基本理念,学生们才有可能在以后的实践中完成复杂大系统的设计。
系统的各个部件要满足功能依赖性,这就要求系统中的每个部件或部件的子集都满足下面两个条件:
① 每个部件的特性或行为必须对整个系统的特性与行为产生影响、做出贡献;
② 每个部件的特性或行为至少依赖于一个其他部件的特性或行为。
学生在设计系统时应该以此为原则,如果某个部件未对整个系统做出贡献或与任何其他部件没有接口,那么这个部件或者不属于该系统,或者设计错误。
从系统的角度,为了毫无意义的目标,或者错误的目标而设计的任何子系统或要素,无论多好都是错误的。
4) 用系统工程方法进行设计评估与决策。
确定软件设计决策时,应借鉴系统工程的决策方法,在约束条件下,均衡相互冲突的设计目标,优选出满意的设计方案。软件设计是一个复杂的决策问题,选择或评价软件设计的优劣往往有多个目标可资比较,如功能、性能、可维护性等。这些目标有些可以定量描述,有些只能定性描述,且相互冲突。对于
这样的决策问题,一般没有最优解,而是通过折中选择一个满意解。
3结语
本文提出在软件系统分析设计中让学生掌握系统论的核心思想与概念,给出了需要重点讲授的几个关键方面,让学生在潜移默化中学习基于系统思想的分析设计。如果希望学生深入理解系统工程方法,那么应该在讲授软件系统分析设计课程前,将“系统工程”作为先修课程介绍,这样学生可以较深入、全面地掌握系统工程的方法论,然后在软件分析设计课程中贯穿系统思想,这样教学效果会更好。
参考文献:
[1]Antony Tangɦ