软工期末复习提纲.docx
- 文档编号:18325737
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:26
- 大小:216.65KB
软工期末复习提纲.docx
《软工期末复习提纲.docx》由会员分享,可在线阅读,更多相关《软工期末复习提纲.docx(26页珍藏版)》请在冰点文库上搜索。
软工期末复习提纲
第1章软件工程概述
什么是软件
◆软件的定义:
✧软件是计算机程序、规程以及运行计算机系统可能需要的相关文档和数据。
✧程序=程序+文档。
✧软件是包括程序、数据及其相关文档的完整集合。
软件的特点
◆软件是一种逻辑实体,不是类似计算机硬件那样的物理实体,具有抽象性。
◆软件的生产与硬件不同:
无明显的制造过程;通过软件工程师的智力劳动,把知识和技术转化成信息的一种产品;复杂的过程;等。
◆不存在硬件那样的机械磨损和老化问题,但存在软件退化问题
◆开发和运行常常受到计算机系统的限制。
◆软件的开发至今尚未完全摆脱手工艺的开发方式,大部分软件是“定制”的。
◆软件是复杂的;感性认识的复杂性;理性认识的复杂性。
◆研制成本高。
◆投入运行还涉及许多社会因素。
什么是软件危机
所谓软件危机就是计算机软件在开发和维护过程中所遇到的一系列严重问题
其产生原因和解决途径是什么
◆原因:
软件本身存在的复杂性。
与软件开发所使用的技术和方法有关。
◆解决途径:
对程序设计方法进行研究;引入软件工程。
第2章软件生命周期模型
什么是软件生命周期?
软件生命周期模型有哪些种?
◆软件生命周期是指软件产品从考虑其概念开始,到该软件产品不再使用为止的整个时期。
6个基本活动为:
✧制定计划
✧需求分析与定义
✧软件设计
✧程序编写
✧软件测试
✧运行/维护
◆瀑布模型
◆V模型和W模型
◆原型方法(prototyping)
◆演化模型
◆增量模型
◆螺旋模型
◆喷泉模型
◆构件组装模型
◆快速应用开发模型
◆RUP
◆敏捷模型
第3章系统需求分析及可行性分析
什么是可行性分析
◆可行性分析
✧指对项目的范围、时间限制、问题域的关键问题(即业务背景)以及该软件开发所必需的技术方案进行论证。
◆可行性分析主要集中在以下四个方面:
✧经济可行性分析
✧技术可行分析
✧法律可行性分析
✧实施方案的选择
可行性分析的其目的是什么
◆目的就是在该项目进入实际的软件开发过程之前用最小的代价论证该项目是否能做,是否值得做。
第4章软件需求分析
软件需求分析的目标和任务是什么?
◆需求分析是一项必须的软件工程活动。
它在系统需求分析和软件设计之间起到桥梁的作用:
✧它使得软件开发人员在系统分析的基础上深入描述软件的功能和性能、指明软件和其他系统元素的接口,建立软件必须满足的约束条件。
✧它允许软件开发人员对关键问题进行细化,并构建相应的分析模型:
数据、功能和行为模型。
✧分析模型成为设计模型的基础,需求规格说明书也为软件测试人员和用户提供了软件质量评估的依据。
✧它能准确表达用户对系统的各项要求。
◆其任务是要准确地定义新系统的目标。
回答系统必须“做什么”的问题并编制需求规格说明书。
◆作为目标系统的参考,需求分析的任务就是借助于(业务)系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。
什么是数据建模?
什么是功能建模?
什么是行为建模?
第5章结构化需求分析
结构化需求分析的工具有哪些?
◆数据建模:
E-R图
◆功能建模:
数据流图
◆系统行为建模:
状态图、Petri网
◆数据词典(DD,DataDictionary)
会使用数据流图对系统进行功能建模?
◆数据流图是描述信息流和数据从输入移动到输出时被系统的功能变换的图形化技术。
是软件需求分析中功能建模的工具。
会使用状态图对系统进行行为建模?
◆状态迁移图可以用来描述系统或对象的状态,以及导致系统或对象的状态改变的事件,从而描述系统的行为。
会撰写系统数据字典?
◆数据词典(DD,DataDictionary):
对于数据流图中出现的所有被命名的图形元素加以定义,使得每一个图形元素的名字都有一个确切的解释。
◆其定义应是严密的、精确的,无二义性的,它由以下内容组成:
✧数据流词条
✧数据元素词条
✧数据文件词条
✧加工词条
✧外部实体
第6章软件设计
软件设计的目的是什么?
软件设计都要对哪些内容进行设计?
◆首先,设计通常是开发活动的第一步。
◆设计定义为:
“应用各种技术和原理,对设备、过程或系统做出足够详细的定义,使之能够在物理上得以实现”。
◆软件设计是软件工程过程中的技术核心,也是后续开发步骤及软件维护工作的基础。
◆软件设计的最基本目标就是回答“概括地描述系统如何实现用户所提出来的功能和性能等方面的需求”
◆软件设计的最终目标是要取得最佳方案。
◆“最佳”是指在所有候选方案中,就节省开发费用,降低资源消耗,缩短开发时间的条件,选择能够赢得较高的生产率、较高的可靠性和可维护性的方案。
概要设计的内容?
详细设计的内容?
◆概要设计步骤
✧制定设计规范
✧软件系统结构的总体设计
✧处理方式设计
✧数据结构设计
✧可靠性设计
✧编写概要设计阶段的文档
✧概要设计文档
◆详细设计的步骤
✧确定软件各个功能模块内的算法以及各功能模块的内部数据组织。
✧选定某种表达形式来描述各种算法。
✧进行详细设计的评审。
模块的耦合与内聚?
◆内聚是模块功能强度的度量。
一个模块内部各个元素之间的联系越紧密,则它的内聚性就越高,相对地,它与其他模块之间的耦合性就会减低,而模块独立性就越强。
◆耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。
模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱。
第7章结构化设计方法
结构化程序设计的主要思想是什么?
◆结构化设计方法依据需求分析的结果“数据流图”推导出软件的系统功能结构图。
其要点是:
✧建立数据流的类型。
✧指明数据流的边界。
✧将数据流图映射到程序结构。
✧用“因子化”方法定义控制的层次结构。
✧用设计测量和一些启发式规则对结构进行细化
什么是变换型系统结构?
如何进行变换映射?
◆变换型数据处理问题的工作过程大致分为三步,
◆取得数据
◆变换数据
◆给出数据
相应于取得数据,变换数据,给出数据,系统的结构图由输入、中心变换和输出三部分组成。
◆
◆运用变换映射方法建立初始的系统结构图,然后进行多次改进,得到系统的最终结构图。
✧复审并评估分析模型;
✧复审并重画数据流图;
✧确定数据流图中的变换和事务特征;
✧区分输入流、输出流和中心变换部分,即标明数据流的边界;
✧进行一级“因子化”分解,设计顶层和第一层模块;
✧进行二级“因子化”分解,设计中、下层模块;
✧利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。
什么是事物型系统结构?
如何进行事物映射?
◆事务型数据处理问题的工作机理是接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。
◆可以引发一个或多个处理作业数据流,就叫做事务。
事务是最小的工作单元,不论成功与否都作为一个整体进行工作。
◆事务型系统结构图中由以下模块:
✧事务处理中心:
负责任务的分派;
✧事务处理加工:
完成具体的处理;
◆事务映射也从分析数据流图开始,自顶向下,逐步分解,建立事务型系统结构图。
✧复审系统分析模型
✧重画数据流图
✧确定是否具有事务流特征
✧确定事务中心及流特征
✧进行事务映射
✧因子化分解和细化
✧优化系统结构
会将数据流图映射为系统的结构图?
了解结构图的含义?
详细设计的工具有哪些?
程序流程图、N-S图、PAD图、判定表、PDL
◆表达详细设计规格说明的工具叫做详细设计工具,它可以分为三类:
✧图形工具
✧表格工具
✧语言工具
◆具体工具有
✧程序流程图
✧N-S图
✧PAD
✧判定表
✧PDL
第8章面向对象基础
了解面向对象的主要思想?
掌握面向对象中关键概念,包括:
对象、关联、继承、聚合,给出应用描述,会抽象出类,并画出类与类之间的各种关联
掌握面向对象中的基本原则,包括:
分类、封装、通信、多态等
掌握什么是UML,UML中的扩展机制有哪些?
能看懂UML中各种图的含义,并掌握UML中各种图的画法
,重点掌握:
用例图、类图、对象图、顺序图、协作图、状态图、包图等。
第9章面向对象分析
什么是面向对象的分析?
◆面向对象分析(Object-OrientedAnalysis,简称OOA)就是运用面向对象的方法进行系统分析,强调运用面向对象方法,对问题域和系统职责进行分析和理解,找出描述问题域及系统职责所需的对象,定义对象的属性、服务以及它们之间的关系,目标是建立一个符合问题域、满足用户需求的OOA模型。
✧问题域(problemdomain):
被开发系统的应用领域,即在现实世界中由这个系统进行处理的业务范围
✧系统职责(systemresponsibilities),所开发的系统应该具备的职能
面向对象的分析中都要做哪些工作?
◆利用用例以及用例图来捕获和描述用户的需求,从而建立系统的功能需求模型。
为创建需求模型,首先要从业务需求描述出发,识别参与者和使用场景;对场景进行汇总、分类和抽象,形成用例;确定参与者和用例、用例和用例之间的关系,形成用例模型。
◆从业务需求描述和用例描述中提取“关键概念”,形成领域模型。
◆从用例出发,将系统看作一个黑盒子,识别出参与者和系统交互的系统事件,在系统顺序图中进行描述,并进一步识别出系统操作。
◆从系统顺序图和领域模型出发,建立系统操作契约,描述响应系统事件的系统操作执行后对系统状态的影响,从而回答系统“做什么”的问题。
此处的系统状态变化指的是领域模型中概念的创建和删除,概念属性的修改以及概念之间关联的建立和删除。
创建用例图
用例描述文本
用例编号:
每一个用例一个唯一的编号,方便在文档中索引。
用例名称:
(状语+)动词+(定语+)宾语,体现参与者的目标。
范围:
应用的软件系统范围
级别:
企业目标级别/用户目标级别/子系统目标级别
主要参与者:
调用系统服务来完成目标的主要参与者
项目相关人员及其兴趣:
用户应包含满足所有相关人员兴趣的内容
前置条件:
规定了在用例中的一个场景开始之前必须为“真”的条件。
后置条件:
规定了用例成功结束后必须为“真”的条件。
主要成功场景:
(基本路径)描述了能够满足项目相关人员兴趣的一个典型的成功路径。
不包括条件和分支
1.
……
n.
扩展(或替代流程):
(备选路径)说明了基本路径以外的所有其他场景或分支
*a.
描述任何一个步骤都有可能发生的条件,前边加*
5a.
对基本路径中某个步骤的扩展描述,前边加基本路径编号
特殊需求:
与用例相关的非功能性需求
技术与数据的变化列表:
输入输出方式上的变化以及数据格式的变化。
发生频率:
用例执行的频率。
待解决的问题:
不清楚的、尚待解决的问题可集中在此进行罗列
创建领域模型
◆领域模型就是用来描述业务领域重要概念及其相互关系的模型,一般用UML的类图来表达,其中概念用类来表示,概念之间的关系用关联、继承、聚合来表示。
◆理解领域模型对理解系统需求至关重要,领域模型的创建步骤如下:
✧第1步,找出当前需求中的候选概念类;
✧第2步,在领域模型中描述这些概念类。
用问题域中的词汇对概念类进行命名,将与当前需求无关的概念类排除在外。
✧第3步,在概念类之间添加必要的关联来记录那些需要保存记忆的关系。
✧第4步,在概念类中添加用来实现需求的必要属性。
绘制交互图
创建操作契约
◆系统操作:
处理系统事件的操作;一般情况下与系统事件具有相同的名字和参数;
◆操作契约是为系统操作而定义的,描述系统操作执行的结果,模板如下表所示:
操作:
操作以及参数的名称
交叉引用:
(可选择)可能发生此操作的用例
前置条件:
在操作执行前,领域模型中系统或对象状态的值得注意的假
设,他们在此操作的逻辑内不会得到测试,而被假设为真,
同时,他们并非无关紧要,而应让读者了解此假设的存在。
后置条件:
操作完成后领域模型中对象的状态。
掌握给定应用描述中用例图的创建
掌握领域模型的建立方法
掌握采用顺序图或协作图刻画系统动态行为
掌握创建系统操作契约方法
第10章面向对象设计
什么是面向对象的设计?
◆面向对象的设计就是在OOA模型基础上运用面向对象方法进行系统设计,目标是产生一个符合具体实现条件的面向对象设计(OOD)模型。
◆与实现条件有关的因素有:
图形用户界面、硬件、操作系统、网络、数据库管理系统、编程语言和可复用的类库等。
◆OOD的成果:
✧以UML包图等表示的软件体系结构
✧以交互图和类图表示的用例实现
✧针对复杂对象的状态图
✧用以描述流程化处理过程的活动图等
层次化模型都包括哪些层?
各自的作用是什么?
◆用户界面类实现了系统的主要用户界面元素。
◆业务/领域类实现与业务领域相关的概念,源于领域模型。
◆控制器/处理类作为完成用例任务的责任承担者,用于协调、控制其他类共同完成用例规定的功能或行为。
◆持久类把永久存储、检索、更新和删除对象的能力封装起来,使底层的存储技术不暴露出来。
◆系统类为应用提供操作系统相关的功能,通过把特定于操作系统的特性包装起来,使软件与操作系统分离,增加应用的可移植性。
了解面向对象设计的原则有哪些?
◆10.3.1单一职责原则SRP(SingleResponsibilityPrinciple)
◆10.3.2开闭原则OCP(OpenClosedPrinciple)
◆10.3.3里氏替换原则LSP(LiskovSubstitutionPrinciple)
◆10.3.4依赖倒置原则DIP(DependencyInversionPrinciple)
◆10.3.5接口隔离原则ISP(InterfaceSegregationPrinciple)
◆10.3.6组合/聚合复用原则(Composite/AggregationReusePrinciple,CARP)
◆10.3.7迪米特法则(LawofDemeter,LoD)
单一职责原则SRP(SingleResponsibilityPrinciple)
◆就一个类而言,应该仅有一个引起它变化的原因。
开闭原则OCP(OpenClosedPrinciple)
◆软件实体(类、模块、函数等)应该是可以扩展、但是不可修改的。
✧当需求改变时,可以对模块进行扩展,以满足需求的变化。
✧对模块行为进行扩展时,不必改动客户端模块的源代码或者二进制代码。
◆符合OCP原则的程序只通过增加代码来变化,而不是通过更改现有代码来变化。
◆实现OCP的关键是使用抽象来识别不同类之间的共性和变化点,利用封装技术对变化点进行封装。
里氏替换原则LSP(LiskovSubstitutionPrinciple)
◆子类应当可以替换父类并出现在父类能够出现的任何地方。
依赖倒置原则DIP(DependencyInversionPrinciple)
◆a.高层模块不应该依赖于低层模块。
二者都应该依赖于抽象。
◆b.抽象不应该依赖于细节。
细节应该依赖于抽象。
✧DIP揭示启发式规则是:
依赖于抽象,而不是具体的类。
也就是说,程序中所有的依赖关系应该终止于抽象类或者接口。
✧应用程序中所编写的大多数具体类都是不稳定的。
通过把它们隐藏在抽象接口的后面,可以隔离它们的不稳定性。
接口隔离原则ISP(InterfaceSegregationPrinciple)
◆采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。
组合/聚合复用原则(Composite/AggregationReusePrinciple,CARP)
◆在一个新对象里面使用一些已有对象,使之成为新对象的一部分;新对象通过向已有对象委托(delegate)一部分责任而达到复用已有对象的目的。
◆面向对象设计中有两种实现复用的手段:
一种是继承,一种是组合/聚合。
CARP原则告诉我们:
实现复用时应首先使用组合/聚合,其次才考虑继承。
✧has-a:
组合/聚合
✧Is-a:
继承
迪米特法则(LawofDemeter,LoD)
◆最少知识原则:
一个对象应当尽可能少的了解其它对象。
面向对象的设计中类职责分配模式有哪几种?
信息专家模式
◆给对象分配职责的通用原则:
◆将职责分配给拥有履行职责所必需信息的类—即信息专家。
换言之,对象处理自己拥有信息的事务。
◆根据信息专家模式,应该找到拥有履行职责所必须的信息的类,选取类的方法:
✧如果在设计模型中存在相关的类,先到设计模型中查看;
✧如果在设计模型中不存在相关的类,则到领域模型中查看,试着应用或扩展领域模型,得出相应的设计类。
◆职责的实现需要信息,而信息往往分布在不同的对象中,一个任务可能需要多个对象(信息专家)协作来完成。
创建者模式
◆谁应该负责产生类的实例?
◆如果符合下面的一个或者多个条件,则可将创建类A实例的职责分配给类B(B创建A)。
✧B聚合(aggregate)或包含(contain)对象A;
✧B记录(record)对象A;
✧B密切使用对象A;
✧B拥有创建对象A所需要的初始化数据(B是创建对象A的信息专家)。
控制器模式
◆哪个非用户接口类应该负责处理一个输入系统事件(一个系统输入事件是由一个外部参与者产生的事件)?
◆把接收或者处理系统事件的职责分配给这样一个类:
✧它代表整个系统,称为外观(facade)控制器;
✧它代表一个发生系统事件的用例场景,这个类通常命名为“<用例名>控制器”,称为用例控制器或者会话控制器。
✧在相同的用例场景中使用同一个控制器类处理所有的系统事件;
✧一次会话是与一个参与者进行交谈的一个实例。
会使用面向对象设计方法进行类的设计,并给出某个应用的类图
能够使用协作图对绘制类之间的协作过程,并从中抽象出类及类的属性与操作
第11章软件实现
源程序文档化包括哪几个方面?
其作用是什么?
什么是面向对象的分析?
◆标识符的命名
◆程序的注释
◆源程序布局
程序效率包括哪两方面?
讨论效率的准则是什么?
◆程序的效率是指程序的执行速度及程序所需占用的内存的存储空间。
程序效率的几条准则为:
✧效率是一个性能要求,应当在需求分析阶段确定效率方面的要求;
✧效率是靠好的设计来提高的;
✧程序的效率与程序的简单性相关,但是不要以牺牲程序的清晰性和可读性来提高软件的效率。
第12章软件测试
什么是软件测试?
软件测试的目的是什么?
测试中最关键工作是什么?
◆软件测试是为了发现错误而执行程序的过程。
◆软件测试在软件生存期中横跨两个阶段:
✧单元测试
✧集成测试
◆软件测试的目的:
✧测试是程序的执行过程,目的在于发现错误,而不是证明软件的正确
✧一个好的测试用例在于能发现至今未发现的错误
✧一个成功的测试是发现了至今未发现的错误的测试。
◆软件测试的原则:
✧应当尽早地和不断地进行软件测试
✧测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成
✧程序员应避免测试自己的程序
✧在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
✧充分注意测试中的群集现象
✧严格执行测试计划,排除测试的随意性
✧应当对每一个测试结果做全面检查
✧妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。
软件测试步骤有哪些?
每个步骤要进行的主要测试对象和依据是什么?
测试步骤
测试对象
测试依据
单元测试
程序模块
详细设计说明书、源代码
集成测试
已测试的模块
系统概要设计说明书
确认测试
已集成的软件
系统需求规格说明书
系统测试
已确认的软件
系统其他元素
在每种测试中,测试流程是什么?
◆理解测试需求
◆编写测试计划
◆设计测试方案
◆开发测试用例
◆执行软件测试
◆评估测试效果
◆编写测试文档
主要软件测试技术有哪两种?
白盒测试
黑盒测试
什么是白盒测试?
白盒测试选择测试用例的方法有哪些?
◆白盒测试:
已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格的要求。
指根据软件产品的内部工作过程,在计算机上进行测试,以证实每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。
又称为结构测试、逻辑驱动测试或基于程序的测试。
◆基本白盒测试技术:
✧逻辑覆盖
✧基本路径测试
✧控制结构测试
逻辑覆盖都包括哪些覆盖类别,它们的强度如何?
◆逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的一种白盒测试技术。
◆可分为:
✧语句覆盖
✧判定覆盖
✧判定-条件覆盖
✧条件组合覆盖
✧路径覆盖
什么是黑盒测试?
黑盒测试选择测试用例的方法有哪些?
◆黑盒测试:
已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要。
在不考虑程序内部结构和内部特征的情况下,根据软件产品的功能设计规格说明,在计算机上进行测试,以证实每个实现了的功能是否符合要求。
又叫做功能测试、数据驱动测试或基于规格说明的测试。
✧等价类划分
✧边界值分析
✧错误推测法
✧因果图法
会使用等价类划分的方法为程序设计测试用例
◆所谓等价类是指某个输入域的子集合,在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。
并合理地假定:
测试某等价类的代表值就等价于对这一类其它值的测试。
◆采用等价类方法测试系统步骤:
✧划分等价类
✧确定测试用例
面向对象测试与普通测试的主要区别
◆传统的测试计算机软件的策略是从“小型测试”开始,逐步走向“大型测试”
◆首先从单元测试开始,然后逐步进入集成测试,最后是确认和系统测试
◆面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的逐步将开发的模块搭建在一起进行测试的方法已经不可能
◆面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果
什么是软件调试?
与软件测试有什么区别?
其主要目的是什么?
◆软件测试的目的是尽可能多地发现软件中的错误,但进一步诊断和改正程序中潜在的错误,则是调试的任务。
什么是软件的可用性?
什么是软件的可靠性?
◆可用性:
指程序在给定的时间点,按照规格说明书的规定,成功运行的概率。
◆可靠性:
指的是程序在给定的时间间隔内,按照规格说明书的规定,成功运行的概率。
◆可靠性和可用性之间的主要差别是可靠性意味着在0-t这段时间间隔内系统没有失效,而可用性只意味着在时刻t,系统是正常运行的。
第13章
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工期 复习 提纲