构建系统的工程方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章构建系统的工程方法

1.1 什么是系统

1.1.1 系统的要素

系统一词,来源于古希腊语,是由部分构成整体的意思。通常把系统定义为:由若干要素以一定结构形式联结构成的具有某种功能的有机整体。任何系统都是一个有机的整体,它不是各个部分的机械组合或简单相加,系统的整体工功能是各要素在孤立状态下所没有的新质。亚里斯多德的“整体大于部分之和”的名言可以说明系统的整体性,但要素性能好,整体性能不一定好。同时,系统中各要素不是孤立地存在着,每个要素在系统中都处于一定的位置上,起着特定的作用。要素之间相互关联,构成了一个不可分割的整体。要素是整体中的要素,如果将要素从系统整体中割离出来,它将失去要素的作用。正象人手在人体中它是劳动的器官,一旦将手从人体中砍下来,那时它将不再是劳动的器官了一样。

通常在IT领域,装配在一起的硬件和软件,必须与用户、其他软件任务、其他部分的硬件、现有数据库(即仔细定义的数据集合和数据关系)甚至其他的计算机系统进行交互。因此,为任何系统提供一个背景是非常重要的,该背景就是系统的边界(boundary):系统中包含什么,不包含什么。因此,要开发或集成一个系统,必须知道系统包含哪些要素。

(1)活动和对象

首先,要对活动和对象加以区分。活动(activity)是发生在系统中的某些事情,通常描述为由某个触发器引发的事件,活动通过改变某一特性将一个事物转变成另一个事物。这种转变可能意味着数据元素从一个位置移到另一个位置,从某个值转变为另一个值,或者与其他的数据相结合为另一个活动提供输入。例如,一个数据项可以从一个文件移到另外一个文件。这种情况下,改变的特性是位置。或者,数据项的值可能增加。最后,数据项的地址可以与若干其他数据项的地址一起包含在参数列表中,以便可以调用另外的例程一次性处理所有数据。

活动中涉及的要素称为对象(object)或实体(entity)。通常,这些对象以某种方式相互联系。例如,对象能够排列在表格或矩阵中。对象常常组成记录(这时,对象也称为字段),其中,每一条记录按规定的格式排列。有时,对象不是将每一项考虑为一个大记录中的字段,而是将对象看作是独立存在的。对象的描述包括每个对象的特性列表,以及所有使用对象或影响对象的动作的列表。例如,考虑“多边形”对象。一个对象描述可以是,这个对象具有诸如边数以及每条边的长度等特性。动作可能包括计算面积和周长。甚至可能还可以有一个属性称为“多边形类型”。这样,可以标识每个“多边形”的实例,例如是“菱形”还是“长方形”等。类型本身也可能有对象描述。例如“长方形”可以由“正方形”和“非正方形”组成。

(2)关系和系统边界

一旦定义了实体和活动,就要把实体和它们的活动进行匹配。实体和活动之间的关系应该要清晰、仔细地予以定义。实体的定义包括实体起源于何处的描述。有些实体驻留于已经

存在的文件中,有些实体在活动的过程中被创建。实体的目的地也是非常重要的。有些实体仅仅被一个活动所使用,而有些实体会被指定为其他系统的输入。也就是说,系统的某些实体会被当前系统范围之外的活动所使用。因此,可以认为我们正在考虑的系统是有边界的。有些项跨越边界进入我们的系统,而另一些是我们系统的产品并为其他系统所使用。

使用这些概念,我们能够把系统(system)定义成一组事物的集合:一组实体、一组活动、实体和活动之间关系的描述以及系统边界的定义。系统的这个定义不仅适用于计算机系统,而且适用于其他任何事物(其中,实体以某种方式与其他实体交互)。

(3)系统举例

要了解系统定义是如何进行的,考虑一个呼吸系统的例子:身体吸进氧气排出二氧化碳和水。我们可以很容易地定义它的边界:如果指出身体的一个具体器官,就能说出它是不是呼吸系统的一部分。氧气和二氧化碳分子都是实体或对象,它们按照可以明确定义的方式进出呼吸系统。我们也可以根据实体间的交互来描述系统中的活动。如果必要的话,可以通过什么进入以及什么离开来描述这个系统,也可以用一个表格来描述其中涉及的所有实体和活动。图1.1说明了一个呼吸系统。请注意每个活动都涉及实体,并且可以通过描述哪些实体是输入,它们如何被处理,以及输出的结果来进行定义。

图1.1 呼吸系统

我们还必须清晰地描述计算机系统,与预期的用户一起定义系统的边界:我们的工作从什么地方开始以及在什么地方结束?另外,我们必须知道什么处于系统的边界上,从而可以确定输入的开始和输出的目的地。例如,在打印工资单的系统中,支付信息可能来自公司的计算机,系统输出可能是发送到邮箱的工资单的集合,送到适当的接收者手中。在图1.2所示的系统中,我们可以了解边界并且理解实体、活动和它们之间的关系。

图1.2 工资单产品的系统定义

1.1.2 相互联系的系统

边界的概念之所以重要,是因为几乎不存在与其他系统无关的系统。例如,呼吸系统必须与消化系统、循环系统、神经系统以及其他系统交互。呼吸系统没有神经系统就不能发挥作用,循环系统没有呼吸系统也不能正常工作。这种相互依赖可能是非常复杂的(实际上,由于我们不能认清生态系统的复杂性,已经引起并加剧了许多环境问题)。但是,一旦描述了系统的边界,就很容易了解什么在系统内部、什么不在以及什么超出了边界。

此外,一个系统存在于另外一个系统的内部也是可能的。描述一个计算机系统的时候,通常是集中于实际系统的一小部分。这种集中使得我们能够定义和构建一个比包裹它的系统简单得多的系统。如果仔细记录那些影响系统的系统之间的交互,即使集中于更大系统中的较小部分,也不会有任何损失。

我们来讨论一个例子,看一看是如何做到这一点的。假定要开发一个水系监控系统,该系统在整条河流经过的很多地点采集数据。在数据采集点完成若干计算,其结果被传送到中心站点进行汇总报告。这样一个系统的实现方式可能是:有一个中心站点的计算机,它与数十个在远程站点的小型计算机进行通信。其中,必须考虑很多系统活动,包括收集水质数据的方式、在远程站点进行的计算、与中心站点的信息通信、通信数据在数据库或共享数据文件中的存储以及根据数据创建报告。可以把这个系统看成是一些系统的集合,其中每个系统都有特定的目的。尤其是,我们可以只考虑较大的系统的通信方面,并且开发一个通信系统将数据从远程站点传送到中心站点。如果我们仔细地定义通信系统和大系统之间的边界,通信系统的设计和开发就可以独立于大系统来完成。

整个水系监控系统的复杂性要比通信系统大得多,因此,通过对分开的、较小的部分进行处理可以简化我们的工作。如果边界定义详细、正确,那么根据较小的部分构建较大的系统是相对容易的。通过以分层的方式来考虑较大的系统,可以按图1.3那样描述系统的构造过程(以水系监控系统为例)。一个层次本身就是一个系统,但是,每一层及其包含的那些

相关文档
最新文档