软件工程复习1.docx

上传人:b****5 文档编号:11552466 上传时间:2023-03-19 格式:DOCX 页数:26 大小:598.98KB
下载 相关 举报
软件工程复习1.docx_第1页
第1页 / 共26页
软件工程复习1.docx_第2页
第2页 / 共26页
软件工程复习1.docx_第3页
第3页 / 共26页
软件工程复习1.docx_第4页
第4页 / 共26页
软件工程复习1.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

软件工程复习1.docx

《软件工程复习1.docx》由会员分享,可在线阅读,更多相关《软件工程复习1.docx(26页珍藏版)》请在冰豆网上搜索。

软件工程复习1.docx

软件工程复习1

软件工程复习

简答:

1.验证需求的方法:

一致性,现实性,完整性,有效性。

(重要)

一致性:

所有需求必须是一致的,任何一条需求不能和其他需求相互矛盾。

完整性:

需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。

现实性:

指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的,对硬件技术的进步可以做些预测,对软件技术的进步则很难做出预测,只能从现有技术水平出发判断需求的现实性。

有效性:

必须证明需求是正确有效的,确实能解决用户面对的问题

2.瀑布模型的缺点,优点即缺点,文件驱动

瀑布模型:

需求分析验证-规格说明验证-设计验证-编码测试-综合测试-维护

瀑布模型有许多优点,可强迫开发人员采用规范的方法,严格的规定了每个阶段必须提交的文档,要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

各阶段产生的文档是维护软件产品时必不可少的,遵循瀑布模型的文档约束,将使软件维护变得容易。

瀑布模型的成功很大程度上是由于它基本上是一种文档驱动的模型。

但是这也是它的一个主要缺点,在可运行的产品交付给用户运行之前,用户只能通过文档来了解产品是什么样的。

总之瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出软件产品不能真正满足用户的需要。

3.耦合度

耦合度(衡量不同模块彼此间相互依赖的紧密程度)内聚性也称块内联系,即一个模块内部各个元素彼此结合的紧密程度的度量。

数据耦合低控制耦合中公共环境耦合中内容耦合高

4.软件开发生命周期

软件生命周期:

软件定义,软件开发和软件维护三个时期组成

定义期:

问题定义->可行性研究->需求分析

软件开发期:

系统设计包括总体设计和详细设计

系统实现包括编码和测试

软件维护期:

每一次维护本质上是一次压缩和简化了的定义和开发过程

5.三个模型对比(之间的关系)数据流图在面向对象中用的较少(功能模型)

功能模型做什么,动态模型规定什么时候,对象模型定义了做事情的实体

(1)针对每个类建立的动态模型,描述了类实例的生命周期或运行周期

(2)状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,他们同时与类图中的服务相对应。

(3)功能模型中的处理(或用例,下同)对应于对象模型中的类所提供的服务。

通常复杂的处理对应于复杂对象提供的服务,简单的处理对应于更基本的对象提供的服务。

有时一个处理对应多个服务,也有一个服务对应多个处理。

(4)数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。

(5)数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。

(6)用例图中的行为者,可能是对象模型中的对象。

(7)功能模型中的处理(或用例)可能产生动态模型中的事件。

(8)对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。

大题

1.数据流图

2.对象模型,功能模型,动态模型(对象图不考,考类图)

类图:

3.黑盒等价类边界划分

 

第二章习题2.3

2.为方便储户,某银行拟开发计算机储蓄系统,储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。

写出问题定义并分析此系统的可行性。

3.为方便旅客,某航空公司拟开发一个机票预订系统。

旅行社把预订机票的旅客信息(姓名,性别,工作单位,身份证号码,旅行时间,旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客。

写出问题定义并分析此系统的可行性。

 

第一章

软件工程:

是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。

计算机软件=程序+数据+文档资料

软件分类:

系统软件和应用软件

软件特点:

和硬件相比,软件是逻辑产品,不是有型的物质;软件产品的生产主要是研制;软件不会磨损;软件大多数需要定制。

软件工程的产生背景:

软件危机。

软件危机(定义:

严重问题)

(危机表现:

开发成本和进度估计不准,用户对已经完成的系统不满意,产品质量靠不住,不可维护,没有适当的文档,成本上升,生产率提高的速度太慢)

软件危机产生原因:

不断变化的用户需求的代价

软件工程典型定义:

软件工程是指导计算机软件开发和维护的工程学科。

采用工程的概念、原理、技术和方法来开发软件,把经过时间考验证明是正确的管理技术和当前能够得到的最好技术方法结合起来,这就是软件工程。

方法学:

软件生命周期全过程中使用的一整套技术方法的集合。

三要素:

软件开发方法,软件工具,软件过程。

常见开发方法:

1、结构化开发方法,是一种面向数据流的开发方法。

指导思想是自顶向下,逐步求精。

基本原则是功能的分解与抽象。

(包括结构化分析(完成需求分析),结构化设计(实现系统的概要设计),结构化实现(详细设计))

2、面向对象开发方法,以对象作为基本的元素,统一建模语言UML,为面向对象的标准建模语言。

(包括面向对象设计,面向对象分析,面向对象实现)

软件工具:

一般是指为了支持软件人员开发和维护活动而使用的软件。

包括项目估算工具,需求分析工具,设计工具,编码工具,测试工具和维护工具等。

软件生命周期:

软件定义,软件开发和软件维护三个时期组成。

定义期:

问题定义->可行性研究->需求分析

软件开发期:

系统设计包括总体设计和详细设计

系统实现包括编码和测试

软件维护期:

每一次维护本质上是一次压缩和简化了的定义和开发过程

生命周期(软件过程)模型:

(有瀑布模型,增量模型,螺旋模型,喷泉模型,变换模型和基于知识的模型等)

瀑布模型:

开发设计->需求分析->概要设计->详细设计->编码->测试->维护。

瀑布模型是一种整体开发模型,特点:

阶段间有顺序性和依赖性,推迟实现,质量保证的观点。

缺点正式它的优点。

而增量模型是非整体开发模型。

模型具有较大的灵活性,适合于软件需求不明确,设计方案有一定风险的软件项目。

部分功能,可交付的,在可交付的基础上不断的丰富功能。

原型模型:

部分功能,部分特征实现。

遵循瀑布模型。

螺旋模型将瀑布模型与增量模型结合起来,增加了风险分析(开发过程分为几个螺旋周期)风险驱动。

喷泉模型:

适合OO开发。

特点:

自迭代,相邻的阶段是重叠。

统一过程:

RUP

 

第二章可行性研究

从以下三个方面分析研究每种解决方法的可行性:

技术可行性(开发的风险,资源的有效性,技术),经济可行性(成本-效益分析,长期公司经营策略,开发所需的成本和资源等),操作可行性(系统的操作方式在目标组织内是否行得通),(社会可行性(关注以上三个方面))

主要产出:

愿景文档

主要工具:

系统流程图、数据流图

系统流程图:

(可用于可行性研究和需求分析)

含义:

概括的形式->描述高层逻辑模型,通过概要的设计->变成所建议系统的物理模型。

从黑盒的角度看待系统以及系统的边界。

针对已有的系统,现有的系统。

系统流程图用图形符号表示系统中的各元素(如人工处理、数据处理、数据库、文件等),是描述物理系统的工具,表达了系统各元素的信息流动情况。

表示法(基本符号):

实例:

数据流图:

重点

数据流从输入到输出的变换过程。

主要符号:

输入输出、加工、数据存储(通过数据字典描述)、数据流

DFD符号:

例子:

数据字典:

(分析阶段的工具)

内容:

数据流,数据存储,数据的起点和终点,数据处理

定义数据的方法:

顺序、选择、循环、可选

经济效益分析:

一种说法:

系统的经济效益等于因使用新的系统而增加的收入加上使用新的系统可以节省的运行费用。

另一种说法:

较少运行的费用和增加的收入。

可行性研究文档:

引言……所建议系统的操作可行性分析,社会因素可行性分析等。

若值得开发,下一步制定项目开发计划(费用,时间,进度,人员组织硬件设备的配置等进行说明和规划)。

第三章结构化需求分析

需求分析(任务是准确定义新系统目标,指出“系统做什么”)是指开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。

任务:

问题识别:

双方确定问题的综合需求:

功能需求,性能需求,环境需求,用户界面需求,将来可能提出的要求。

分析综合,导出软件的逻辑模型。

描述逻辑模型:

¯数据流图(DFD)(建立功能模型)

¯数据字典(DD)

¯实体-联系图(E-R图)(建立数据模型)

¯IPO图(Input-Process-Output)输入,处理,输出

一个例子:

状态图:

建立行为模型一个例子:

层次方框图

Warnier图

Pad图(也可用于此)

结构化需求分析方法(面向数据流自顶向下逐步求精进行需求分析)中的模型

Â理解描述问题信息域的数据模型(E-R模型)

Â定义软件满足需求的功能模型(数据流图)

Â描述软件动态特征的行为模型(状态图)

Â能够支持3种模型细化的层次表达方式

 

过程:

获取需求,验证需求,形成文档。

产出:

需求规格说明书(SRS)

验证需求的方法:

一致性,现实性,完整性,有效性。

(重要)

一致性:

所有需求必须是一致的,任何一条需求不能和其他需求相互矛盾。

完整性:

需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。

现实性:

指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的,对硬件技术的进步可以做些预测,对软件技术的进步则很难做出预测,只能从现有技术水平出发判断需求的现实性。

有效性:

必须证明需求是正确有效的,确实能解决用户面对的问题

第四章总体设计

基本目的:

“概括的说,系统应该如何实现”

基本任务:

设计软件系统结构(以模块为基础),数据结构的设计(逐步细化),数据库的设计(包括概念设计,逻辑设计,物理设计)

功能分解的原则:

模块化原则

主要流程:

功能分解,设计软件结构,设计数据库,测试计划(之后书写文档,审查和复审)

软件设计的概念和原理:

模块化,抽象,信息隐蔽及局部化,模块独立(每个模块只完成独立的子功能,与其他模块的联系最少且接口简单)。

如何衡量软件的独立性(衡量模块的好的程度的两个标准):

耦合度(衡量不同模块彼此间相互依赖的紧密程度)和内聚度(衡量一个模块内部各个元素彼此结合的紧密程度)。

高内聚,低耦合->模块好若冲突,首先考虑耦合。

耦合度内聚性也称块内联系,即一个模块内部各个元素彼此结合的紧密程度的度量。

内聚类型:

偶然,逻辑,时间,通信,顺序,功能。

软件结构图:

主要内容为模块,模块的控制关系,模块间的信息传递。

软件系统的模块层次结构。

反应整个系统的功能实现。

即将来程序的控制层次体系。

(sc)

结构图的形态特征:

深度,宽度,扇出。

描绘软件结构的图形工具:

层次图,HIPO图,结构图

HIPO图:

结构图:

 

第五章详细设计

指出“具体地说,程序是如何实现的”

任务:

设计出程序的“蓝图”

结构化程序设计技术是实现目标的关键技术,也是详细设计的逻辑基础。

结构程序设计:

自顶向下逐步求精的设计方法,设计单入口单出口的程序模块,只使用三种基本的程序结构即顺序,选择,循环。

(另外两种控制结构为直到型结构和多分支结构)

详细设计的过程:

人机交互的设计,软件结构的深度设计。

人机界面设计:

设计问题,设计过程,人机界面设计指南(一般交互指南,信息显示指南,数据输入指南)

过程设计的工具:

Â4.1程序流程图(PFD)即程序框图,广泛用于描述过程设计

Â4.2盒图(N-S图)不违背结构化程序设计精神,没有箭头,不允许随意转移控制

Â4.3判定表

Â4.4判定树

Â4.5问题分析图(PAD图)是一种算法描述工具,由左往右展开的二维树形结构,控制流程为自上而下从左到右的执行。

Â4.6过程设计语言(PDL)在伪码基础上扩充模块的定义与调用、数据定义和输入输出。

控制结构与伪码相同,是一种描述模块算法设计和处理细节的语言。

Jackson程序设计方法:

面向数据结构

Â面向数据结构的设计方法,用数据结构作为程序设计的基础。

Â这种方法的最终目标是得出对程序处理过程的描述,最适合于在详细设计阶段使用,也就是说,在完成了软件结构设计之后,可以使用面向数据结构的方法来设计每个模块的处理过程。

Â使用面向数据结构的设计方法,首先需要分析确定数据结构,并且用适当的工具清晰地描述数据结构。

Jackson图:

顺序结构,选择结构,重复结构

Jackson程序设计方法的步骤:

Â

(1)分析并确定输入数据结构和输出数据结构的逻辑结构,并用Jackson图描述这些数据结构。

Â

(2)找出输入和输出数据结构有对应关系的数据单元。

Â(3)使用下面三条规则从描述数据结构的Jackson图导出描述程序结构Jackson图。

¯为有对应关系的数据单元在程序结构的相应层次画一个处理框。

¯对输入数据结构中剩余的数据单元按它们所在的层次在程序结构中画出相应的处理框。

¯对输出数据结构中剩余的数据单元按它们所在的层次在程序结构中画出相应的处理框。

Â(4)列出所有的操作和条件并把它们分配到程序结构的适当位置。

Â(5)用伪码表示程序。

程序复杂程度定量度量方法:

McCabe方法,Halstead方法

 

第六章实现-编码

<实现>过程:

编码+测试

程序设计语言的分类:

机器语言;汇编语言;高级语言;第四代语言

代码编写原则:

重复利用已有资源,采用良好控制结构,精心设计数据结构,选择合适的算法,编程风格

编程过程:

结对编程,极限编程。

软件配置管理(SCM):

对软件系统中的多重版本实施系统管理,全面记载系统开发的历史过程。

利用SCM进行开发的基本流程如下:

从仓库中检出代码到工作目录;对工作目录中的代码进行修改;将修改的内容提交到仓库。

第七章实现-测试

软件测试的定义:

定义1:

测试是为了发现程序中的错误而执行程序的过程

定义2:

测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计的一批测试用例,并利用这些测试用例运行程序以发现错误的过程。

测试方法:

白盒测试;黑盒测试

测试步骤:

单元测试->集成测试->确认测试->系统测试

单元测试的考虑:

模块接口,局部数据结构,重要的执行通路,出错处理通路,以上各个方面的边界条件。

过程:

代码审查,测试软件

集成测试:

渐增式集成,非渐增式集成,自顶向下的结合,自底向上的结合,各种优先集成方法和混合法。

验收测试:

范围,可能结果,软件配置复查。

设计测试方案:

具体测试目的,测试数据,预期结果。

白盒技术:

逻辑控制结构

结构测试,被测对象基本上是源程序,以程序的内部逻辑结构为基础设计测试用例。

方法:

逻辑覆盖(语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖,路径覆盖)、循环覆盖、基本路径测试

逻辑覆盖:

循环覆盖:

单循环,嵌套循环

基本路径测试:

独立路径

黑盒技术:

重要给定的输入,获取到目标输出

功能测试,设计测试用例时,需研究需求说明和概要设计说明中有关程序功能或输入、输出之间的关系等信息,与测试后的结果进行分析比较。

方法:

等价类划分、边界值法、错误推测(凭直觉推测)、因果图法(考虑多个输入数据组合引起的错误)、判定表、判定树

等价类划分->确定测试用例

边界值分析:

1、如果输入条件规定了值的范围,可以选择正好等于边界值的数据作为合理的测试用例,同时还要选择刚好越过边界值的数据作为不合理的测试用例。

2、如果输入条件指出了输入数据的个数,则按最大个数、最小个数、比最小个数少1及比最大个数多1等情况分别设计测试用例。

3、对每个输出条件按以上原则确定输出值边界

4、如果程序的输入或输出域是个有序集合,选择第一个和最后一个元素作为测试用例。

 

因果图:

决策表:

条件桩,条件项,动作桩,动作项。

规则

调试:

调试技术有输出存储器的内容,打印语句,自动工具。

调试策略有试探法,回溯法,对分查找法,归纳法,演绎法。

自动测试工具:

测试数据生成程序,动态分析程序,静态分析程序,文件比较程序。

第八章维护

软件维护的定义:

在软件交付使用后,为了改正错误和满足新的需求而修改软件的过程。

种类:

改正性维护,适应性维护,完善性维护,预防性维护。

维护特点:

非结构化维护和结构化维护差别巨大;维护的代价高昂;维护的问题很多

维护过程:

建立维护组织->确定报告和评价过程->规定标准化的事件序列->建立适用于维护活动的记录保管过程->评价维护活动

软件的可维护性:

软件被理解、改正、适应及增强功能的容易程度。

(决定因素有可理解性,可测试性,可修改性,可移植性,可重用性)

软件再工程过程

第九章面向对象方法学引论

传统方法学具有很多缺陷,如生产率的提高远不能满足要求,软件重用程度很低等。

(出现问题的原因有僵化的瀑布模型,结构化技术本身的缺点:

基础是功能分解,而用户需求的变化体现在对软件功能需求的改变)

为了克服传统方法学的缺点,面向对象的方法学受到重视。

面向对象的方法学:

按照人类认识世界的方法分析和解决问题,将感兴趣或要研究的事物和概念都称为对象,以对象作为最基本的元素和分析解决问题的核心。

面向对象的开发方法:

面向对象分析OOA面向对象设计OOD面向对象实现OOP

统一建模语言UMLunifiedmodelinglanguage

面向对象方法学的概括可以用下列方程表示:

OO=对象+类+继承+消息通信

面向对象的优点:

与人类习惯的思维方法一致;稳定性好;可重用性好;可维护性好;适合开发大型软件系统

喷泉模型规定四个开发阶段:

分析需求,系统设计,软件设计和实现。

(各阶段相互重叠反映软件过程并行性,以分析为基础分析阶段消耗资源最多,反映迭代特性,强调增量开发,对象驱动)

喷泉模型图解:

面向对象的基本概念:

对象是对问题域中某个实体的抽象,特点有以数据为中心,主动,实现数据封装,本质上有并行性,独立性好

类与实例具有相同或相似性质对象的抽象就是类即类的实例是对象

消息和方法对象之间进行通信的一种构造叫消息实现类中操作的过程叫方法(方法名,参数和方法体)

属性是类中所定义的数据类有属性,对象有属性值

封装具有一个清晰的边界,有确定的接口,受保护的内部实现

继承就是子类自动共享基类中定义的数据和方法的机制

多态指子类对象可以像父类对象一样使用。

同样的消息既可以发送给父类对象也可以发送给子类对象。

即在类等级的不同层次中共享同一行为,不同层次中的类按照各自的需要实现这个行为。

重载函数重载,运算符重载,静态联编/动态联编

面向对象建模:

研究问题域->撰写规格说明->建立对象模型->建立动态模型->建立功能模型

重要:

对象模型使用类图和对象图

类图:

表示类、对象的符号

对象模型中类与类之间的关系:

关联关系;普通关联和限定关联(通常在一对多或者多对多的关联关系中,可把模型中的重数从一对多简化成一对一,或者从多对多简化成多对一)

聚集(聚合)关系;是关联的特例,表示类与类之间的关系是整体与部分的关系,描述的字句有包含,组成,分为……部分等。

两种特殊的聚集关系:

共享聚集<空心菱形>,组合聚集(简称组成)<实心菱形>。

泛化关系;UML中的泛化就是通常所说的继承关系,是通用元素和具体元素间的一种分类关系<一端为空心的三角形,三角形的顶角紧挨着通用元素>泛化针对类型(类),不针对实例(对象).分为普通泛化和受限泛化(给泛化关系附加约束条件)

依赖和细化关系。

依赖关系中其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素。

表示方式:

带箭头的虚线,箭头指向独立的类。

细化关系:

对同一事务中不同层次上描述时,这些描述间具有细化关系。

(B在A的基础上更详细描述,称B细化了A或A细化成了B)

动态模型(使用序列图和状态图)

动态模型表示瞬时的、行为化的系统的“控制”性质,规定了对象模型中的对象的合法变化序列。

表达手段:

状态图

电话系统的状态图:

功能模型:

使用用例图

用例图(系统,用例,行为者,用例间的关系)

用例建模:

寻找行为者寻找用例

三种模型之间的关系:

动态模型:

什么时候做;对象模型:

做事情的实体,最基本最重要;功能模型:

做什么

3种模型相互补充,相互配合。

第十章面向对象分析

面向对象分析定义:

抽取整理用户需求,建立问题域精确模型的过程。

关键是识别出问题域内的类与对象,并分析他们相互间的关系最终建立起问题域的简洁、精确、可理解的正确模型。

面向对象分析基本过程:

三个子模型(功能模型->做什么,对象模型->由谁做,动态模型->何时做)和五个层次:

主题层,类与对象层,结构层,属性层,服务层。

建立功能模型:

确定角色与用例;绘制用例图;描述角色与用例

建立对象模型:

确定类与对象;确定关联;划分主题;确定属性;识别继承关系;反复修改

建立动态模型:

编写脚本,提取出事件,用状态图描绘,比较并检查一致性。

事件跟踪图:

建立功能模型:

表明了系统中数据之间的依赖关系,以及有关的数据处理功能。

由一组数据流图组成,其处理功能可用IPO图、伪码等多种方式进一步描述。

定义服务:

建立完整的对象模型;服务的定义

第十一章面向对象设计OOD

即把分析阶段得到的需求转变成复合成本和质量要求的、抽象的系统实现方案的过程。

OOD的任务是按照设计原则,对模型进行细化,朝着系统实现的方向进行多次迭代。

设计准则:

模块化,抽象,信息隐蔽,弱耦合,强内聚,可重用。

启发规则:

设计结果应该清晰易懂,一般-特殊结构的深度应该适中,设计简单的类,使用简单的协议,使用简单的服务,把设计变动减少到最小

软件重用:

类型(知识~,方法和标准~,软件成分~)级别(代码~,设计结果~,分析结果~)

系统分解:

系统中主要的组成部分称为子系统

面向对象模型一般由以下四个部分组成:

问题域子系统,人机交互子系统(设计关键—原型技术),任务管理子系统(分析并发性主要依据是系统动态模型->设计),数据管理子系统(选择数据存储管理模式->设计)

设计类中的服务(设计实现服务的算法->选择数据结构->定义内部类和内部操作)

设计关联:

关联是对象模型中联结不同对象的纽带,它指定了对象相互间的访问路径。

在面向对象的设计中必须确定关联的具体策略。

根据关联的阶数不同,实现的方法也不同。

设计优化:

确定优先级,提高效率的技术,调整继承关系。

第十二章面向对象的实现

定义:

把面向对象设计结果翻译成用某种程序语言书写的面向对象程序。

测试并调试面向对象的程序。

面向对象语言的优点:

一致的表示方法,可重用性,可维护性。

(允许用户动态创建对象)

第十三章软件项目管理

内容:

估算软件规模,工作量估算,进度计划,人员组织,质量保证,软件配置管理,能力成熟度模型。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1