Title: How to Teach Software Modeling

Author: Tetsuo Tamai

GraduateSchoolofArtsandSciences
TheUniversityofTokyo
3-8-1Komaba,Meguro-ku
Tokyo153-8902,Japan
tamai@acm.org

Note: Translation work for Dr. Lv

Here I only post out Chinese version for archiving.

如何教软件建模

玉井哲夫

东京大学艺术与科学研究生院

3-8-1驹场,目黑区

东京 153-8902, 日本

tamai@acm.org

摘要

为了提高学生学习软件工程的积极性,我们需要用一些方法来找到软件科学与实际运用之间的平衡。本文中我们主张,从一个统一的视角来教授多种软件建模技术,不但可以达到这一平衡还可以吸引学生的兴趣。

分类和主题描述

K.3.2 【计算机与教育】:计算机及信息科学教育—计算机科学教育; D.2.1【软件工程】:要求、规范—建模

一般条款

设计

关键词

软件建模,软件工程教育,UML

1.简介

大学软件工程教育面临着一个共同的问题:即普通学生通常没有开发实际应用软件的经验,因而缺乏动力以一个项目组或一个长期的组织去开发高质量的软件产品。让学生进行模拟现实规模的软件开发,虽然这需要大量的精力去筹备并管理这些项目。

另一个办法是教那些已经在行业里获得实际经验的学生。在我们的案例中,笔者目前门下有五名博士生,他们在实验室研究的同时还在公司工作。其带来的作用是,兼职学生与其他普通学生之间相互交流、相互促进,特别是引导普通学生了解实际软件问题。然而,过于强调实用性可能会导致疏忽科学技术,引起反理智主义。我们应当始终保持对软件工程科学和实际运用两方面良好平衡的追求。

我们认为,教授多种软件建模技术是一个平衡软件工程教育的好方法。不用说模是软件工程的关键概念,建模是基本技能。建模技术多种多样;有些很直观,适合初学者,有些则高度复杂,吸引理论导向的学生和研究人员。

我们在本文中想表明的是,从一个统一的视角来教授多种软件建模技术是有效的。这是根据我们在几所日本大学教授软件工程的经验。笔者最近出版了一部软件工程方面的教科书,主要关于软件建模(不幸的是,该书用日本所写)【1】。该书涵盖软件工程的整个领域,包括设计、测试及演化,但建模部分有着吸引聪明学生兴趣的作用。这些学生可能欠缺实际的大型软件系统开发的经验。它还给出了一个一致的观点,渗透运用在软件工程不同阶段的各种技术。

2.建模技术

在软件工程中,模被用于各种目的,如生命周期模型、进程模型、项目模型、产品模型、质量模型、领域模型、需求模型、设计模型、对象模型、数据模型等,我们基本是上关注需求和设计模型,但大多数的讨论涉及其他类别的模型。

教授建模几乎等同于教授抽象模型。通过获取目标的关键属性和结构,抽象出无关紧要的细节建立模型。因此,学习如何建模是掌握抽象模型的一个很好训练。

2.1 模型的图形表示

许多软件模型用图来表示。UML广泛的接受度喻示着图表比文本语言更受欢迎。在众多类型的图中,图结构图表目前使用最广泛。其原因可能如下。

1. 人类大脑理解世界最根本的方式是把它看做概念单元以及单元间关系组成的集合。概念单元可以被自然地用框、圆或者任何类似的图形表示,它们之间的关系可以用线或箭头连接这些图形来表示,分别对应于定点和图形的边。

图结构图表很容易用手或者借助绘图工具绘制。

图形理论的概念和算法可用且往往有助于分析图形表示的模型。一个典型的例子是通过追踪图形路径来推断传递关系。此外,子图的概念对解析更高层次模型或群聚的较低层次模型时很有帮助。

因此,一定数目的模型共用图形的同一结构。表1显示部分典型模型的图形结构。

表1:典型模型的图形结构

模型 顶点 边缘
数据流 进程 数据流
ER 实体 关系
状态转变 状态 转变
JSD 进程 数据流连接、数据矢量连接
活动 活动 控制流
Petri网 地点,转变 激发与令牌流

2.2 模型间的共同性和差异性

让学生注意到多模型共享一个常见结构是有教学意义的。但是,这种明显的相似性经常引起混淆。这种混淆不仅存在于软件建模图形中,还存在于生活中报纸、杂志、报告、天和其他文件里。其往往是,一个顶点表示一类东西,而另一个表示同一图表中不同的类型,或一类边缘与表示不同意义的边缘共存。因此,让学生自觉意识到不同模型之间的差异至关重要。我们时常会遇到的是,当我们让一个貌似很懂数据流模型的学生画一个数据流图表,结果画出来的图表会像控制流图。

把图形表示的模型分类,以示区别。基本上,可以分成两类。

1.静态模型:

一条连接顶点A和顶点B的边表示A和B之间的一个关系。无方向的边表示“A和B有一相同关系”,有向的边表示“A对B有一关系”。典型的例子包括实体联系模型,类图和语义网络。

2.动态模型:

一条从A到B的边表示由A向B的运动。此时的边始终是定向的。其有两个子类别:

(a)当一个观察指令从A移向B。如,控制流模型和状态转变模型。

(b)当数据或对象流从A移向B。如,数据流模型,工作流模型和输送流模型。

静态模型和动态模型可能不容易混淆,但是混淆不同的动态模型则很常见。由于图是直观理解的,它们的寓意很容易被理解含糊或者误解。

3.UML

UML图表也可以被看做图结构。表2显示了五个UML图表的图结构。

表2: UML图表的图结构

顶点 边缘
类图 泛化、组成、关联
状态机 状态 转变
活动图 活动 控制流
协作图 对象 信息流
序列图 信息锚点 信息流

我们通常不想教UML本身。因为UML是一个诸多图表的集合,它的规范总是在改变。就教学的目的来说,最好把UML视为围绕图表表示收集的—分析和设计如何做的—目录。应当根据如何教建模方法的原则选择图表。

各个UML图表包含过度丰富的结构,它们有时候会模糊模型的本质属性。例如,活动图本质上是一个控制流图,但它也包含一个用于描述数据流的符号。从强调不同模型间的差异的立场来说,包括此类特殊结构并不恰当。同理,协作图(在UML2中更名为“通信图”)被解释为与序列图有同样的语义。但如果这样的话,协作图的意义就相当有限。笔者更愿意把它当做对象之间的协作关系,且结合了一套不同的序列图。

4.结构图

软件建模本身很重要,而教授建模在软件工程教学中至少有两个额外的意义。一个是通过建模技术鸟瞰整个软件工程。另一个是吸引那些缺乏真实规模软件开发经验但是有才智,有意攻克现代软件构造复杂性的好学生。

5.参考文献

[1]玉井吨。 工程地基上的软件 。 岩波 书店,日本东京,2004。 日本。

版权持有者为作者/所有者。 ICSE’05月 15-21 2005年,圣路易斯,密苏里州,美国。 ACM 1-58113-963-2/05/0005。

2011/01/03