(完整版)软件工程 第五章 面向对象的需求分析
- 格式:doc
- 大小:201.00 KB
- 文档页数:39
2.2需求分析需求分析是通过开发人员的分析概括,抽象为完整的需求定义,再形成一系列文档的过程。
2.2.1需求分析的目的与意义需求分析是一个非常重要的过程,它完成的好坏直接影响后续软件开发的质量。
有效的需求分析通常都具有一定的难度。
需求分析不仅仅是属于软件开发生命周期早期的一项工作,而且还应该贯穿于整个生命周期中,它应该随着项目的深入而不断地变化。
此外,为了方便后续的评审和测试等工作,需求的描述应该尽量做到:具体、详细、可以测量和可以实现,并且基于时间。
2.2.2需求分析的步骤遵循科学的需求分析步骤可以使需求分析工作更高效。
需求分析的一般步骤如图2-3所示。
需求涉及的方面:在功能方面,需求包括系统要做什么,相对于原系统目标系统需要进行哪些修改,目标用户有哪些,以及不同用户需要通过系统完成何种操作等。
在性能方面,需求包括用户对于系统执行速度、响应时间、吞吐量和并发度等指标的要求。
在运行环境方面,需求包括目标系统对于网络设置、硬件设备、温度和湿度等周围环境的要求,以及对操作系统、数据库和浏览器等软件配置的要求。
在界面方面,需求涉及数据的输入/输出格式的限制及方式、数据的存储介质和显示器的分辨率要求等问题。
1. 获取需求,识别问题开发人员从功能、性能、界面和运行环境等多个方面识别目标系统要解决哪些问题,要满足哪些限制条件,这个过程就是对需求的获取。
开发人员通过调查研究,要理解当前系统的工作模型和用户对新系统的设想与要求。
遗漏需求是最难修订的需求错误。
获取需求是需求分析的基础。
为了能有效地获取需求,开发人员应该采取科学的需求获取方法。
在实践中,获取需求的方法有很多种,比如,问卷调查、访谈、实地操作、建立原型和研究资料等。
问卷调查法是采用调查问卷的形式来进行需求分析的一种方法。
通过对用户填写的调查问卷进行汇总、统计和分析,开发人员便可以得到一些有用的信息。
采用这种方法时,调查问卷的设计很重要。
一般在设计调查问卷时,要合理地控制开放式问题和封闭式问题的比例。
判断题:第1章概述1。
由于今天个人计算机不断发展壮大,人们不再采用软件团队的开发方式。
(×)2。
由于软件是产品,因此可以应用其他工程制品所用的技术进行生产。
(×)3. 购买大多数计算机系统所需的硬件比软件更昂贵.(×)4。
大多数软件产品在其生命周期中不需要增强功能。
(×)5。
大多数软件系统是不容易变化的,除非它们在设计时考虑了变化。
(√)6. 一般来说,软件只有在其行为与设计者的目标一致的情况下才能成功。
(×)第4章需求工程1. 在需求分析过程中,分析员要从用户那里解决的最重要的问题是明确软件做什么。
(√)2. 软件需求规格说明书在软件开发中具有重要的作用,它是软件可行性分析的依据。
(×)第5章面向对象基础1. 模型是对现实的简化,建模是为了更好地理解所开发的系统。
(√)2。
UML语言支持面向对象的主要概念,并与具体的开发过程相关。
(×)第6章面向对象分析1. 面向对象分析的核心在于建立一个描述软件系统的模型。
(×)第7章软件体系结构设计1. 系统体系结构的最佳表示形式是一个可执行的软件原型。
(×)2. 软件体系结构描述是不同项目相关人员之间进行沟通的使能器.(√)3. 良好的分层体系结构有利于系统的扩展与维护。
(√)4。
消除两个包之间出现的循环依赖在技术上是不可行的.(×)5. 设计模式是从大量成功实践中总结出来且被广泛公认的实践和知识。
(√)第8章面向对象设计1。
面向对象设计是在分析模型的基础上,运用面向对象技术生成软件实现环境下的设计模型.(√)2。
系统设计的主要任务是细化分析模型,最终形成系统的设计模型.(×)3。
关系数据库可以完全支持面向对象的概念,面向对象设计中的类可以直接对应到关系数据库中的表。
(×)4。
用户界面设计对于一个系统的成功是至关重要的,一个设计得很差的用户界面可能导致用户拒绝使用该系统。
软件工程实用教程第三版-郭宁主编-课后习题及答案第一章软件工程引论1.在下列选项中,(D)不是软件的特征。
A.系统性与复制性 B. 可靠性与一致性 C.抽象性与智能型 D.有形性与可控性2.软件是一种(B)产品。
A.有形 B. 逻辑 C. 物质 D. 消耗3.软件工程是一种(A)分阶段实现的软件程序开发方法。
A.自顶向下B. 自底向上C. 逐步求精D. 面向数据流4.与计算机科学的理论研究不同,软件工程是一门(B)学科。
A.理论性 B. 工程性 C. 原理性 D. 心理性5.软件工程与计算机科学性质不同,软件工程着重于(C)。
A.原理探讨 B. 理论研究 C. 建造软件系统D. 原理性的理论6.下列说法正确的是(B)A.软件工程的概念于20世纪50年代提出B.软件工程的概念于20世纪60年代提出C.20世纪70年代出现了客户机/服务器技术D.20世纪80年代软件工程学科达到成熟7.软件工程方法学中的软件工程管理是其中的一个重要内容,它包括软件管理学和软件工程经济学,它要达到的目标是(D)A.管理开发人员,以开发良好的软件B.采用先进的软件开发工具,开发优秀的软件C.消除软件危机,达到软件生产的规模效益D.以基本的社会效益为基础,工程化生产软件第二章软件生命周期及开发模型1.软件生命周期包括可行性分析和项目开发计划、需求分析、总体设计、详细分析、编码、(B)、维护等活动。
A.应用 B. 测试 C. 检测 D. 以上答案都不正确2.软件生命周期模型有多中,下列项目中,(C)不是软件生命周期模型。
A.螺旋模型 B. 增量模型 C. 功能模型 D.瀑布模型3.软件生命周期中时间最长的阶段时(D)A.需求分析阶段 B. 总体设计阶段 C. 测试阶段 D. 维护阶段4.瀑布模型是一种(D)A.软件开发方法B. 软件生存周期C. 程序设计方法学 D. 软件生存周期模型5.软件开发中常采用的结构化生命周期方法,由于其特征而一般称其为(A)A.瀑布模型B. 对象模型C. 螺旋模型D. 层次模型6.在结构化的瀑布模型中,(D)阶段定义的标准将成为软件测试中系统测试阶段的目标A.详细设计阶段B. 总体设计阶段C. 可行性研究阶段 D. 需求分析7.增量模型是一种(B)的模型A.整体开发B. 非整体开发C. 灵活性差D.较晚产生工作软件8.(C)是指模拟某种产品的原始模型A.模型B. 最初模型C. 原型D. 进化模型9.建立原型的目的不同,实现原型的途径也有所不同,下列不正确的类型是(B)A.用于验证软件需求的原型B. 垂直原型C.用于验证设计方案的原型 D.用于演化出目标系统的原型10.原型化方法是一种(A)型的设计过程。
面向对象软件工程面向对象方法学的提出•结构化软件工程方法学•面向过程、以算法为核心、把数据和过程作为相对独立的部分•对早期只重视编程、不重视用户需求和开发过程,只重视代码、不重视文档来说,是一个巨大的进步•给软件产业带来了巨大的进步,部分缓解了软件危机•在许多中小型软件项目中获得了很大的成功•但是,它存在着明显的缺点•当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功面向对象方法学概述•面向对象方法学的出发点和原则•尽可能模仿人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界、解决问题的方法与过程•面向对象方法的特点•与人类习惯的思维方法一致:按照人们习惯的思维方式建立模型,模拟客观世界•稳定性好:实体是相对稳定的,以对象为中心构建的软件系统必然是相对稳定的•可重用性好:对象类提供了比较理想的模块化机制和可重用机制•易于开发大型软件:把大型产品看作一系列本质上相互独立的小产品来处理•可维护性好:容易理解、容易修改、易于测试四个要点:对象+类+继承+通信•面向对象软件是由对象组成•软件中的任何元素都是对象•对象是把静态属性的数据和动态属性的操作封装在一起而形成的统一体•复杂对象由简单对象组成•把所有对象都划分成若干类•每个类都定义了一组数据和方法(即施加于对象的操作);•按照子类与父类的关系,把若干个对象类组成一个层次结构的系统(即继承);•对象彼此之间仅能通过传递消息相互联系(对象的私有信息都被封装在对象类中)。
Coad和Yourdon给出了一个定义:面向对象=对象+类+继承+通信基本概念(1)•类(Class)•是对具有相同属性和行为的一(多)个对象的描述•是一个支持继承的抽象数据类型•实例(Instance)•就是由某个特定的类所描述的一个具体的对象•消息(Message)•是要求某个对象执行类中所定义的某个操作的规格说明•其组成为:接收消息的对象、消息名和变元•方法(Method)•就是对象所能执行的操作(类中定义的服务)•属性(Attribute)•就是类中所定义的数据,是对客观世界实体所具有的性质的抽象基本概念(2)•封装•是把数据和实现操作的代码集中起来放在对象内部,不能从外部进行访问和修改。
软件需求分析报告模板(完整版)目录1. 范围2. 总体要求2.1总体功能要求 .........................................................................................................................2.2软件开发平台要求 .................................................................................................................2.3软件项目的开发实施过程管理要求......................................................................................2.3.1 软件项目实施过程总体要求..........................................................................................2.3.2 软件项目实施变更要求..................................................................................................2.3.3 软件项目实施里程碑控制..............................................................................................3. 软件开发3.1软件的需求分析 .....................................................................................................................3.1.1 需求分析..........................................................................................................................3.1.2 需求分析报告的编制者..................................................................................................3.1.3 需求报告评审..................................................................................................................3.1.4 需求报告格式..................................................................................................................3.2软件的概要设计 .....................................................................................................................3.2.1 概要设计..........................................................................................................................3.2.2 编写概要设计的要求......................................................................................................3.2.3 概要设计报告的编写者..................................................................................................3.2.4 概要设计和需求分析、详细设计之间的关系和区别 ..................................................3.2.5 概要设计的评审..............................................................................................................3.2.6 概要设计格式..................................................................................................................3.3软件的详细设计 .....................................................................................................................3.3.1 详细设计..........................................................................................................................3.3.2 特例..................................................................................................................................3.3.3 详细设计的要求..............................................................................................................3.3.4 数据库设计......................................................................................................................3.3.5 详细设计的评审..............................................................................................................3.3.6 详细设计格式..................................................................................................................3.4软件的编码 .............................................................................................................................3.4.1 软件编码..........................................................................................................................3.4.2 软件编码的要求..............................................................................................................3.4.3 编码的评审......................................................................................................................3.4.4 编程规范及要求..............................................................................................................3.5软件的测试 .............................................................................................................................3.5.1 软件测试..........................................................................................................................3.5.2 测试计划..........................................................................................................................3.6软件的交付准备 .....................................................................................................................3.6.1 交付清单..........................................................................................................................3.7软件的鉴定验收 .....................................................................................................................3.7.1 软件的鉴定验收..............................................................................................................3.7.2 验收人员..........................................................................................................................3.7.3 验收具体内容..................................................................................................................3.7.4 软件验收测试大纲..........................................................................................................3.8培训 .........................................................................................................................................3.8.1 系统应用培训..................................................................................................................3.8.2 系统管理的培训(可选)..............................................................................................附录A 软件需求分析报告文档模板9附录B 软件概要设计报告文档模板21附录C 软件详细设计报告文档模板33附录D 软件数据库设计报告文档模板43附录E 软件测试(验收)大纲51. 范围本指南用于指导软件开发者为南京市交通局开发软件项目的过程,通过规范软件项目承担单位的开发过程达到提高软件质量,降低维护成本的目的。
面向对象的需求分析方法研究第一章:引言面向对象的需求分析方法是软件工程领域中的重要研究方向。
需求分析是软件开发的起点,确定用户需求对于软件系统的设计和实现至关重要。
在过去的几十年中,面向对象的方法在需求分析领域得到了广泛应用,并取得了显著的成果。
本文将探讨面向对象的需求分析方法的研究现状以及它们在实际应用中的优势。
第二章:面向对象分析与面向过程分析的对比2.1 面向对象分析的基本概念面向对象分析是一种将现实世界中的事物抽象为对象的方法。
它通过识别系统中的类、对象、属性和关系等元素,建立起对象模型,以更好地理解问题域并解决问题。
面向对象分析强调的是系统的结构和行为,以及对象之间的交互。
2.2 面向过程分析的基本概念面向过程分析是一种以步骤和流程为基础的分析方法。
它强调的是系统的执行过程和功能,以及数据的处理和变化。
面向过程分析将问题域分解为一系列的过程,通过定义输入、输出和处理逻辑来描述系统的功能。
2.3 面向对象分析与面向过程分析的对比面向对象分析和面向过程分析在方法论和思维方式上存在显著差异。
面向对象分析更加注重问题的抽象和模型化,其以对象为中心,关注系统的结构和行为。
而面向过程分析则更加注重问题求解的流程和步骤,其以函数和数据为中心,关注系统的执行过程和功能。
第三章:常见的面向对象需求分析方法3.1 用例建模用例建模是面向对象需求分析的一种常见方法。
它通过对系统的使用者、系统功能和交互进行抽象和建模,形成用例模型。
用例模型描述了系统的功能需求和行为,可以用来与利益相关者沟通,确保大家对系统的需求有一致的理解。
3.2 静态建模静态建模是面向对象需求分析的另一种重要方法。
它主要关注系统的结构和组成,通过识别和描述类、对象、属性和关系等元素,建立起静态模型。
静态模型描述了系统的静态视图,可以用于理解问题域和设计系统的初始结构。
3.3 动态建模动态建模是面向对象需求分析的补充方法,用于描述系统的行为和交互。
第五章面向对象的需求分析面向对象的需求分析方法的核心是利用面向对象的概念和方法为软件需求建造模型。
它包含面向对象风格的图形语言机制和用于指导需求分析的面向对象方法学。
面向对象的思想最初起源于 20世纪 60年代中期的仿真程序设计语言Simula67。
20世纪80年代初出现的Smalltalk 语言及其程序设计环境对面向对象技术的推广应用起到了显著的促进作用。
20世纪90年代中后期诞生并迅速成熟的UML(Unified Modeling Language,统一建模语言)是面向对象技术发展的一个重要里程碑。
UML 统一了面向对象建模的基本概念、术语和表示方法,不仅为面向对象的软件开发过程提供了丰富的表达手段,而且也为软件开发人员提供了互相交流、分享经验的共用语言。
本章首先介绍面向对象的主要概念和思想。
在概述了UML的全貌之后,以“家庭保安系统”为实例,介绍与需求分析相关的部分 UML语言机制以及基于UML的面向对象的需求分析方法和过程。
第一节面向对象的概念与思想一、面向对象的概念关于“面向对象”,有许多不同的看法。
Coad和 Yourdon给出了一个定义:“面向对象 = 对象 + 类 + 继承 + 消息通信”。
如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。
一个面向对象的程序的每一成分应是对象,计算是通过新的对象的建立和对象之间的消息通信来执行的。
1.对象(object)一般意义来讲,对象是现实世界中存在的一个事物。
可以是物理的,如一个家具或桌子,如图 5-1-1所示,可以是概念上的,如一个开发项目。
对象是构成现实世界的一个独立的单位,具有自己的静态特征(用数据描述)和动态特征(行为或具有的功能)。
例如:人的特征:姓名、性别、年龄等,行为:衣、食、住、行等。
图 5-1-1 对象的定义(1)对象、属性、操作、消息定义对象可以定义为系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。
属性一般只能通过执行对象的操作来改变。
操作又称为方法或服务,在C ++中称为成员函数,它描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。
而所谓的消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。
发送给一个对象的消息定义了一个操作名和一个参数表(可能是空的),并指定某一个对象。
由一个对象接收的消息则调用消息中指定的操作,并将传递过来的实际参数与参数表中相应的形式参数结合起来。
接收对象对消息的处理可能会改变对象中的状态,即改变接收对象的属性,并发送一个消息给自己或另一个对象。
可以认为,这种消息的传递大致等价于过程性范型中的函数调用。
(2)对象的分类〃外部实体:与软件系统交换信息的外部设备、相关子系统、操作员或用户等。
〃信息结构:问题信息域中的概念实体,如信号、报表、显示信息等。
〃需要记忆的事件:在系统运行过程中可能产生并需要系统记忆的事件,如单击鼠标左键、击打键盘“?”键等。
〃角色:与软件系统交互的人员所扮演的角色,如经理、部长、技术支持等。
〃组织机构:有关机构,如单位、小组等。
〃位臵:作为系统环境或问题上下文的场所、位臵,如客户地址、收件人(机构)地址等。
〃操作规程:如操作菜单、某种数据输入过程等。
在标识对象时必需注意遵循“信息隐蔽”的原则:必需将对象的属性隐藏在对象的内部,使得从对象的外部看不到对象的信息是如何定义的,只能通过该对象界面上的操作来使用这些信息。
对象的状态通过给对象赋予具体的属性值而得到。
它只能通过该对象的操作来改变。
对象有两个视图,分别表现在分析设计和实现方面。
从分析及设计方面来看,对象表示了一种概念,它们把有关的现实世界的实体模型化。
从实现方面来看,一个对象表示了在应用程序中出现的实体的实际数据结构。
之所以有两个视图,是为了把说明与实现分离,对数据结构和相关操作的实现进行封装。
2.类(class)和实例(instance)把具有相同特征和行为的对象归在一起就形成了类。
类成为某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。
属于某个类的对象叫做该类的实例。
对象的状态则包含在它的实例变量,即实例的属性中。
如图 5-1-2所示。
从“李杰”、“王辉”和“杨芳”等对象可得到类“学生”,而这些对象就称为该类的实例。
图 5-1-2 对象、类与实例类定义了各个实例所共有的结构,类的每一个实例都可以使用类中定义的操作。
实例的当前状态是由实例所执行的操作定义的。
面向对象程序设计语言,如C++和 smalltalk都定义了一个new操作,可建立一个类的新实例。
C++ 还引入了构造函数,用它在声明一个对象时建立实例。
此外,程序设计语言给出了不同的方法,来撤消(称为析构)实例,即当某些对象不再使用时把它们删去,把存储释放以备其他对象使用。
C++给出了一个操作delete,可以释放一个对象所用的空间。
C++还允许每个类定义自己的析构方法,在撤消一个对象时调用它。
smalltalk 没有提供一个机制来撤消对象,但可以进行无用单元收集。
类常常可看做是一个抽象数据类型(ADT)的实现。
但更重要的是把类看做是表示某种概念的一个模型。
事实上,类是单个的语义单元,它可以很自然地管理系统中的对象,匹配数据定义与操作。
类加进了操作,给通常的记录赋予了语义,可提供各种级别的可访问性。
3.继承(inheritance)如果某几个类之间具有共性的东西(信息结构和行为),抽取出来放在一个一般类中,而将各个类的特有的东西放在特殊类中分别描述,则可建立起特殊类对一般类的继承,如图 5-1-3所示。
各个特殊类可以从一般类中继承共性,这样避免了重复。
图 5-1-3 特殊类对一般类的继承关系建立继承结构的好处:〃易编程、易理解代码短, 结构清晰;〃易修改:共同部分只要在一处修改即可;〃易增加新类:只须描述不同部分。
4.多继承如果一个类需要用到多个既存类的特征,可以从多个类中继承,称为多继承。
例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。
图 5-1-4 多继承5.多态性和动态绑定对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。
发送消息的对象可能不知道另一个对象的类型是什么。
如在 C程序中使用命令ClearInt ()时要严格区分该命令适合一个整数,还是一个整数数组。
但在C++情形,ClearInt ()对两者都适用,它自己判断对象是哪一个。
这就是多态性。
它意味着一个操作在不同类中可以有不同的实现方式。
如清零操作 ClearInt ()针对消息对象是 int array 还是int,其实现是不同的。
在一个面向对象的多态性语言中,可能代替一个特定类型的类型的集合就是它的子类集合。
例如,图 5-1-5给出了 4个类的继承层次。
使用这个继承结构,发送给多边形类的所有消息,它的所有子类都能够响应。
又例如,想要在屏幕上画一系列多边形,多态性允许一个表的元素可以属于一组指定的类型而不仅仅是一个类型,可以认为这是一个类族。
通过遍历这个表,发送给各个表元素以draw消息,画出所有的多边形。
图 5-1-5 4个类的继承层次动态绑定把函数调用与目标代码块的连接延迟到运行时进行。
这样,只有发送消息时才与接收消息实例的一个操作绑定。
它与多态性可以使我们建立的系统更灵活,易于扩充。
做为动态绑定的例子,考虑在多边形类中的方法contains ? (aPoint)。
这个操作可以在类层次的各层重新实现,以有效利用各个子类的特殊的特征。
例如,假定一个矩形有某些边与屏幕的边平行,这时,检查一个点是否包含在矩形内,比检查一个点是否在一个一般的四边形内的效率要高一些。
二、面向对象软件开发的分析模型面向对象分析过程分为论域分析和应用分析。
论域分析建立大致的系统实现环境,应用分析则根据特定应用的需求进行论域分析。
1.OOA分析的基本原则和任务为建立分析模型,要运用如下的5个基本原则:①建立信息域模型;②描述功能;③表达行为;④划分功能、数据、行为模型,揭示更多的细节;⑤用早期的模型描述问题的实质,用后期的模型给出实现的细节。
这些原则形成OOA的基础。
OOA的目的是定义所有与待解决问题相关的类(包括类的操作和属性、类与类之间的关系以及它们表现出的行为)。
为此,OOA需完成的任务是:(1)软件工程师和用户必须充分沟通,以了解基本的用户需求;(2)必须标识类(即定义其属性和操作);(3)必须定义类的层次;(4)应当表达对象与对象之间的关系(即对象的连接);(5)必须模型化对象的行为;(6)反复地做任务①~⑤,直到模型建成。
2.OOA概述目前已经衍生许多种 OOA方法。
每种方法都有各自的进行产品或系统分析的过程,有一组可描述过程演进的图形标识,以及能使得软件工程师以一致的方式建立模型的符号体系。
现在广泛使用的OOA方法有以下几种:(1) Booch 方法:Booch 方法包含“微开发过程”和“宏开发过程”。
微开发过程定义了一组任务,并在宏开发过程的每一步骤中反复使用它们,以维持演进途径。
Booch OOA 宏开发过程的任务包括标识类和对象、标识类和对象的语义、定义类与对象间的关系,以及进行一系列求精从而实现分析模型。
(2) Rumbaugh 方法:Rumbaugh 和他的同事提出的对象模型化技术(OMT)用于分析、系统设计和对象级设计。
分析活动建立三个模型:对象模型(描述对象、类、层次和关系),动态模型(描述对象和系统的行为),功能模型(类似于高层的DFD,描述穿越系统的信息流)。
(3) Coad和Yourdon 方法:Coad和Yourdong方法常常被认为是最容易学习的OOA 方法。
建模符号相当简单,而且开发分析模型的导引直接明了。
其OOA过程概述如下:〃使用“要找什么”准则标识对象;〃定义对象之间的一般化∕特殊化结构;〃定义对象之间的整体∕部分结构;〃标识主题(系统构件的表示);〃定义属性及对象之间的实例连接;〃定义服务及对象之间的消息连接。
(4) Jacobson方法:也称为OOSE(面向对象软件工程)。
Jacobson 方法与其他方法的不同之处在于他特别强调使用实例(use case)——用以描述用户与系统之间如何交互的场景。
Jacobson方法概述如下:〃标识系统的用户和它们的整体责任;〃通过定义参与者及其职责、使用实例、对象和关系的初步视图,建立需求模型;〃通过标识界面对象、建立界面对象的结构视图、表示对象行为、分离出每个对象的子系统和模型,建立分析模型。
(5) Wirfs―Brock 方法:Wirfs―Brock 方法不明确区分分析和设计任务。