登陆注册
27082000000032

第32章 Software Engineering(2)

To transform requirements into a working system, designers must satisfy both customers and the system builders on our development team. The customers understand what the system is to do. At the same time, the system builders must understand how the system is to work. For this reason, design is really a two-part, iterative process. First, we produce conceptual design that tells the customer exactly what the system will do. Once the customer approves the conceptual design, we translate the conceptual design into a much more detailed document, the technical design, what allows system builders to understand the actual hardware and software needed to solve the customers’ problem. The process is iterative because, in actuality, the designers move back and forth among activities involving understanding the requirements, proposing possible solutions, testing aspects of a solution for feasibility, presenting possibilities to the customers, and documenting the design for the programmers. Sometimes the design is described in one document, but often there are two. The two design documents describe the same system, but in different ways because of the different audiences for the documents. Thus, the conceptual design concentrates on the system's functions, and the technical design describes the form the system will take.

Object-oriented methodology is an approach to system lifecycle development that takes a top-down view of data objects, their allowable actions, and the underlying communication requirement to define system architecture. The data and action components are encapsulated, that is, they are combined together, to form abstract data types. Encapsulation means that if I know what data I want, I also know the allowable processes against that data. Data are designed as lattice hierarchies of relationships to ensure that top-down, hierarchic, inheritance and sideways relationships are accommodated. Encapsulated objects are constrained only to communicate via messages. At a minimum, messages indicate the receiver and action requested. Messages may be more elaborate, including the sender and data to be acted upon.

Object orientation is the usual approach to developing applications in aerospace and defense organizations, and experiments with its use are occurring in most large companies. Object-oriented design appears to be the best suited method for real-time applications, and is useful for on-line applications.

【Vocabulary】

discipline

n. 纪律,学科 vt. 训练

automate

vt. 使自动化

identification

n. 辨认,证明,鉴定

sufficient

adj. 充分的,足够的

terminology

n. 术语学

prototype

n. 原型

vehicle

n. 交通工具,车辆,媒介

debug

vt. 调试,除错

validation

n. 确认

correspond

vt. 符合,协调,相应,相当

substantial

adj. 坚固的,实质的,充实的

implementation

n. 执行

deteriorate

v. 使恶化

maintenance

n. 维护,保持,抚养

iterative

adj. 重复的,反复的

capsule

n. 胶囊,太空舱

feasibility

n. 可行性,可能性

audience

n. 观众,听众,接见,拜见

architecture

n. 建筑,建筑学

elaborate

vt. 精心制作,详细阐述

aerospace

n. 航空宇宙

methodology

n. 方法学,方法论

【参考译文】

软件工程

软件工程是工具、方法和规则的应用,用于产生和维护一个现实世界问题的自动化解决方案。它要求我们识别出一个问题,一台执行某一软件产品的计算机及其软件产品存在的环境(包含人员、设备、计算机、文档等)。显然没有计算机程序就没有软件产品,更没有软件工程。但这只是一个必要而非充分条件。

一个大规模的软件工程需要跨越相当长的时间来完成。这段时期可以划分为不同的阶段,这些阶段一起构成所谓的“软件生命周期”。

虽然实际的名称可能不同,但是大多数作者都认为软件生存周期分为五个关键阶段。

第一阶段,需求定义,表示在这个阶段内系统希望的需求,也就是精确说明它的功能特性和运行细节。该阶段的输入是陈述(一般是不太确切的陈述)对该软件的要求。通常,一个“需求文档”是该阶段的输出,是经过明确说明的特征或约束条件的集合,这也是最终产品必须满足的。这虽然不是设计,但是必须在设计之前,规定系统应该做什么而不规定它如何去做。一个需求文档的存在,提供一些针对设计的(该生存周期的下一个阶段)并可以使其有效化的东西。有的时候一个快速开发的原型可能是调试需求的一个有用的工具。

对任何阶段,都不允许把错误带到后续阶段是十分重要的。例如,在需求方面,一个错误陈述的功能导致一个有错误的设计和一个并不要求做的事情的实现。如果没有查明,让错误一直发展到测试阶段,则修正这个错误(包括重新设计和重新实现)的代价就可能很大了。

第二阶段,设计,在这个阶段创造性占统治地位,虽然有人表明创造性是内在的而不能够被训练和提高,但是借助于良好的步骤和工具它肯定可以被提高。这个阶段的输入是一份(已经调试而且已经有效化的)需求文档,该阶段的输出则是以某种形式(如伪代码)表示的一个设计。一个设计的有效化是重要的。在需求文档中的每一个需求都必须有一个相应的设计片段来满足它。正式验证,虽然在有限程度上是可能的,但是一般却是极其困难的。更多的非正式验证在整个设计团队,管理人员甚至客户处循环出现。

第三阶段,实现,是对第二阶段中开发设计的实际编码。该阶段的诱惑力是强大的,所以有很多鲁莽的程序员没有经过前两个阶段的充分准备就跳到了这个实现阶段。结果是许多要求没有完全理解,因而设计也是有缺陷的。实现阶段盲目的进行,结果会出现许多问题。

第四阶段,测试,用来证明所实现的程序的正确性。某些测试不可避免地作为前两个阶段的一部分已经被执行。任何有经验的程序员,在任何正式测试阶段之前,每产生一条线路时都会从内心去检测它,也会从内心模拟任何模块的执行。测试决不是容易的。Edsger Dijkstra 写到,虽然测试能够有效的显示出错误的存在,但从不显示它们的不存在。一次“成功”的测试运行仅仅意味着在所测试的特定环境中没有错误被发现;关于其他环境它却没有说明什么。在理论上,测试是显示出一个程序是否正确的唯一途径,好像所有可能的情况都被尝试了(如众所周知的穷举测试),甚至对最简单的程序在技术上都是一种不可能的情况。例如,假设我们已经写了一个程序来计算一次考试的平均分。一次穷举测试将需要分数和班级大小的所有可能的组合;它可能要花费很多年来完成该测试。

第五阶段,程序维护阶段。不幸的是,学生程序员们很少能够涉及本阶段。但是它在现实世界中的重要性也不能被过分地强调。因为维护一个被广泛应用的程序的成本可以达到或着超过开发它的成本。与硬件维护不同,软件维护不涉及已损坏的部件的修复,而涉及设计者缺陷的修复,它可能包括附加功能的供应来满足新的要求。程序员生产各新程序的能力明显受到他们维护旧程序耗费的时间长短的影响。维护的不可避免性必须被承认,且必须采取各个步骤以减少它的时间耗费。

软件设计可以用相同方式考察。我们使用需求规范来定义该问题。那么,如果它能够满足该规范中的所有要求的话,我们就声明它是一个问题的解决方案。在许多情况下,可能的解决方案的数目是没有限制的。一个顾客可以从若干可能性中选择一种以实现一种解决方案。

为了将各个需求转变为一个工作系统,设计师们必须使顾客和我们的开发团队中的诸系统建造师两者都满意。顾客要知道该系统将要做什么,同时建造师也必须理解该系统如何工作。由于这个原因,设计实际上是一两部分的迭代过程。第一,我们生产概念设计,它确切地告诉顾客该系统将要做什么。一旦顾客批准了该设计理念,我们就要将概念设计翻译成一个更详细的文档,该技术设计允许诸系统建造师理解为解决该顾客的问题所需要的实际硬件和软件。这个过程是反复的,因为在现实中设计师往返于理解各项要求、提出可能的解决方案、测试解决方案的可行性、向顾客提供可能的各个解决方案以及为程序员们编写设计文档。有时该设计被描述于一个文档,但往往有两个文档。这两个设计文档描述同一个系统,但是以不同的方式描述,因为诸文档针对不同的读者。这样,概念设计集中于系统的诸功能,而技术设计则描述该系统将采用的形式。

面向对象的方法学是针对系统生命周期开发的一种方法,该方法对诸数据对象允许的动作和基本的通信需求采取一个由顶向下的视图来定义一个系统的体系结构。这些数据及动作部件被封装,也就是它们被组合在一起以形成抽象的数据模型。封装意味着如果我们知道需要什么数据,那么我们就还知道针对该数据的各个许可的进程。各个数据被设计成格状层次关系,以确保自顶向下关系、层次关系、继承性关系、横向关系等被接受。封装的各个对象被约束只是为了通过报文进行通信。最低限度下各个报文指明接收者和所请求的行动。各个报文可以更加复杂,包括发送者和作用于它上面的数据。

面向对象是在宇航和国防机构中开发各种应用程序的常用方法,对它使用的各个试验也正在大多数的大公司中发生。面向对象程序设计对于实时应用是一种最合适的方法,对在线应用也是很有用的。

【Reading Material】

Software Life Cycle

同类推荐
  • Sense and sensibility(理智与情感)(英文版)

    Sense and sensibility(理智与情感)(英文版)

    小说的情节围绕着两位女主人公的择偶活动展开,着力揭示出当时英国社会潮流中,以婚配作为女子寻求经济保障、提高社会地位的恶习,重门第而不顾女子感情和做人权利的丑陋时尚。小说中的女主角均追求与男子思想感情的平等交流与沟通,要求社会地位上的平等权利,坚持独立观察、分析和选择男子的自由。在当时的英国,这几乎无异于反抗的呐喊。
  • 超级英语情景100话题

    超级英语情景100话题

    《超级英语情景100话题》就像是一张通向“英语口语王国”的入场券,它就是为了大家英语口语话题积累而精心编辑的。本书收录的情景对话紧紧围绕人们谈论频 率较高的话题,让您在遇到外国人时能打破僵局,快速找到投缘的话题,愉快地用英语进行交流。
  • 有一种智慧叫包容

    有一种智慧叫包容

    非凡的人生不是无根之木,更不是无源之水。它需要你永不满足,永不懈怠,永不疲倦,永不怯懦,执着地向人生的更高处攀登。你若是一道清渠,生活便是泉眼,把智慧的活水注入了你的血脉;你若是一棵绿树,生活便是土壤,把智慧的矿藏送进你的根系;你若是一弯虹桥,生活便是阳光,把智慧的颜料涂上你的躯体。
  • The Querist

    The Querist

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 享受一分钟的感动

    享受一分钟的感动

    本书截取了生活的精彩文章,其中亲情、友情、爱情故事以及励志等文章,能够使你享受生活快乐,体验人生意义的同时,让你树立信心,帮你克服人生路上的各种绊脚石。
热门推荐
  • 悟真篇注释

    悟真篇注释

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 嘿唐墨曦

    嘿唐墨曦

    世界好小,兜兜转转就回到原点。林小止离开有唐墨曦的世界,找一个没有他的地方从新开始。可是谁知道呢,世界那么小,一个不小心就遇到了。
  • 蓝梦心决:圣子之恋

    蓝梦心决:圣子之恋

    玄幻,言情,穿越,都市,校园,还是古言?一切都有,单纯,懵懂,狡诈,腹黑,浪漫,包罗万象,本书将带你走进一个不一样的世界,体验各种酸甜苦辣咸,,,,(好吧,说穿了,就是一大荟萃,怎样写后续,完全看心情。)
  • 病娇狐君傲娇妃

    病娇狐君傲娇妃

    听说西山境内那个命不久已的狐君最近回来了,还从外面带了个丑不拉叽的人族少女回来!听说那人族少女还是某个国家被皇帝休掉的女人!而此刻他们口中的“人族少女”正好似以瑕的摸着一条雪白的狐尾,嘴角挂着坏坏的笑“我听说狐有九条命,我要是拿这做个围脖,想必也是极好的”只见狐尾一个哆嗦,床榻上传来男人磁性的嗓音“交代下去,是君后把本君带了回来,也是本君腆着脸求君后回西境的!”
  • 末世将领

    末世将领

    末世之前的一个小人物刘潇,在突如其来的末日危机之下,带领一部分人类艰难抵抗,最终成为一代可歌可泣的将领。
  • 霸道少女之心底的软弱

    霸道少女之心底的软弱

    别人眼中的霸道少女,却为何在自己一个人的时候哭泣,到底是谁戳中了她心底最柔软的地方?暗恋霸道少女的乖乖男会不会抓住这次机会,走进霸道少女的心中?一别十二年,性格大变的两个人又会擦出怎样的火花?
  • 甜爱百分百,竹马哪里跑

    甜爱百分百,竹马哪里跑

    “郎骑竹马来,绕床弄青梅。”“苏畅,你爱过我吗?”“没有”对不起顾念,我对你的深爱是无法言说的秘密“苏畅我告诉你一个秘密,你想不想听?”摇着某人的胳膊撒娇。龟毛的某人低头看了眼顾念眉毛上挑傲娇的说“说吧。”“倾城时光,我爱的不过一个你。”是惊喜是激动,语言终不如行动来的实际紧紧的拥住你是我这辈子最幸福的事,顾念你是我这辈子最念念不忘的事。
  • 五界天尊

    五界天尊

    这里有毁天灭地的远古异兽,这里有焚山沸海的奇异火焰;有强到令人窒息的恐怖存在,也有各个家族的厮杀纷争。这是一个元力弥漫的世界,少年,武技,神秘小塔!妖兽,精血,远古一族!一切的一切都将在这里展现.....
  • 北洋风云人物系列之曹锟

    北洋风云人物系列之曹锟

    本书以纪实的手法描写了北洋直系军阀领袖曹锟复杂的人生经历,文笔生动,人物众多,刻画细腻,可读性强,再现了晚清至民国初年军阀斗争、风云变幻的真实情景。
  • 是真的超级喜欢你

    是真的超级喜欢你

    皎若就算死后也不得安生。一个自称系统的东西找上了她,撒泼打滚耍无赖强行把皎若绑到另一个世界去完成劳什子任务。行叭,就当给自己找乐子了。不就去攻略个人嘛,有什么难度。然后皎若见到反派大大的第一句话就是:你好,我喜欢你。系统:……任务不是这么做的宿主主!这他除非石乐志,怎么可能会同意你的啊!然后系统就看见某个石乐志的人笑得流里流气:好啊。