1.1软件开发的复杂性
软件开发的复杂性是软件设计与开发者的体验。具体有:
- 很难精确表述出用户需求
- 开发过程中用户需求经常变化
- 用户需求常以大量的文本的形式表现出来,难以理解并互相冲突
- 很难发现大型应用项目隐蔽着的复杂性
- 人类本身处理复杂现象的能力有限
- 很难预估最终输出的执行效果及其是否能满足用户的期望
- 设计者遇到的最大挑战是为解决方案中的硬件挑选合适的软件除要克服上述复杂的问题,软件系统还应有最大的兼容性和扩展性。
- 开发成功的软件不管从用户需求角度,还是从技术的角度都应能经得住环境的变化,称为软件的兼容性。例如:为某个银行开发的软件能够不加修改或者少许修改就能为另一家银行所用。
- 扩展性是指软件开始定制和设计时,强调在不对现存系统做重大修改的前提下,软件能够很容易地不断发展。
1.2 软件生命周期
软件生命周期(SDLC)是指由分析人员、设计人员和用户为了开发并实现一个信息系统所进行的一系列行为,可分为几个不同的阶段。
- 分析人员,研究顾客和用户的需求,并定义问题域。确定企业怎样使用人员、管理方法及计算机技术才能实现商业发展,然后对系统提出要求。
- 设计者,从数据库结构、界面、表单和报告方面设计系统。确定开发系统所需的软硬件配置。
- 用户系统开发的最终用户。
1.3 SDLC开发阶段
整个软件生命周期可大致分为7个阶段,包括:
1.3.1 初步调查(可行性研究)
初步调查是系统开发的第一个阶段。这个阶段的主要目的是确定用户现在工作环境的不足及其需求。该阶段调查的一个重要结果是确定系统开发是否可行。可行性由以下因素决定:
- 开发者组织本身是否能为用户提供所需的技术资源或技术,或者用户需求可通过市场来满足。
- 系统在经济和财务上是否可行。
- 一旦安装软件后,用户使用软件可能产生的效率。
初步调查最后产生的文档称为可行性研究报告。根据可行性研究,用户表示是否最终接受建议项目。如果用户接受,便可以开展项目的需求分析阶段。
1.3.2 需求分析
需求分析包括对当前商业系统的详尽分析,分析其工作现状和需修改之处。另外,它还包括对系统不同操作及其与系统内外的联系的详尽分析。整个阶段需要系统分析人员和用户密切合作。如此产生的每一个需求都是新系统的特点。
需求分析最后产生的详细文档称为需求说明书。
1.3.3 系统设计
系统分析完成之后,用户的需求变得十分明确。下一个阶段即针对新要求做具体设计。设计阶段规定需求说明书中己确定的需求的具体实现方法。
设计阶段的主要操作有:
- 确定数据项目格式及数据元素
- 确定新系统应输出的报告和结果
- 粗略描绘系统完成阶段应显现的格式和布局。可通过使用任何一种自动化的系统设计工具在纸上完成或者在计算机屏
幕上显示出来。
- 确定创建数据库的数据元素及表。
- 计算机处理方法,描述从数据输入到得到输出结果的全部过程。
设计阶段最后产生的详细文档称为设计说明书。系统的细节设计给提交给程序员做商业软件开发。
1.3.4 软件构建
该阶段完成实质性的项目构建(编程)。程序使用测试或者虚拟数据逐个地测试。同时程序员也要准备程序说明,解释与每个操作相对应的特定程序段的编程方法和原因。软件构建阶段主要的操作有:构建真正的软件代码
单元测试:简称UT,是构建系统的程序员自己进行的一种测试。在此之前需做一个单元测试计划,其中应包括代码测试预计产生结果。根据测试的性质,系统开发的术语称之为白箱测试。
独立单元测试:在这个操作中,一组与此项编程无关的人员而不是程序员自己做测试。测试也根据程序员在上一个操作中提供的单元测试计划进行。
1.3.5 系统测试
每个程序单元做完单独的测试后,需要将系统作为一个整体测试。在系统整体测试阶段,所有软件模块集成为一个整体并进行测试确保能够成功执行。要求系统能对应需求说明书中的详细需求执行相应的功能,并产生用户预期的结果。将特殊的测试数据输入到系统中,分析处理后的结果是否与预期的结果有偏差。
1.3.6 安装启用
该阶段中,开发完毕的系统安装在用户场所使用。在系统正式使用之前,需要进行下述操作:
- 培训用户使用系统的方法
- 提供系统构建所需的数据文件
1.3.7 系统维护
由于环境不断变化,软件会过时,需要修改和增强提高使用效率。系统维护操作依据修改和增强的规模不同而变化。
1.4 典型SDLC过程工作量分布
对计算SDLC不同阶段的工作量有几个不同的学派和说法。然而在典型SDLC中,各阶段最终的工作量分布接近以下的比例。
分析与设计:40%
开发:40%
测试:20%
1.5 系统分析
系统分析是指通过对系统的综合研究,准确理解系统需求。该阶段有助于准确地掌握系统要实施的需求,从而正确地定义问题域。系统分析阶段中确定软件开发的具体内容。
充分正确的理解要解决的问题以后,可进入下一个阶段——设计阶段。
到目前为止,编程工作中最重要的阶段是准确理解系统。这个阶段由系统分析员完成。
在理解任何问题过程中都要问“要做的内容是什么?”。分析就是为了回答这个问题而要做的一系列工作。
分析是SDLC重要阶段,是所有开发的依据。然而,分析阶段的成果是什么?也即分析阶段的结束标准是什么?(结束标准(Exit
Criteria)可理解为实现目标)
1.6 系统分析阶段的结束目标
分析结果应:
- 确定要做的内容
- 研究要做的内容,确定所有涉及的要素。
- 从现实世界角度出发,为当前需解决问题建立相应的模型。
- 将定义过的问题提交给应用领域专家
1.6.1 应用领域专家
理想情况下,任何开发工作都应寻求应用领域专家的配合。应用领域专家比较容易从深层次上剖析需解决问题,应用领域专家没有必要一定就是程序员,他们的任务是保证程序员能充分理解用户对系统的需求。
因此,在系统分析阶段结束后,对需要解决的问题的阐述应能达到让应用专家和用户理解。
1.7 构建范型(Architecture paradigms)
当前计算机科学领域中有三个公认的软件开发范型。其中包括:
- 面向过程:是用计算机解决问题的最初方式,这个传统设计方法以功能分解为基础。例如取钱过程可以分解为如下几个步骤:填写取现凭条,交给出纳员,出纳员验证签名,如果签名符合,出纳员需做必要的检验,例如帐户是否收支平衡,等等
较为流行的面向对象开发语言有COBOL、C和Basic。
- 面向对象:面向对象范型的主要思想是将现实世界中对象映射为问题域中的组成元素,再使用计算机来解决问题域中的问题。所谓的OO方式是当今世界上提供计算机解决方案的最佳途径,需要解决的问题被分解成若干从现实世界映射而得的对象。例如上述的取款的例子,也可以用面向过程的方法进行处理,在面向对象方法中,我们可以看到帐户、出纳员、顾客以及其他与现实世界对象元素被一一确认,问题的解决方案将围绕着这些现实世界的实体来展开。
表达面向对象范型的语言有:Simula、SmaIITalk、C++、Java等.
- 知识和神经网络:过去的一个半世纪,人们一直在尝试,让计算机能象人类一样思维,即为人工智能(AI)。此范型收集现实世界人类处理问题的方法,用计算机实现模拟人类思维处理数据,并得出结论。实现这个范型的语言有RETE++和CLPS。SDLC所有阶段都可应用到上述的三个范型中,然而随着技术的发展,面向对象范型很快地表现出明显优于面向过程范型的趋势。知识和神经网络还处在实验阶段,不适合商业和技术领域应用。所以,很明显当前产业发展重点应为面向对象范型。
1.8 从面向对象范型角度看SDLC的各个阶段
决定软件开发使用的范型之后,需着重考虑如何实现该范型下SDLC各阶段软件开发的设计与实现。然而,在一些不可避免的环境下,可有特例,例如某些系统模块与老的面向过程系统之间的接口。
1.8.1 面向对象分析(OOA)
定义:面向对象分析(OOA)是建立可为用户可理解的精确和简明映射模型的过程,该模型对真实世界对象实体和概念建立精确和简明的映射。
在OOA中,要求构建与现实世界原型相对应的问题模型。此外,非编程人员也应能够理解系统的定义。换句话说,面向对象的分析着重强调从现实世界原型角度表述问题。
OOAD方法要求在设计中要映射现实世界中指定问题域中的对象和实体,例如:顾客、汽车和销售人员等。这就需要设计要尽可能地接近现实世界,即以最自然的方式表述实体。所以面向对象技术的优点即为能够构建与现实世界相对应的问题模型,并保持他们的结构、关系和行为为模式。
例如,在汽车交易的模型中,分析员需确定如下实体:顾客、推销员、定单、汽车
分析员还要确定各实体之间的相关特点、交互操作和相互关系。在许多情况下,需要将现实世界的对象与行为构建成一个系统在计算机上操作实施。例如下文中汽车交易所需的操作系统。系统要解决的问题是什么?首先应考虑交易过程和与之相应的不同操作。
推销员带领顾客参观陈列室
- 顾客选中一辆车
- 顾客提供定单
- 顾客购车付款
- 汽车托运给顾客
另一个关于储蓄银行的例子,分析员应将实体定义成:
- 帐目类型:ATM、存款、流动资金、固定资金等。
- 银行顾客、出纳员
- 计算机部
此分析可确定实体之间的相关特征,交互操作和相互关系。
- 新顾客开一个储蓄帐户
- 从现金帐户向定期帐户转钱
- 将储蓄帐户中将现金转到ATM账户
这种建立现实世界与计算机之间映射的分析方法是面向对象分析的最大优势。
1.8.2 面向对象设计(OOD)
定义:面向对象设计(OOD)程序被组织成相互作用的对象实体集合的过程,每个对象实体代表类的一个实例,而所有的类都是一个类层次结构中的成员,所有成员通过继承关系组织在一起。
面向对象设计的主要目的要使得在分析阶段所得到的结果能够在非功能性需求(non-functional requirements)、实现环境(implementation
environment)、性能要求等对系统的强制性制约下,得以成型。OOD可看作是面向对象分析(OOA)的细化。
它着重强调在保证所有需求得到满足的情况下优化解决方法。在OOD阶段,设计人员要定义一个或几个类的责任,操作属性和相互关系,并对这些类进行调整,以适应开发环境的要求。同时还要设计数据库及应用标准化技术。
在OOD阶段结束时,应得到一些图。这些图可分为静态和动态两种。静态图表表达类和对象,而动态图表表达类之间的关系并确定它们的准确操作。在后续的开发阶段中这些类可以嵌入到较小的程序包中,或者应用程序的子单元中。
1.8.3 面向对象编程(OOP)
SDLC的构建阶段可通过面向对象编程(OOP)实现。换句话说,面向对象编程是使用一种支持面向对象方法的语言实现面向对象设计的过程。上面两个阶段共同提供了面向对象编程的框架。支持OOP的语言有C++、VB和Java。这个阶段的成果是一系列可执行代码,再经过各种不同的测验即可发布。
1.9 使用面向对象范型的优势
使用面向对象范型的优点有:
- 面向对象方法从应用领域的术语和概念角度进行分析、设计和实施,所以在实施内容和现实问题之间有密切联系。例如:在汽车交易的案例中,系统分析、设计的各个阶段甚至在实现阶段都有顾客,推销等人员的参与。
- 在新应用实现过程中,面向对象方法可提供对象复用。这对长期开发费用降低具有非常重要的意义。例如,某顾客进行某项操作的行为建模之后,任何顾客的这种行为都可以使用己创建的模型。
- 由于可以复用对象,错误和维护可产生的问题即可大大减少。因为,该对象已经试验和测试完成。
- 对象的复用能减短软件设计和开发的时间。
- 由于面向对象方法和人类思维方法一致,所以有助于保证人类认知能力的工作。
- 面向对象方法使用数据封装,可解决一些和数据相关的开发和维护问题。数据封装技术,通过仅允许功能调用处理数据集来保证数据不受错误代码操作影响,从而保证数据的有效性。
- 面向对象的分析和设计有助于处理软件开发的复杂性,帮助生成具有良好适应性和弹性的软件系统。
1.10 软件模型
重新回顾系统分析阶段的结束标准,我们重申一定要建立要实现系统的完整模型。该模型必须有现实意义,并且可为用户理解。模型用于确定用户对系统的真实需求,有助于确定系统的可行性。很长时间以来,模型在所有工程学科中的重要性是显而易见的。
建任何实体都要画出草图描述其外状和功能。例如,绘图即为一些实体的模型。模型是对实体的描述,实体分别处在不同阶段,例如:设计阶段、构建阶段、或者还仅仅是一个初步设计而已。设计者必须创建模型描述设计的各个不同部分。模型再进一步地分成不同的视图。每一个视图表示设计或要构建系统的一个特定方面。模型分为几个不同的阶段,每个阶段加入相应细节。
模型经常采用可视化语言描述,也就意味着经常采用图形符号表述。图形符号具有理解简单,综合性强的特点。就像在其他工程领域中一样,具体实现软件之前要建立模型己成为必须的步骤。
模型是对现实世界的简化。建立模型是为了更好地理解要开发的系统。它有助于全面地理解复杂系统。系统建模有助于实现如下目的:
- 建模有助于按系统本身或者按需求对系统进行可视化。
- 建模有助于确定系统的结构和行为。
- 建模为开发者构建系统提供模板。
- 建模记录开发者为后期使用所做的决策。
1.11 模型演变(Model wars)
在80年代早期,仅有的面向对象语言为Simula,到80年代后期,Smalltalk和C++等其他面向对象语言逐渐实现,同时伴随而生的是对面向对象系统和软件建模的需求。以下所列为90年代早期教为流行的建模语言。
Grady Booch的Booch模型方法
James Rambaugh的面向对象技术,OMT
Ivar Jacobson的OOSE方法
Hewlett-Packard的Fusion方法
Coad和Yordon的OOA and OOD
每一个方法都有其独特的处理方法、过程和工具,都有其长处和短处,所以很难评价哪一个适合。有经验的开发者常常开始使用一种方法,在开发的过程中不断吸取其他方法的优点。事实上,不同方法之间的差异并不重要,因为随着时间的发展这些方法在逐渐地向同一个方向发展。当前模型专家们己决定要集合这些模型技术的优点。
1.12 UML诞生
人们越来越发现非常有必要建立对象模型构建的公用和标准方法。要求有一套标准的定义和图标能够清晰地表达设计决策。为了这个目标,James
Rumbaugh,Grady Booch和Ivar Jacobson做了开创性的努力,并提供了一整套图形、图表表示法。
随之产生的是统一建模语言一UML。
UML是一种建模语言,是面向对象方法用来表述系统设计的图形表示法,是用来可视化表达、叙述、构建和记录复杂软件不同方面的语言。
UML用来建立用户。分析人员、设计者和软件开发人员之间的轻松对话。
当前参加和致力于UML开发的公司主要有:
- Hewlett-Packard
- Microsoft
- Oracle
- IBM
- Unisys
UML是整个计算机界共同参与的结果,它为面向对象开发设定了标准。
从上述参与的公司可以看出来,所有业内的软件和硬件巨擎都在为发展这个标准而努力。该标准正在逐渐的成型,然而还需要连续不断努力。在大型复杂系统建模的过程中己取得成功。引用一句OOAD和UML领域中的导言"良好的(标准的)表达法可以通过减少不必要的脑力劳动,着重解决更高级或更有创造性的问题。(By
relieving the brain of unnecessary work, a good (standard) notation
sets it free to concentrate on more advanced and creative problems.)"
1.12.1 在面向对象范型中使用UML
UML用于为许多不同系统建模。在软件开发的不同阶段都可使用UML,从需求说明阶段到软件实施和维护阶段。UML的最终目标即是能使用面向对象图描述任何类型系统。软件开发有以下几种类型:
- 信息系统:有数据库相关的系统
- 技术系统:处理和控制技术设备
- 内嵌系统:控制诸如移动电话,家用电器等设备
- 分布系统:使用CORBA或者其他类似的面向对象机制的分布式数据库系统
- 系统软件:用于操作系统和开发系统驱动程序
- 商业系统: 与工作流程相关的系统
1.12.2 UML与SDLC各阶段的对应关系
回顾SDLC周期,可看到UML在系统开发的不同阶段中的应用。初步调查:UML使用用例描述顾客的需求。每一个用例使用文档详细描述用户的具体需求。UML使用用例图描述与系统的相互关系和通讯。
分析阶段:在此阶段中,主要要对问题域进行抽象,理解其内部的运行机制。类表达现实世界的对象,并描述它们的存在和相互关系。分析过程中只考虑存在于问题域中的类。
设计阶段:在设计阶段,对分析阶段的成果提出技术上的解决方案。对类进行细化建模,并提出技术框架,例如,用户界面、面向对象数据库的永久性对象和系统接口等。该阶段最后为系统实施阶段产生详细说明文档。
开发:该阶段中把设计模型转换为真正的代码。程序员使用在设计阶段生成的不同的UML图理解和开发代码。
测试:UML有许多不同的图可用于软件测试,单元测试使用类图和类的定义文档。集成测试使用协作图,而系统测试使用用例图,用例图可以用于证实客户所期望的系统行为。
1.13 UML概述
本部分主要是UML概述。简要介绍UML不同组成部分,说明其范围和结构。
总的来说,UML不同组成部分有
- 视图(Views)
- 图(diagrams)
- 模型元素(Model elements)
- 通用机制 (general Mechanisms)。
1.13.1 UML视图
“To view”意味着“观察”和“检查”。不同的人,例如用户,系统开发者,中立的观察者可以从不同的角度看系统。例如:用户从数据输入到输出的过程来观察系统;
系统开发者从系统结构和其数据流角度看系统。中立的评论者既不是系统的用户也和系统开发无关,所以它只是没有任何重点的观察系统。
系统开发者使用UML图表达他对部分系统的看法。软件系统通常可以从很多不同角度描述,例如:功能性的,非功能性的和组织的等。为描述这些信息需使用许多视图。系统有动态和静态两个方面。因此,也有两种类型的视图:动态和静态。当从系统静态角度看时,视图称为为静态视图;从动态角度看时,视图称为动态系统。组成动态视图的图表描述了系统的行为。
1.13.2 UML图
如果要理解UML中的图,首先要理解UML中模型的概念。UML将模型定义为从特定角度对系统的全面描述。每一个系统模
型通常有几种图表类型。图是特定视图的一部分,画出之后便归类于某一图。
根据内容不同一些图表可以几种不同视图的组成部分。UML中的图可看做两个视图系列。上文提到视图可分为两类:动态和静态。所以图表可类于任何一种视图。
|