首页>参考读物>计算机科学与技术>软件工程及软件方法学

基于模型的软件开发
作者 : (美)H. S. 莱曼(H.S. Lahman) 著
译者 : 廖彬山 王慧 马宏苏 译
出版日期 : 2015-08-13
ISBN : 978-7-111-50737-6
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 377
开本 : 16
原书名 : Model-Based Development: Applications
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

H.S. Lahman 1957年在插件板上写了他的第一个软件程序。在接下来的十年,他作为勘探地球物理学家在很多重要的沼泽、沙漠和苔原的丛林中使用尖端技术,这些磨练了他的意志。然后,他回到学校学习经济学、运筹学和计算学。在接下来的30年中,他为MIS系统、科学和R-T/ E环境开发软件。1982年,他成为一名面向对象开发的倡导者。20世纪90年代,他成为一名软件质量和开发过程改进的倡导者。
当今世界,软件变得越来越复杂,软件的用户对软件性能、可靠性、功能性以及交付市场的速度等方面的期望也在呈指数增长。本书通过将经过证实有用的面向对象技术与一种强大的新方法学相结合,为我们展示了应对这些挑战的方法。
本书详细介绍了基于模型的软件开发的核心原则,展示如何分离每一个项目的关注点,使得参与者能够为每个域特有的需要和特征进行优化,通过实例展示如何实施更有效的面向对象的分析、强调抽象、严格的分区、不变量建模、有限状态机和程序单元之间的高效通信。通过阅读本书,你将学到:
回顾面向对象方法诞生的历史背景及面向对象开发的基础。
讲解用于反映设计中用户和计算机环境之间重要区别的问题域和计算域。
为什么应用分区很重要以及如何很好地进行应用分区。
构建描述基本应用结构的静态模型。
为类、类的职责、关联、引用完整性和知识完整性建模。
创建动态模型,用于通过有限状态机描述行为。
成功地使用抽象动作语言(Abstract Action Language,AAL)和动作数据流图(Action Data Flow Diagram,ADFD)。
在整本书中,Lahman都为理论问题进行了例证,解释为什么事情应该这样完成,但对读者没有很高的数学要求。他关注于创建实现无关的模型,该模型可以完全地、精确地、无二义性地解决功能性需求。无论你是开发人员、团队的领导、架构师或者设计师,书中介绍的技术都将帮助你构建更加健壮、易于维护、支持大规模重用的软件。
廖彬山 先后就读于南京大学数学系和北京航空航天大学计算机科学与技术系。现在是美国CMU/SEI认证CMMI主任评估师(CMU/SEI-certified SCAMPI Lead Appraiser),北京国信普道科技有限公司CMMI首席顾问,北京航空航天大学软件学院客座教授。目前主要从事CMMI的培训、咨询和评估工作及软件工程理论与方法的研究工作。迄今为止,已经成功地为几十家不同类型、不同规模、不同应用领域的企业进行了基于CMM和CMMI的咨询与评估工作,积累了丰富的实践经验,有效地解决了企业实际存在的问题。已经成功地为国内近百家企业提供了软件估算、软件度量与量化管理、功能点、统计过程控制、高成熟度组织的过程改进、个体软件过程(PSP)、团队软件过程(TSP)、需求工程、缺陷管理、软件测试、同行评审、持续风险管理、统一软件开发过程等专题培训,有效地提高了国内企业的项目管理和工程开发能力。

王慧 毕业于北京航空航天大学计算机学院,工学博士,研究方向为软件工程和过程工程。她曾从事大型软件过程建模与模拟系统的需求开发、软件设计与实现、系统测试等工作。目前是一名咨询师,成功地为多家不同类型、不同规模、不同应用领域的企事业单位进行了敏捷开发方法、软件项目管理、CMMI、TSP和PSP等咨询工作,有效地解决了企业实际存在的问题。

马苏宏 毕业于北京航空航天大学计算机学院,工学硕士,研究方向为过程工程的建模、模拟与正向工程。曾就职于IBM公司,担任软件工程师,有丰富的软件设计与开发经验。目前是一名业余的翻译爱好者。

图书前言

软件开发是一项极其复杂的智力活动,它是一门朝气蓬勃并且仍在迅速发展的学科。软件开发还不够完善,因此迄今人们仍然在试图找出开发软件的好方法。
尽管如此,多年来软件开发方法仍然获得了大幅提升。许多设计方法学不断发展以促进软件设计的各个方面。其中之一是结构化设计方法,该方法提供了一种非常直观的方式,用以很好地匹配图灵和冯·诺依曼的硬件计算模型。
问题
尽管结构化设计明显优于它之前的特定方法,但它存在着一个致命的弱点:当用户需求随着时间的推移改变时,软件往往很难随之修改,大型的应用尤其如此。与此同时,应用的规模和复杂性迅速膨胀。另外,新的语言、技术、操作系统、数据存储范式、用户界面范式、硬件等以惊人的速度出现在计算领域中。然而,商业条件一直在要求软件产品更快、成本更低地投入市场。
希望
因此,一些新的设计方法出现了,这些方法从实践中吸取了来之不易的经验和教训。同时,计算领域提出了一些革命性的新观点。其中之一就是面向对象的范式,其主要目标为:在软件产品的生命周期中,随着需求出现不可避免的变更,保证大型应用的可维护性。
本书介绍一种特定软件设计方法的实践,该方法称为基于模型的开发方法,其主要基础是Shlaer-Mellor方法。通常情况下应用OO范式,特定情况下应用MBD方法能够使大型应用获得更强的健壮性和可维护性。
本书主要内容
尽管本书使用UML(Unified Modeling Language,统一建模语言)作为表示法,但其应用是很浅显的。有很多非常优秀的书籍描述了如何使用UML进行软件设计,因此本书没有过多地描述UML的语法。同样,本书遵循了MBD的设计方法,但是该设计方法主要为下列真正目的提供背景支持:
本书的主要目标在于描述,为什么在一般情况下使用OO方法和在特殊情况下使用MBD方法是在宣传一种做事情的特殊方法。
不存在一种唯一正确的方法可以设计和开发所有软件。设计更多地依赖于特定的开发环境,包括从业务目标到工具再到团队文化等所有内容。最终,企业将决定在它的环境中哪一组工具是最高效的。为了做到这一点,决策者应当了解为什么MBD的方法工具集得以应用在许多常见的环境中。更重要的是,相关人员需要充分理解基本原理,从而能够根据特定的环境加以调整进而应用。
实现面向对象的设计需要一种独特的思维,该思维在硬件计算模型中很不直观。本书真正关心的是设计软件时如何思考,特定的表示法和方法学不是本书的侧重点。因此,本书以大量的篇幅探索好的软件设计的思考过程,甚至故意提供了一些不好的初步设计,用以证明该方法的自我纠正能力。
为了获得这样的理解,有必要描述软件开发的传统方法(面向对象方法之前)在某些方面如何失败,以及面向对象范式如何改正这些缺点。尽管结构化方法为1970年之前软件开发的混乱带来了切实的秩序,但它不是万能的。到20世纪80年代,软件明确显示,严重的可维护性问题仍然存在,这些问题正是面向对象范式要解决的。
同样,如果不讨论一种方法学的某些基础理论,那么就没有办法描述该方法学是否能够很好地工作。然而,这是一本软件开发人员写给软件开发人员的书,因此本书有意识地使用了不具有数学严谨性的实践术语来描述理论问题。
因为本书的主要内容是抽象OOA(Object Oriented Analysis,面向对象分析)模型的建立,因此书中没有很多OOPL(Object Oriented Programming Language,面向对象编程语言)代码。从方法学的名称顾名思义,其重点在于抽象建模而不是编写传统的源语言代码。实际上,当一个具有“转化质量”的OOA模型开发完成后,模型就是代码。换句话说,OOA建模使用的表示法是一种扩展的UML符号,其中增加了符合MDA的抽象动作语言(Abstract Action Language,AAL)的内容。表示法是4GL(Fourth Generation Language,第四代语言)而不是3GL(Third Generation Language,第三代语言),但是模型像任何一个3GL程序一样可执行。模型是独立实现的,它是一个针对功能需求解决方案的完整、准确而清晰的规格说明。
我们需要指出的最后一点是,作者的实践开发经验是以几十年而不是几年来衡量的。尽管本书的重点在于解释为什么这样做事情,但它绝对不是一本理论书。本书的基础是在现实世界中行之有效的方法。
路线图
本书的主题限定于OOA层的应用开发,主要分为三部分。第一部分回顾了历史并介绍了基本的面向对象的原则。引言部分包括对结构化开发问题的讨论,这些问题正是OO范式想要解决的。第二部分关乎为问题的解决方案构造一个静态的结构。这一部分描述了OO范式与其他方法的最大不同,主要表现了OO范式在问题域抽象方面的独特视角。第三部分描述了解决方案的动态方面,尤其是积极地使用有限状态机进行行为描述。
读者对象
本书的主要受众人群为具有较少OO经验的人。本书假定读者具有一些粗略的UML知识。本书还假定读者具有一些软件开发经验,接触过类似C语言的课程项目等。这里假设的经验层次包括:基本具备有关计算机和编程的一些知识,基本熟悉一些常见的缩略语,例如KISS等。
第二类读者是从传统的程序开发环境向OO范式转变的大量人群。他们中的许多开发者直接跃进到使用面向对象的编程语言写程序,因为他们已经具有了丰富的编程经验(即,相信如果一个人已经了解了一种编程语言,就能了解全部的编程语言)。可悲的是,这样的开发者往往会开发出大量不好的OO代码,因为没有人告诉他们为什么面向对象的分析和设计与结构化的分析和设计之间存在着巨大的差异。如果你是其中之一,那么你需要忘掉之前所学过的所有关于设计软件的内容,从零开始。
转化的作用
MBD的一个主要特点是,它是基于转化(translation)的一系列方法之一。也就是说,MBD是一种这样的方法,在该方法中,一个解决方案使用某种表示法(例如UML)抽象为模型,然后使用一个完整的代码发生器将模型自动转化为一种实现。转化具有一些明显的优势,因为它代表了计算领域的一种自动化的逻辑扩展,能够提高生产力、实现规模经济并增加可靠性。缺点在于这并不容易做到。模型编译器面临的优化问题比3GL编译器面临的优化问题更加复杂。无论如何,当前已经存在一些商业代码生成器能够为基于转化的方法提供100%的代码生成。
尽管大部分转化方法出现于对象管理组织(Object Management Group,OMG)成立之前,由OMG所规范的模型驱动架构(Model-Driven Architecture,MDA)还是极大地推动了这些方法。MDA为即插即用工具提供急需的标准,为生成完整的代码提供概念框架。从一个抽象的、独立于实现的模型获得第三代语言代码或者程序集是一项重要的工作,特别是对当前复杂的IDE(Integrated Development Environment,集成开发环境)来说。这项工作大大受益于MDA的概念及其形式化。
然而,MBD并不依赖于转化。MBD中产生的模型与传统开发中OOA产生的模型本质是相同的,可以通过手工的方式生产OOD模型和3GL代码。MBD模型的构建只是比典型的OOA模型更加严格,因为代码生成器是没有想象力的,它们处理命令中的内容,而不是暗示的内容。开发者必须手工实现转化。
致谢
非常感谢Steve Mellor和Sally Shlaer的工作,他们的方法是MBD的基础。他们是软件开发转化方法的开创者,并为OOA模型提供了急需的设计严谨性。除此之外,Steve Mellor是我见过的最好的OO建模者,他提供的例子让人受益匪浅。
同样感谢Rebecca Wirfs-Brock对手稿一丝不苟和悉心的审校。
Pathfinder Solutions为本书的方法提供了优秀的试验场,Greg Eakman、Carolyn Duby和Peter Fontana提供了特别的支持。
还要感谢Addison-Wesley出版社的Chris Guzikowski和Raina Chrobak的耐心与信心。谢谢Elizabeth Ryan、Diane Freed和Chris Zahn的编辑工作。
尽管这本书于我退休之后开始撰写,我还是要感谢Teradyne/ATB公司,他们提供了世界一流的软件开发工厂,其中充满了明星开发人员,他们为本书中的许多想法提供了原型。
最后,我要感谢30多年以来因特网上的大量用户为本书中概念的解释提供的共鸣版。读者读到的清晰描述大部分精炼自公共论坛上的描述。

上架指导

计算机\软件工程

封底文字

当今世界,软件变得越来越复杂,软件的用户对软件性能、可靠性、功能性以及交付市场的速度等方面的期望也在呈指数增长。本书通过将经过证实有用的面向对象技术与一种强大的新方法学相结合,为我们展示了应对这些挑战的方法。
本书将详细介绍基于模型的软件开发的核心原则,展示如何分离每一个项目的关注点,使得参与者能够为每个域特有的需要和特征进行优化,通过实例展示如何实施更有效的面向对象的分析、强调抽象、严格的分区、不变量建模、有限状态机和程序单元之间的高效通信。具体内容包括:
 回顾面向对象方法诞生的历史背景及面向对象开发的基础。
 讲解用于反映设计中用户和计算机环境之间重要区别的问题域和计算域。
 为什么应用分区很重要以及如何很好地进行应用分区。
 构建描述基本应用结构的静态模型。
 为类、类的职责、关联、引用完整性和知识完整性建模。
 创建动态模型,用于通过有限状态机描述行为。
 成功地使用抽象动作语言(Abstract Action Language,AAL)和动作数据流图(Action Data Flow Diagram,ADFD)。
在整本书中,Lahman都为理论问题进行了例证,解释为什么事情应该这样完成,但对读者没有很高的数学要求。他关注于创建实现无关的模型,该模型可以完全地、精确地、无二义性地解决功能性需求。无论你是开发人员、团队的领导、架构师或者设计师,书中介绍的技术都将帮助你构建更加健壮、易于维护、支持大规模重用的软件。

作者简介

(美)H. S. 莱曼(H.S. Lahman) 著:暂无简介

译者简介

廖彬山 王慧 马宏苏 译:暂无简介

译者序

这是一本关于一种特定的软件设计方法实践的书。MBD(Model-Based Software Development,基于模型的软件开发)方法基本上是一种OO(Object-Oriented,面向对象)方法。其基本观点是:通过静态结构和动态结构的开发,生成面向对象的分析模型,然后通过工具的转换,进而转换为应用程序框架。
本书第一部分着眼于面向对象方法诞生的历史背景,使我们能够了解传统方法存在的问题,也就是面向对象方法寻求解决的问题。因为MBD方法基本上是一种面向对象的方法,所以为了充分了解这种方法,第一部分大致介绍了面向对象开发的基础。由于面向对象的方法不如传统软件开发方法那样直观,因此需要理解面向对象的方法为什么通过这样的方式在实践中应用。
第二部分讨论面向对象开发的基本原则如何应用于MBD方法中。从应用的基本结构(即应用的骨架)开始,依次讨论应用的其他内容。在应用程序的整个生命周期中,该结构倾向于相对稳定,称作静态模型。面向对象范式的一个显著特征是对问题域的抽象,在静态模型中,与之相关的大部分内容都将实现。在静态模型中会识别面向对象应用的基本元素——对象,及其属性和相互之间的关系。通过在客户的问题域中抽象出这些内容,能够保证软件拥有稳定的结构。
第三部分讨论如何以一种系统的、一致的方法来描述动态计算需要的内容。这种系统的方法具有一个概念性的框架,称为动态模型。动态模型的基础元素(对象状态机)与静态模型中对象的行为扮演着本质上相同的角色。
本书的主要读者对象为具有较少OO经验的人。本书假定读者具有一些粗略的UML(Unified Modeling Language,统一建模语言)知识。本书还假定读者具有一些软件开发经验。除此之外,本书第二类读者是从传统的程序开发环境向OO范式转变的开发人员。
希望大家在阅读本书时有一个愉快的经历。
本书的翻译工作主要由王慧和马苏宏完成,审校工作由廖彬山完成。
由于译者水平有限,书中错漏在所难免,恳请广大读者指正。

图书目录

译者序
前言
引言
第一部分 面向对象开发的根本
第1章 历史的视角 2
1.1 历史 2
1.2 结构化开发 3
1.3 宝贵教训 8
1.3.1 全局数据 9
1.3.2 巨程序单元 9
1.3.3 软件结构 10
1.3.4 缺乏内聚性 10
1.3.5 耦合 10
1.4 技术革新 12
1.4.1 图灵机 13
1.4.2 语言和方法学 13
1.4.3 集合和图 16
1.4.4 范式 16
1.4.5 数据流 18
1.4.6 状态机 20
第2章 对象技术 22
2.1 基本理念 22
2.1.1 可维护性 22
2.1.2 问题域抽象 23
2.1.3 OOA、OOD和OOP 24
2.1.4 主题 25
2.1.5 关注点分离 26
2.1.6 抽象层次 26
2.1.7 问题域抽象 28
2.1.8 封装 29
2.1.9 内聚性 29
2.1.10 逻辑不可分性 30
2.1.11 通信模型 31
2.2 广度优先处理(又称对等协作) 32
2.2.1 细化与转化 33
2.2.2 消息范式 35
2.2.3 对象特征 36
第3章 泛化、继承、泛型和多态 39
3.1 泛化 39
3.2 继承 42
3.3 多态 42
3.4 泛型 45
第4章 MBD路线图 46
4.1 问题域和计算域 46
4.1.1 问题域 48
4.1.2 计算域 49
4.1.3 转换 50
4.2 可维护性 50
4.2.1 领域分析 50
4.2.2 不变量建模 51
4.2.3 应用分区 52
4.2.4 静态视图 52
4.2.5 动态视图 52
第5章 不变量建模 55
5.1 什么是不变量建模 55
5.1.1 不变量 56
5.1.2 数据 57
5.2 好处 58
5.3 例子 60
5.3.1 银行ATM软件 60
5.3.2 硬件接口 64
5.3.3 折旧 67
5.3.4 远程POS输入示例 72
第6章 应用分区 76
6.1 为什么我们要关注 76
6.2 应用分区的基本概念 77
6.2.1 主题 79
6.2.2 客户端/服务关系 82
6.2.3 抽象层次 84
6.2.4 接口 85
6.3 识别子系统 86
6.3.1 将相同的实体抽象为其他子系统时,当前子系统是否存在不同的视角 86
6.3.2 是否存在客户端/服务的关系 86
6.3.3 服务是否比客户端更加详细 87
6.3.4 是否与其他子系统知识共享 87
6.3.5 是否与其他子系统行为共享 87
6.3.6 主题是否内聚 87
6.3.7 边界定义是否清晰 88
6.3.8 能否重用 88
6.3.9 是否被分布式网络环境绑定 88
6.3.10 是否针对不同的问题域 88
6.4 桥 89
6.4.1 消息范式,又是消息范式 89
6.4.2 桥模型 91
6.5 描述子系统 92
6.5.1 子系统描述 93
6.5.2 关系描述 94
6.5.3 需求分配 94
6.6 一个例子:宠物保健中心 94
6.7 过程 106
第二部分 静 态 模 型
第7章 第二部分路线图 112
7.1 什么是静态模型 113
7.2 知识和行为 114
7.3 实用的注释 115
第8章 类 117
8.1 抽象表示 117
8.1.1 为真实的东西建模 118
8.1.2 局限于子系统或组件中 119
8.1.3 逻辑不可分性 119
8.1.4 委托 120
8.2 类表示法 121
8.3 识别类及其职责 122
8.3.1 对象“突击” 123
8.3.2 用例变异 124
8.4 例子 125
8.4.1 传奇的银行ATM控制器 125
8.4.2 宠物保健中心:处置 131
8.5 使用序列图和协作图 134
第9章 类的职责 137
9.1 属性:一个类对象应该知道什么 137
9.1.1 定义和表示法 137
9.1.2 与数据存储不同 138
9.1.3 状态 139
9.1.4 抽象数据类型 140
9.2 操作和方法:对象必须做什么 142
9.2.1 定义和表示法 142
9.2.2 识别行为 144
9.2.3 拟人化 148
9.3 过程 149
9.4 例子 150
9.4.1 ATM 150
9.4.2 宠物保健中心:处置 158
第10章 关联 165
10.1 定义与基础 165
10.2 表示法 170
10.3 逻辑连接的性质 172
10.3.1 导航到知识与导航到行为 173
10.3.2 关联角色 174
10.3.3 关联路径 175
10.4 条件性 178
10.5 多重性 182
10.5.1 使用“一个”模型替换问题域的“一个或更多个”模型 183
10.5.2 为问题域关联提供二次关联 184
10.5.3 选择和参与 185
10.6 约束 187
10.7 关联类 189
10.8 识别关联 192
10.9 例子 195
10.9.1 ATM控制器 195
10.9.2 宠物保健中心:处置 198
第11章 引用完整性和知识完整性 200
11.1 知识完整性 200
11.1.1 及时性 201
11.1.2 一致性 201
11.1.3 快照和实时访问 202
11.1.4 依赖属性 202
11.1.5 属性标准化 204
11.2 引用完整性 207
11.2.1 标识与引用属性 207
11.2.2 关联循环 209
11.2.3 关系和面向对象范式:完全不同 211
第12章 泛化归来 213
12.1 子类化 213
12.1.1 表示法和规则 215
12.1.2 泛化和特定化 216
12.1.3 分类 219
12.1.4 包含多态 223
12.1.5 为什么是{相交,完整}的子集 225
12.2 多方向子类、多重继承与组合 227
12.3 泛化的备选 235
12.3.1 委托 236
12.3.2 参数多态 238
12.3.3 基本抽象 238
第13章 识别知识 239
13.1 面向对象知识的性质是什么 239
13.2 抽象聚合 241
13.3 挑选适合的抽象 245
13.3.1 抽象人们做什么 246
13.3.2 潜在实体知道哪些 247
13.3.3 对象抽象应当知道哪些实体知识的子集 248
13.3.4 主题是什么 248
13.3.5 抽象层次是什么 251
13.4 抽象是否需要结合实体知识 252
第三部分 动 态 模 型
第14章 第三部分路线图 258
14.1 第三部分路线图 258
14.1.1 一切都关乎行为 259
14.1.2 对象生命周期 261
14.1.3 异步解决方案 262
14.1.4 同步服务 266
14.2 动作语言 269
14.3 Mealy机、Moore机和Harel机 270
14.4 学习曲线 272
第15章 有限状态机 273
15.1 基本的有限状态自动机 273
15.1.1 表示法 277
15.1.2 契约设计的作用 280
15.2 寻找状态机 283
15.2.1 知识和行为 283
15.2.2 管理序列 286
15.3 一些例子 295
15.3.1 车库门遥控器 295
15.3.2 自动家庭厨房 297
15.3.3 空中交通管制系统 297
15.3.4 岩石 298
第16章 状态、转换、事件和动作 300
16.1 状态 300
16.2 转换 305
16.3 事件 306
16.4 动作 309
16.5 执行模型 311
16.6 命名约定 313
第17章 开发状态模型 316
17.1 设计状态机 316
17.2 例子 325
17.2.1 ATM控制器:字符显示 326
17.2.2 ATM控制器:调度器 331
17.2.3 ATM控制器:存款 340
第18章 抽象动作语言 344
18.1 AAL和ADFD 345
18.2 AAL语法 346
18.3 例子 348
18.3.1 车库门遥控器 348
18.3.2 ATM:字符显示 351
术语表 354

教学资源推荐
作者: (美)Larry L.Constantine,Lucy A.D.Lockwood
作者: 韩万江 姜立新 等编著 宋茂强 审
作者: 沈朝辉
作者: (以色列)Doron A. Peled 著
参考读物推荐
作者: [英]桑德罗·曼卡索(Sandro Mancuso) 著
作者: 张瑾 杜春晖