《软件工程(第4版?修订版)》—第1章1.5节 系统的方法

本节书摘来自异步社区《软件工程(第4版?修订版)》一书中的第1章1.5节 系统的方法,作者【美】Shari Lawrence Pfleeger , 【加】Joanne M.Atlee,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.5 系统的方法
软件工程(第4版•修订版)
我们开发的项目并不存在于真空中。通常,我们装配在一起的硬件和软件,必须与用户、其他软件任务、其他部分的硬件、现有数据库(即仔细定义的数据集合和数据关系)甚至其他的计算机系统进行交互。因此,为任何项目提供一个背景是非常重要的,该背景就是项目的边界(boundary):项目中包含什么,不包含什么。例如,假设主管让你编写一段程序为办公室的人员打印工资单。你必须知道你的程序是否只是简单地从另一个系统中读入工作时间并且打印结果,还是必须同时计算工资信息。类似地,你必须知道程序是否需要计算税率、养老金以及津贴,或者是否要随每份工资单提供这些项目的报告单。实际上,你真正要问的问题是:项目从哪里开始,到哪里结束?同样的问题可以应用于任何系统。一个系统是对象和活动的集合,再加上对象和活动之间关系的描述。就每个活动而言,典型的系统定义包括需要的输入列表、采取的动作以及产生的输出。因此,要开始一个项目,必须知道系统包含哪些对象或活动。

1.5.1 系统的要素
我们通过命名系统的组成部分并标识这些组成部分是如何与另一个系统相互联系的,来描述这个系统。这种标识是分析摆在我们面前的问题的第一步。

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

活动中涉及的要素称为对象(object)或实体(entity)。通常,这些对象以某种方式相互联系。例如,对象能够排列在表格或矩阵中。对象常常组成记录,其中,每一条记录按规定的格式排列。例如,一个雇员的历史记录中可能包含如下对象(也称字段):

名      邮政编码

教名     每小时的工资

姓      每小时的津贴

街道地址   累计休假

城市     累计病假

记录中不仅定义了每个字段,而且定义了每个字段的大小以及字段之间的关系。因此,记录描述规定了每一个字段的数据类型、记录中的开始位置和字段的长度。依次地,因为每个雇员都有一条记录,所有的记录组合在一起就构成了文件,并且要指明文件特性(如最大的记录数等)。

有时,对象定义得稍有不同。不是将每一项考虑为一个大记录中的字段,而是将对象看作是独立存在的。对象的描述包括每个对象的特性列表,以及所有使用对象或影响对象的动作的列表。例如,考虑“多边形”对象。一个对象描述可以是,这个对象具有诸如边数以及每条边的长度等特性。动作可能包括计算面积和周长。甚至可能还可以有一个属性称为“多边形类型”。这样,可以标识每个“多边形”的实例,例如是“菱形”还是“长方形”等。类型本身也可能有对象描述。例如“长方形”可以由“正方形”和“非正方形”组成。当我们在第4章研究需求分析的时候,将会探讨这些概念,并在第6章讨论面向对象开发的时候进行深入探讨。

2.关系和系统边界
一旦定义了实体和活动,就要把实体和它们的活动进行匹配。实体和活动之间的关系应该要清晰、仔细地予以定义。实体的定义包括实体起源于何处的描述。有些项驻留于已经存在的文件中,有些项在活动的过程中被创建。实体的目的地也是非常重要的。有些项仅仅被一个活动所使用,而有些项会被指定为其他系统的输入。也就是说,系统的某些项会被当前系统范围之外的活动所使用。因此,可以认为我们正在考虑的系统是有边界的。有些项跨越边界进入我们的系统,而另一些是我们系统的产品并为其他系统所使用。

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

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

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

图1-9 工资单产品的系统定义

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

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

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

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

一个系统可能包含另外一个系统,这一点很重要,因为它反映了这样一个事实:一个系统中的对象或活动是外层所代表的每一个系统的一部分。因为每一层都会引入更多的复杂性,所以随着每一层系统的加入,要理解任何一个对象或活动就会更加困难。因此,首先集中于最小的系统是最简单的方法,这样便于更好地理解随后的系统。

我们使用这种思想来构建一个替换旧版本的新系统(无论是手工方式还是自动方式)。我们希望尽可能多地理解新、旧系统是如何运行的。通常情况下,两个系统之间的差别越大,设计和开发就越困难。之所以出现这样的困难,不仅是因为人们倾向于拒绝改变,而且这种差别使得系统难以学习。在构造或合成大系统的时候,把新系统的构造作为一系列递增的中间系统是极其有用的。不是从A系统直接构建B系统,而是从A到A,再到A,然后到B。例如,假定A是一个包含3个主要功能的手工系统,B是A的自动化版本。我们可以将A系统定义为一个新的系统,它只有功能1是自动化的,而功能2和功能3仍是手工的。然后,A有自动化的功能1和功能2,但其功能3仍是手工的。最后,B具有3个自动化的功能。通过将A到B的“距离”分成三段,我们就得到了一系列小的问题,这比整个问题要更容易处理。

在我们的例子中,两个系统非常相似。它们的功能是相同的,但是实现的方式不同。但是,目标系统常常与现有系统存在着巨大差别。尤其是,通常希望目标系统不受现有硬件和软件所强加的约束的限制。增量开发(incremental development)方法可以包含一系列阶段,其中每一个阶段都使前面的系统不受当前系统约束的限制。例如,阶段1可能增加一个新硬件,阶段2可能替换执行一组特定功能的软件。系统逐渐地从旧的软件和硬件中脱离开,直到它体现出新系统的设计。

因此,系统开发可以首先在实际系统中实现一组变化,然后增加一系列变化以生成完整的设计方案,而不是从当前一步一下跳到将来。使用这种方法,我们必须同时从两个不同的方面看待系统:静态地和动态地。静态视图告诉我们系统如今如何运行,而动态视图展示系统如何演变成最终的系统。缺少任何一方面都是不完整的。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2-2 用Python爬取银河演员网上的演员参演电影的信息进行抓取

脚本中用到的actors_use.csv为之前从豆瓣上抓取的演员列表。 1 galaxyactors.py2 # -*- coding: utf-8 -*-3 #该脚本可以按照文件actors_use.csv中给出的演员的姓名4 #对银河演员网http://www.8fkd.com/上的演员参演电影的信息进行抓取5 #信息包括演员参演电影和电影日期&#…

在c语言中,以r方式不能打开并不存在的文件,C语言文件选择题

C语言文件选择题(答案在最后)1、标准库函数fgets(s,n,f)的功能是A) 从文件f中读取长度为n的字符串存入指针s所指的内存B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存C) 从文件f中读取n个字符串存入指针s所指的内存D) 从文件f中读取长度为n-1的字符串存入指针s所指…

动脑2017android_您肯定要在2017年初尝试的25个新Android库

动脑2017androidby Michal Bialas由Michal Bialas 您肯定要在2017年初试用的25个Android库 (25 Android libraries you definitely want to try out in early 2017) This is a list of 25 best Android libraries released in January and February 2017. All of these are wo…

linux中安装多个mysql_liunx系统下安装多个MySql数据库并做主从配置

在网上搜索了很多资料,都没有看到像样的文档,思路不是很清晰,对第一次安装的朋友来说较为困难,经过长时间的安装尝试和查询网上零碎的知识点,终于成功的完成Linux系统下多MySql数据库安装和主从配置,现在分…

034_nginx报错总结

一、nginx: [emerg] "client_header_timeout" directive is not allowed here in /opt/nginx/conf/vhost.d/newton-api.uuwatch.com.conf:24 location / { client_body_timeout 5s;client_header_timeout 3s; #配置参数报错proxy_set_header X-Forwarded-For …

江苏省高等学校计算机一级成绩查询,江苏计算机一级考试成绩查询

想要了解江苏2020年9月计算机一级考试成绩查询入口的小伙伴快来看看吧!下面由出国留学网小编为你精心准备了“江苏2020年9月计算机一级考试成绩查询入口公布”,持续关注本站将可以持续获取更多的考试资讯!江苏2020年9月计算机一级考试成绩查询…

Linux中mongodb安装和导出为json

采用官方工具导出mongo数据为json格式 文档:https://docs.mongodb.com/manual/reference/program/mongoexport/ 可以远程导出,只要有host:port即可。 首先需要安装tools: 在redhat中: 文档:https://docs.mongodb.com/manual/tutor…

《树莓派实战秘籍》——1.17 技巧17添加重启按钮

本节书摘来异步社区《树莓派实战秘籍》一书中的第1章,第1.17节,作者:【美】Ruth Suehle ,Tom Callaway,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.17 技巧17添加重启按钮 树莓派实战秘籍也许你已经注意到Pi缺少了某…

dns是指网络域名系统_域名系统(DNS)是Internet的骨干。 这就是全部的运作方式。...

dns是指网络域名系统by Nikolas ODonnell由Nikolas ODonnell 域名系统(DNS)的工作方式以及如何使其变得更好。 (How the Domain Name System (DNS) works and how you can make it better.) The Domain Name System (DNS) is often referred to as the backbone of the intern…

07.敏捷项目管理——推测阶段笔记

00.推测阶段关注产品很项目——创造和理解产品结构、性能和故事功能清单以及发布计划。 01.发布计划会用到与产品规格、平台结构体系、资源、风险分析、业务约束以及目标进度等信息。 02.迭代计划和开发方法有两个至关重要的组成部分——短期迭代时间框和功能。 03.产品经理控制…

mysql临时关闭索引功能_MySQL优化之索引优化

$1.WHY : 找到MySQL Query执行慢的原因1.1 EXPLAIN通过Explain查看SQL Query语句的执行情况&#xff0c;从中找出导致MySQL查询性能差的原因EXPLAIN QUERY语句【字段解释】<1> id -- 表的读取顺序id相同时&#xff0c;按照从上至下的顺序执行id不同时&#xff0c;id值越…

Maven实战. 1.3Maven与极限编程

1.3Maven与极限编程 极限编程&#xff08;XP&#xff09;是近些年在软件行业红得发紫的敏捷开发方法&#xff0c;它强调拥抱变化。该软件开发方法的创始人Kent Beck提出了XP所追求的价值、实施原则和推荐实践。下面看一下Maven是如何适应XP的。 首先看一下Maven如何帮助XP团队实…

python 下字符串格式时间比较

python 下有多个有关时间的模块&#xff0c;分别是time、datetime、calendar&#xff0c;今天重点讨论下time写法。 其中time模块&#xff0c;主要有以下方法&#xff1a; ltimetime.time() 获取当前系统时间&#xff0c;返回float型数值时间戳&#xff08;当前时间相对于1970.…

要记住的Facepalm:我在未先测试SDK的情况下对其进行了改进。

by Rahul Chowdhury通过拉胡尔乔杜里 要记住的Facepalm&#xff1a;我在未先测试SDK的情况下对其进行了改进。 (A Facepalm to Remember: I bumped up the version of an SDK without testing it first.) It all started when Google made its App Shortcuts API available fo…

《计算机应用基础》第三套作业,《计算机应用基础》第三套试卷和答案.doc

《计算机应用基础》第三套试卷和答案洼拟酚痕扁亭疵熏瘤顶筹鲜愧禾候拂咨焕挖害骋邑授琳短雨况絮姚话混颈撵陛蚕撅瑟终妆响氢浑啄浓善箩将霞多仇齐眠长逗指脏和亲闹藩蝴班搬囊嫁澜代闺杠贴汉磁渺礼懦县谬勤享善跑纸亿凭闺倔曳妖掩返狠撰翼蝎聚捌谆累碱膨躬孺痒凸蒂伟热吊深沥刑…

K8S Calico

NetworkPolicy是kubernetes对pod的隔离手段&#xff0c;是宿主机上的一系列iptables规则。 Egress 表示出站流量&#xff0c;就是pod作为客户端访问外部服务&#xff0c;pod地址作为源地址。策略可以定义目标地址或者目的端口 Ingress 表示入站流量&#xff0c;pod地址和服务作…

前端页面内含外显相关知识

页面显示&#xff1a; 对于页面上筛选条件有下拉框加载的&#xff0c;直接下对应显示时加载 {text : 产品线,dataIndex : entorgid,align : center,width : 150,renderer:function(value,metaData,record ,rowIndex,colIndex,store,view){if(value ! ""){$("#en…

捷克 签证_一位捷克开发人员构建了可在您的浏览器中直接运行的语音合成器

捷克 签证Here are three links worth your time:这是三个值得您花费时间的链接&#xff1a; A Czech developer built this mouth synthesizer that runs right in your browser. Be sure to turn your sound on. (1 minute watch interactive app) 一位捷克开发人员构建了可…

mvc 之 配置EF+oralce

只需要在项目中加载nuGet包就可以了 操作&#xff1a;工具--nuGet包管理器--程序包管理器控制台 在 PM>处输入 install-package entityframework 加载sqlserver的数据库连接 install-package oracle.manageddataaccess.entityframework 加载oracle的数据库连接 参考地址&…

计算机组装与维修bios设置,(完整版)计算机组装与维修模拟试题(BIOS设置的习题).docx...

第十二章BIOS 设置的习题一、问答题、目前 BIOS 的类型主要有哪几种&#xff1f;、设置 Quick_Power_Self_Test( 快速开机自检 ) 为什么状态时&#xff0c;可以加速计算机的启动&#xff1f;、何谓 _BIOS&#xff1f;、简述 BIOS 的基本功能。、 BIOS与 CMOS有何区别&#xff1…