软件工程复习整理版.docx
《软件工程复习整理版.docx》由会员分享,可在线阅读,更多相关《软件工程复习整理版.docx(16页珍藏版)》请在冰豆网上搜索。
软件工程复习整理版
复习大纲:
题型:
1、单向选择题(共30分,每题2分)2、填空题(共20分,每小题1分)
3、简答题(共30分,每小题6分)4、应用题(包括2小题,共20分)
第一章绪论
1.软件的概念,程序和文档,软件的特征。
软件的概念:
软件是能够完成预定功能和性能的可执行的计算机程序,包括是程序正常执行的所需要的数据,以及有关描述程序操作和使用的文档。
简而言之,可以表述为“软件=程序+文档”。
软件的特征:
软件是逻辑产品而不是物理产品,具有与硬件完全不同的特征。
1.软件开发不同于硬件设计:
软件开发主要是脑力劳动;软件开发成本高。
2.软件生产不同于硬件制造:
软件生产无明显制造过程;制造只是简单的拷贝。
3.软件维护不同于硬件维修:
软件是逻辑产品不是物理产品;软件无磨损性;
2.软件危机的定义、表现、产生时间、原因。
软件危机的定义:
在软件的开发和维护过程中遇到的一系列严重问题。
表现:
1、经常延期,无法按时提交产品;
2、无法满足用户的期望;
3、很难适应环境的变化;
4、产品提交后出现很多问题。
产生的时间:
开始于20世纪60年代中后期(1968年前后)。
原因:
1、软件维护费用急剧上升,直接威胁计算机应用的扩大。
2、软件生产技术进步缓慢,是加剧软件危机的重要原因。
3.软件工程的概念。
软件工程的概念:
采用工程化的原理和方法对软件进行计划、开发和维护。
软件工程=软件开发技术+软件工程管理
4.软件工程环境的概念。
软件工程环境的概念:
方法和工具相结合,再加上配套的软、硬件支持就形成软件工程环境。
5.3种编程泛型:
过程式编程泛型、面向对象编程泛型、基于构件技术的编程泛型
过程式编程泛型:
程序=数据结构+算法
面向对象编程泛型:
程序=对象+消息
基于构件技术的编程泛型:
构件是一种通用的(可复用的)、可支持不同应用程序的软件组件。
(1)过程式编程范型:
着眼于程序的过程和基本控制,粒度最小。
(2)面向对象编程范型:
着眼于程序中的对象,粒度比较大。
(3)基于构件技术的编程范型:
着眼于适合整个领域的类对象,粒度更大。
6.3代软件工程:
传统软件工程或经典软件工程、面向对象软件工程、基于构件的软件工程
(1)传统软件工程或经典软件工程:
结构化分析→结构化设计→面向过程编码→测试
(2)面向对象软件工程:
OO分析→OO设计→OO编码与测试
(3)基于构件的软件工程:
领域分析→领域设计→建立可复用构件库→按“构件集成模型”查找与集成构件
三代软件工程并非相互排斥,而是“你中有我,我中有你”。
第二章软件生存周期与软件过程
1.软件生存周期的概念。
一个软件从开始计划起,到废弃不用的整个时期,称为软件生存周期。
2.软件生存周期包含3个时期。
软件生存周期包含3个时期:
计划、开发和运行时期。
各时期又分为若干阶段,共6个阶段。
3.软件生存周期的主要活动。
可行性研究、需求分析、软件设计、编码、测试、运行维护。
4.软件设计分为几个部分?
总体设计:
又称概要设计,主要确定软件的体系结构。
详细设计:
又称过程设计,主要设计每个模块的实现细节。
5.软件测试分为几个层次?
单元测试、集成测试、确认测试和系统测试。
6.软件开发模型总结
开发模型
特点
场合
瀑布模型(基于软件生存周期的线性开发模型,历史悠久、广为人知,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终开发的软件产品可能并不是客户真正需要的)
线性模型,每个阶段必须完成固定文档
需求明确的中小型软件开发
快速原型模型(正是为了克服瀑布模型的缺点提出来的,他通过快速构建起一个可以在计算机上运行的原型系统,让用户使用原型并收集用户反馈意见的方法,获取用户的真实需求)
用户介入早,通过迭代完善用户需求,应用快速开发工具。
逼真、快速。
需求模糊的小型软件开发
增量模型(具有可在软件开发的早期阶使投资获得明显回报和交易维护的优点,但是,要求软件具有开放的结构是使用这种模型固有的困难。
)
每次迭代完成一个增量,可用于OO开发
容易分块的大型软件开发
螺旋模型(结合瀑布模型与快速原型模型基础上演变而成,适用于大型软件项目,但是只有在开发人员具有风险分析和排除风险的经验及专门知识时,使用这种模型才会成功。
)计划、风险分析、建立原型、用户评审。
典型迭代模型,重视风险分析,可用于OO开发。
在项目开发的所有阶段都考虑各类风险。
具有不确定性的大型软件开发
构件集成模型(面向对象基于构件库,融合螺旋模型的特征,支持软件开发,迭代方法,软件复用思想)
软件开发与构件开发平行进行,主要用于OO开发
领域工程,行业的中型软件开发,主要用于oo开发
7.统一过程模型RUP(RationalUnifiedProcess)。
RUP是美国Rational公司(现被IBM公司兼并,称IBM-Rational公司)开发的一种支持UML建模过程的软件工具。
RUP是以用例为驱动、以系统架构为中心的迭代与增量过程。
RUP在一个二维空间中描述软件开发活动,水平轴代表时间,显示了过程动态的一面,它将一个软件生存周期分为4个阶段,包括初始、细化、构造和移交阶段,每个阶段又可以分为多个迭代。
8.软件可行性研究:
经济可行性、技术可行性、运行可行性、法律可行性。
9.可行性研究的步骤:
对当前系统进行调查研究、导出新系统的解决方案、提出推荐方案、编写可行性论证报告。
10.可行性报告的结论。
结论可区分为可立即进行、推迟进行以及不能或不值得进行3类。
第三章结构化分析与设计
1.结构化分析的两项基本任务。
①建立分析模型
②编写需求规格说明书(SRS)(SRS应该具有准确性;SRS应该防止二义性;SRS应该直观、易读、易于修改。
)
2.结构化分析模型的组成。
实体联系图;数据流图;状态变换图
3.数据流图DFD(DataFlowDiagram):
指明数据在系统中如何流动和变换;描述对数据流进行变换的功能;DFD中每个功能的描述包含在加工说明(PSPEC)中。
4.数据流图的组成符号:
5.加工说明是对DFD中每个加工处理的说明,所使用的工具主要有:
结构化语言、判定表、判定树
6.书上例3.7和课件上的补充题,掌握使用判定表和判定树进行加工说明。
例3.7某公司对推销员的奖励办法:
(1)每周推销金额≤10000元,按预收货款是否超过50%,分别奖励推销额的6%或4%;
(2)每周推销金额>10000元,按预收货款是否超过50%,分别奖励推销额的8%或5%;
(3)对于月薪<1000元的推销员,分别另发鼓励奖300、200和500、300元。
判定表:
判定树:
可见补充题:
下面是货运收费策略:
计算铁路运费时,若收件地点在本省以内,快件每公斤1.5元,慢件每公斤1元。
若收件地点在外省,快件每公斤2元,慢件每公斤1.5元。
请分别用判定表和判定树表示。
判定表:
判定树:
7.结构化设计模型的组成。
8.概要设计的描述工具。
体系结构设计是用来确定软件结构的,其描述工具为结构图(StructureChart),简称SC图。
(1)用矩形框表示模块;
(2)用箭头或直线表示模块间的调用关系;
(3)在调用线的两旁用短箭头表示传入和传出模块的数据流。
9.数据流图的两种类型
变换型结构:
由输入、变换中心和输出三部分组成。
事务型结构:
具有在多种事务中选择执行某类事物的能力。
10.模块设计(详细设计、过程设计)的常用表达工具。
程序流程图和N-S(盒)图。
第四章面向对象和UML(UnifiedModelingLanguage)
1.面象对象的基本特征
1.抽象(Abtraction)
抽象指忽略主题中与当前目标无关的因素,以便更充分地注意与当前目标相关的因素。
2.封装(Encapsulation)
封装可用于把操作和数据包围起来,对数据的访问只通过已定义的接口来完成。
3.继承(Inheritance)
继承是父类和子类之间共享数据和方法的机制。
一个子类可以继承它的父类中的属性和操作,子类还可以定义自己的属性和操作。
在一个面向对象系统中,子类和父类之间的继承关系构成了系统的类层次结构。
4.多态(Polymorphism)
不同类的对象可以对同一消息作出响应,执行不同的处理,称为多态。
2.UML的2类图:
静态图(用例图、类图、对象图、构件图、部署图);
动态图(状态图、时序图、协作图、活动图)
UML的5种视图:
用例视图、逻辑视图、进程视图、构件视图、部署视图。
3.UML中用例图由系统边界、用例、参与者、关联组成。
它定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现。
UML特点:
统一标准、面向对象、表达能力强大、可视化。
4.类之间的关系。
关联关系、聚集关系、泛化关系、依赖关系。
1.关联关系:
(1)普通关联
最常见的关联是普通关联,两个类之间用一条直线连接,直线上写上关联名。
关联可以有方向,用小实心三角形表示。
关联的重数:
在关联的两端可写上重数,它表示该类有多少个对象可以与对方的一个对象连接。
重数的符号表示如下:
1表示1个,重数的默认值为1;
0..1表示0个或1个;
1..*表示1个或多个;
0..*表示0个或多个,可以简化为*;
2..4表示2个至4个。
(2)递归关联
递归关联是指类与自身的关联。
例如在一个公司的“员工”类中存在着“管理”递归关联。
(3)多重关联
多重关联是指两个以上类之间的关联。
(4)有序关联
一般来讲,在重数为“多”的关联端的对象是无序的;若这些对象必须有序时,则应在关联的“多”端写上{ordered}。
(5)限制关联
限制关联用于限制1:
n或m:
n的关联,将其简化为1:
1或m:
1。
(6)或关联
或关联是对二个或更多个关联附加的约束条件,其表示方法是用虚线将具有“或关系”的关联连接起来,并在虚线上方标注{or}。
(7)关联类
在UML中可以把关联定义成类,该关联的每个链都是这个类的实例;关联类也具有属性、操作和其它的关联。
2.聚集关系
聚集是一种特殊形式的关联,它表示类之间的关系是“整体与部分”的关系。
(1)共享聚集(SharedAggregation):
它的“部分”对象可以是多个任意“整体”对象的一部分。
共享聚集也用◇表示。
(2)组合聚集(CompositionAggregation,又称组装聚集):
“整体”拥有各“部分”,“整体”与“部分”共存。
如“整体”不存在了,“部分”也会随之消失。
组合聚集用实心菱形◆表示。
3.泛化关系
泛化描述类之间的“一般与特殊”关系。
普通泛化。
具有泛化关系的两个类之间,“一般类”是“特殊类”的父类,特殊类是一般类的子类。
泛化表示为一端带空心三角形△的连线,空心三角形紧挨父类。
限制泛化:
通常需要在泛化关系上附加某些约束条件,以便进一步说明泛化关系的使用方法或扩充方法,从而得到限制的泛化。
4.依赖关系
依赖表示两个类之间语义上的依赖关系。
依赖关系表示为带箭头的虚线,箭头指向独立的类。
5.顺序图和协作图的概念。
1.时序图(SequenceDiagram,又称为顺序图)
●时序图描述对象之间消息传递的时间顺序。
●时序图存在两个轴:
垂直轴表示时间,水平轴表示不同的对象。
●时序图的图形元素:
①对象(Object):
采用对象的短式标志.对象位于时序图的顶部。
②生命线(Lifeline):
用垂直虚线表示(对象生命的不活跃期)
③激活期(ActivePeriod):
用垂直细长矩形表示(接收对象收到消息时,立即开始执行活动,对象被激活了)。
④消息(Message):
用箭头表示,箭头上标明消息名。
消息可带有条件(用方括号表示)。
一个对象可以给自己发送消息。
消息传递的时间顺序为:
沿垂直方向从上向下推进。
2.协作图(CollaborationDiagram)
●协作图描述相互协作的对象间的链接关系。
(1)链接(Link):
链接表示对象之间的关系。
(关联表示类之间的关系。
链接是关联的实例,关联是链接的抽象。
)
(2)消息流(MessageFlow):
在协作图的链接线上,用消息串来描述对象间的交互。
(3)协作图的图形元素:
①对象:
用对象的短式标志。
②链接:
用直线表示。
③消息:
用箭头表示,箭头上标明消息名,在消息名前可以标明消息顺序的序列号。
6.一本书的组成有一个封面、一个目录、一个前言、若干章。
每章有若干节,每节有若干段,每段有若干句子。
每节还有0个或多个插图、0个或多个表格。
最后有一个附录。
请建立该书的类图。
7.交通工具分为空中、陆上、水上交通工具。
空中交通工具分为客机,货机,专用轻型机;陆上交通工具分为火车、汽车,火车汽车又分为客车、货车,水上交通工具有轮船,轮船分为客轮、货轮、客货混合轮。
建立交通工具的类图。
第五章需求工程和需求分析
1.软件需求的3个层次,具体说明。
业务需求:
这是客户或市场对软件的高层次目标要求。
用户需求:
即从用户实用角度来描述软件产品必须完成的任务。
功能需求:
定义软件开发人员必须实现的软件功能,以及为了有效实现这些功能而必须达到的非功能要求、约束条件等,从而使用户能完成他们的任务。
2.需求分析的步骤:
需求获取、需求建模、需求描述(编写SRS)、需求验证。
3.需求获取的常用方法。
常规的需求获取方法:
联合分析小组:
用户代表、领域专家和系统分析员
客户访谈:
充分准备,寻找共同语言;循序渐进、逐步逼近
问题分析与确认:
多个来回
用快速原型法获取需求
利用各种分析技术和方法,生成一个简化的需求规格说明;
对需求规格说明进行必要的检查和修改后,确定原型的软件结构、用户界面和数据结构等;
在现有的工具和环境的帮助下快速生成可运行的软件原型并进行测试、改进;
将原型提交给用户评估并征求用户的修改意见;
重复上述过程,直到原型得到用户的认可。
4.需求模型:
结构化需求模型的组成、面向对象需求模型的组成。
结构化需求模型的组成:
功能模型、数据模型、行为模型。
面向对象需求模型的组成:
用例模型、补充规约、术语表。
5.面向对象需求建模的步骤:
画用例图、写用例规约、描述补充规约、编写术语表、调整优化。
6.需求管理的5个特定实践
获得对需求的理解;
获取需求承诺;
管理需求变更;
在需求变更后维护对需求的双向可追溯性。
标示项目工作(包括计划和产品)与需求的不一致性。
7.需求变更的流程:
变更申请、审批、更改、更新确认。
第六章面向对象分析
1.建立面向对象分析模型的步骤。
需求理解。
定义类和对象。
标示对象的属性和操作。
标示类的结构和层次。
建立对象-关系模型。
建立对象-行为模型。
评审00A模型
2.分析类的类型:
边界类、控制类、实体类。
3.为学生选课确定边界类、控制类、实体类。
边界类:
控制类:
实体类:
4.画出顾客注册的参与类图、维护个人信息的参与类图、维护购物车的参与类图。
注册的参与类图:
维护个人信息的参与类图:
维护购物车的参与类图:
第七章面向对象设计
1.软件设计的任务:
把分析阶段产生的分析模型转换为软件设计模型。
2.软件设计包括:
数据设计、体系结构设计、接口设计、过程设计。
3.面向对象设计准则:
模块化;抽象;信息隐藏;弱耦合;强内聚;可重用
4.模块的独立性从2个方面度量:
模块本身的强内聚、模块之间的弱耦合。
模块独立性越高,则块内联系越强(高内聚),块间联系越弱(低耦合)。
5.内聚分类:
低内聚(偶然性内聚、逻辑性内聚、时间性内聚)、中内聚(过程性内聚、通讯性内聚)、高内聚(顺序性内聚、功能性内聚)。
(1)偶然内聚(CoincidentalCohesion):
●块内各组成成分在功能上是互不相关的。
(2)逻辑内聚(LogicalCohesion):
●模块内由若干个逻辑功能相似的成分组成。
(3)时间内聚(TemporalCohesion):
●所包含的成分,通常要求必须在相同的时间段内执行。
(4)过程内聚(ProceduralCohesion)
●内所包含的一组任务必须以某种特定的次序执行。
(5)通信内聚(CommunicationalCohesion):
●块内部的各个成分都使用相同的输入数据,或产生相同的输出数据,它们靠公用数据联系在一起,故称为通信内聚模块。
(6)顺序内聚(SequentialCohesion):
●中个组成成分是顺序执行的,通常情况下上一个组成成分的输出就是下一个组成成分的输入。
(7)功能内聚(FunctionalCohesion):
●所有组成成分结合在一起完成一个单一的功能(模块所有成分共同完成一个功能,缺一不可)。
6.耦合分类:
弱耦合(非直接耦合、数据耦合、特征耦合)、中耦合(控制耦合)、较强耦合(外部耦合、公共耦合)、强耦合(内容耦合)。
(1)非直接耦合(No-directCoupling):
●两个模块之间没有直接的信息传递,它们之间的联系完全是通过上层模块的控制和调用来实现的。
(2)数据耦合(DataCoupling):
●两个模块之间传递的是简单变量。
数据耦合相当于C语言中函数之间的值传递。
(3)特征耦合(又称标记耦合,StampCoupling):
●两个模块之间传递的是数据结构。
特征耦合相当于C语言中函数之间的地址传递,传递的是指针、数组名、记录名等。
(4)控制耦合(ControlCoupling):
●两个模块之间传递的不是一般的数据,而是用作控制信号的开关值或标志量。
(5)外部耦合(ExternalCoupling):
●一组模块都访问同一个全局简单变量。
(6)公共耦合(CommonCoupling):
●一组模块都访问同一个全局数据结构。
公共耦合的复杂程度随耦合模块个数的增加而增加。
(7)内容耦合(ContentCoupling):
●一个模块直接调用另一个模块中的数据;或者一个模块直接转移到另一个模块中去(不通过正常入口转到另一模块内部),就称它们之间的耦合为内容耦合。
内容耦合往往出现在汇编语言程序设计中。