软件工程学.docx
《软件工程学.docx》由会员分享,可在线阅读,更多相关《软件工程学.docx(25页珍藏版)》请在冰豆网上搜索。
![软件工程学.docx](https://file1.bdocx.com/fileroot1/2023-1/29/84e2dd7b-f3c4-4c3a-8030-1ea75591b79c/84e2dd7b-f3c4-4c3a-8030-1ea75591b79c1.gif)
软件工程学
目录
第一章软件工程学1
第二章可行性研究4
第三章需求分析5
第五章总体设计5
第六章详细设计6
第七章实现7
第八章维护7
第九章面相对象方法学7
第一章软件工程学
1.什么是计算机软件?
a)计算机运行所需要的各种程序和数据的总称,包括操作系统,汇编程序,编译程序,数据库,文字编辑及维护使用手册等。
软件是计算机系统的重要组成部分。
b)软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。
程序是按事先设计的功能和性能要求编写的指令序列;
数据是使程序能正常操纵信息的数据结构;
文档是与程序开发、维护和使用有关的图文材料。
2.软件发展的三个时代
a)软件工程时代(70年代中期至今)
b)程序系统时代(60年代中期到70年代中期)
c)程序设计时代(60年代中期以前)
3.软件危机的介绍
a)定义:
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题
b)表现:
(1)对软件开发成本和进度的估计常常很不准确。
(2)经常出现用户对“已完成的”软件系统功能不满意的现象。
(3)软件产品的质量往往达不到要求。
(4)软件通常不可维护。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
4.软件危机产生的原因及消除途径
客观原因
(1)软件的规模过于庞大,结构异常复杂
(2)逻辑产品的不可见性使得管理困难
(3)软件独有的特点使开发研制人员对其了解不够,产生糊涂概念,采用了错误方法和技术
主观原因
(4)不重视需求分析与维护,只注重写程序,而软件不只是程序
(5)软件开发技术落后
(6)生产方式落后
(7)开发工具落后
消除途径--软件工程化
5.消除“软件就是程序”的错误观念
一个软件必须由一个完整的配置组成
软件是程序、数据及相关文档的完整集合
文档是开发、使用和维护程序所需要的图文资料
软件=程序+数据+文档
6.软件工程的定义
1)概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,用于经济地开发出高质量的软件并有效地维护它,这就是软件工程。
2)人们曾经给软件工程下过许多定义,下面给出两个典型的定义。
7.软件工程的基本原理
1)用分阶段的生命周期计划严格管理
2)坚持进行阶段评审
3)实行严格的产品控制
4)采用现代程序设计技术
5)结果应能清楚地审查
6)开发小组的人员应该少而精
7)承认不断改进软件工程实践的必要性
8.软件工程方法学
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学
9.软件工程方法学包含3个要素
a)方法是:
完成软件开发的各项任务的技术方法;
b)工具是:
为运用方法而提供的自动的或半自动的软件工程支撑环境;
c)过程是:
为了达到给定目标所实施的一系列步骤,就是什么时间做什么。
10.软件工程方法学包括传统方法学和面向对象方法学。
1、传统方法学
又称生命周期方法学或结构化范型
它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务
结构化范型要么面向行为(即对数据的操作),要么面向数据
2、面向对象方法学
面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法
面向对象方法学具有下述4个要点
面向对象方法学=对象+类+继承+用消息通信
11.软件生命周期
12.软件生命周期的各个时期
a)软件定义时期
1.问题定义
“要解决的问题是什么?
”
确定用户要求解决问题的性质、工程的目标和规模
2.可行性研究
“对于上一个阶段所确定的问题有行得通的解决办法吗?
”
经济、技术、法律可行性、不同的方案
3.需求分析
“为了解决这个问题,目标系统必须做什么”
确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景
规格说明书(specification)
b)软件开发时期
4.总体设计(概要设计)
“概括地说,应该怎样实现目标系统?
”
设计出实现目标系统的几种可能的方案。
推荐一个最佳方案
确定程序由哪些模块组成以及模块之间的关系
5.详细设计(模块设计)
“应该怎样具体地实现这个系统呢?
”
设计出程序的详细规格说明
确定实现模块功能所需要的算法和数据结构
6.编码和单元测试
写出正确的易理解、易维护的程序模块并仔细测试每个模块
7.综合测试
集成测试和验收测试,现场测试或平行运行
c)软件维护时期
8.软件维护
使系统持久地满足用户的需要
维护工作分成以下四类
改正性维护
适应性维护
完善性维护
预防性维护
13.软件过程
●软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤
●软件过程定义了运用方法的顺序、文档资料、管理措施,各个阶段的里程碑
●通常使用生命周期模型简洁地描述软件过程
●生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序
●也称为过程模型
过程模型
A.瀑布模型
瀑布模型的特点
✧阶段间具有顺序性和依赖性
✧推迟实现的观点
✧清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现
✧质量保证的观点(文档驱动)
✧每个阶段都必须完成规定的文档
✧每个阶段结束前都要对所完成的文档进行评审
瀑布模型的优点
Ø强迫开发人员采用规范方法;
Ø每个阶段必须提交相应的文档;
Ø每个阶段所交出的产品必须经过质量保证小组的验证。
瀑布模型的缺点
Ø完全依赖于书面的规格说明,可能导致最终开发出的软件产品不能真正满足用户的需要
B.快速原型模型
快速原型是一个与产品子集功能上相同的工作模型
–快速建立起来的可以在计算机上运行的程序
–它所能完成的功能往往是最终产品能完成的功能的一个子集
快速原型模型的特点
✧快速原型的本质是“快速”
✧快速原型可以取代规格说明阶段,但不是设计阶段,容易适应需求的变化
✧有利于开发与培训的同步
✧开发费用低、开发周期短、维护容易且对用户更友好
✧客户与开发者对原型理解不同
✧准确的原型设计比较困难
✧不利于开发人员的创新
C.喷泉模型
迭代是软件开发过程中普遍存在的一种内在属性。
经验表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面向对象范型中比在结构化范型中更常见。
D.Rational统一过程(RationalUnifiedProcess,RUP)
最佳实践
a)迭代式开发
b)管理需求
c)使用基于构件的体系结构
d)可视化建模
e)验证软件质量
f)控制软件变更
RUP软件开发生命周期按内容划分9个核心工作流
✧业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境
按时间划分4个阶段
1.初始阶段:
建立业务模型,定义最终产品视图,确定项目范围
2.精化阶段:
设计并确定系统的体系结构,制定项目计划,确定资源需求
3.3构建阶段:
开发出所有构件和应用程序,把它们集成客户需要的产品,并且测试所有功能
4.4移交阶段:
把开发出的产品提交给用户使用
14.敏捷过程与极限编程
A.敏捷软件开发宣言
a)人和交互重于过程和工具
b)可以工作的软件胜过面面俱到的文档
c)客户合作重于合同谈判
d)随时响应变化胜过遵循计划
B.从上述价值观中引出了下面12条原则
1.对我们而言,最重要的是通过尽早和不断交付有价值的软件满足客户需要。
2.我们欢迎需求的变化,即使在开发后期。
敏捷过程能够驾驭变化,保持客户的竞争优势。
3.经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。
4.业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。
5.围绕斗志高昂的人进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。
6.在开发小组中最有效率也最有效果的信息传达方式是面对面的交谈。
7.可以工作的软件是进度的主要度量标准。
8.敏捷过程提倡可持续开发。
出资人、开发人员和用户应该总是维持不变的节奏。
9.对卓越技术与良好设计的不断追求将有助于提高敏捷性。
10.简单——尽可能减少工作量的艺术至关重要。
11.最好的架构、需求和设计都源自自我组织的团队。
12.每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。
15.几种模型优缺点比较:
a)瀑布模型历史悠久、广为人知,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终开发出的软件产品可能并不是用户真正需要的。
b)快速原型模型正是为了克服瀑布模型的缺点而提出来的。
它通过快速构建起一个可在计算机上运行的原型系统,让用户试用原型并收集用户反馈意见的办法,获取用户的真实需求。
c)增量模型具有可在软件开发的早期阶段使投资获得明显回报和较易维护的优点,但是,要求软件具有开放的结构是使用这种模型时固有的困难。
d)风险驱动的螺旋模型适用于内部开发的大型软件项目,但是,只有在开发人员具有风险分析和排除风险的经验及专门知识时,使用这种模型才会获得成功。
e)喷泉模型较好地体现了面向对象软件开发过程无缝迭代的特性,是典型的面向对象的软件过程模型之一
f)RUP是一个具有突出优点的软件过程模型以极限编程XP为代表的敏捷过程,具有对变化和不确定性的更快速更敏捷的反应特性,因此能够较好适应商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束。
第二章可行性研究
16.可行性研究的目的
a)目的不是要解决问题,而是确定问题是否值得去解决
b)用最小的代价在尽可能短的时间内确定问题是否能够解决
17.数据流图
a)数据流图(DFD)是一种图形化技术,它以图形的方式描绘信息流和数据在系统中的流动和被处理的逻辑过程
b)数据流图描绘系统的逻辑模型,图中无具体的物理元素,只是描绘信息在系统中流动和处理的情况
第三章需求分析
18.需求分析的任务
a)需求分析
i.需求分析是软件定义时期的最后一个阶段,它的基本任务是准确地回答“系统必须做什么?
”这个问题。
ii.需求分析的任务还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
iii.在需求分析阶段结束之前,系统分析员应该写出软件需求规格说明书,以书面形式准确地描述软件需求。
iv.在分析软件需求和书写软件需求规格说明书的过程中,分析员和用户都起着关键的、必不可少的作用。
b)需求分析的具体任务
a)确定对系统的综合要求
i.功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求、扩展需求
b)分析系统的数据要求
c)导出系统的逻辑模型
d)修正系统开发计划
c)需求分析的步骤
1.需求获取:
问题识别
2.需求提炼:
分析建模(导出软件逻辑模型)
3.需求描述:
编写<需求规格说明书>
4.需求验证:
需求分析评审
d)需求分析规格说明书
a)⑴系统规格说明:
b)系统概貌功能要求性能要求运行要求
c)可能增加的要求DFDIPO
d)⑵数据要求:
e)DDHierarchy或WarnierDiagram
f)⑶用户系统描述
g)——初步用户手册:
从用户的观点考虑系统
h)系统功能、性能使用与步骤等
i)⑷修正的开发计划:
j)成本估计资源使用计划进度计划
19.实体-联系图(E-R图)
a)为了把用户的数据要求清楚、准确地描述出来,系统分析员通常建立一个概念性的数据模型(也称为信息模型)。
数据模型中包含3种相互关联的信息:
数据对象、数据对象的属性及数据对象彼此间相互连接的关系。
b)通常,使用实体-联系图(entity-relationshipdiagram)来建立数据模型。
可以把实体-联系图简称为ER图,相应地可把用ER图描绘的数据模型称为ER模型。
第五章总体设计
20.总体设计
a)总体设计阶段两个任务:
i.划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等等,但每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在详细设计时设计。
ii.设计软件的结构-----要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
b)总体设计过程
1.设想供选择的方案
2.选取合理的方案
3.推荐最佳方案
4.功能分解
5.设计软件结构
6.设计数据库
7.制定测试计划
8.书写文档
9.审查和复审
21.设计原理
a)模块化
1、什么是模块?
具有输入输出、逻辑功能、运行程序和内部数据这四种属性的一个程序。
它是单独命名的而且可以通过名字来访问。
b)抽象
1、什么是抽象?
抽象是认识复杂现象过程中使用的思维工具,即抽象事物本质的共同特性而暂不考虑它的细节,不考虑其他因素。
2、软件工程中的抽象:
软件工程过程中的每一步都可以看作是对软件解决方法抽象层次的一次细化。
在可行性研究(即系统定义)阶段,软件作为整个计算机系统的一个元素(完整部件)。
在需求分析阶段,软件解决方案使用问题环境中的术语来描述。
从概要设计到详细设计阶段抽象层次逐步降低,将面向问题的术语和面向实现的术语结合起来描述解决方法。
最低层抽象层次,是产生源代码,用可以直接实现的方法叙述问题的解决方法。
c)逐步求精
1、什么是逐步求精
逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术(例如,规格说明技术,设计和实现技术)的基础。
可以把逐步求精定义为:
“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
”
2、逐步求精的重要性
是因为人类的认知过程遵守Miller法则:
一个人在任何时候都只能把注意力集中在(7±2)个知识块上
d)信息隐藏和局部化
1、信息隐藏
“为了得到最好的一组模块,应该怎样分解软件呢?
”
信息隐藏原理:
应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
2、局部化
局部化:
把一些关系密切的软件元素物理地放得彼此靠近
•局部化有助于实现信息隐藏
•信息隐蔽和局部化的优点
–减少错误的传播
第六章详细设计
–
22.模块独立
●模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果
●每个模块完成一个相对独立的子功能,并且与其它模块间的接口简单
●模块独立性的重要性
⏹有效的模块化(即具有独立的模块)的软件比较容易开发出来
⏹独立的模块比较容易测试和维护
●模块独立性的衡量标准
⏹模块内聚(Cohesion):
模块内各元素交互的程度
⏹模块耦合(Coupling):
模块间交互程度
23.软件测试
a)软件测试的目标
(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3)成功的测试是发现了至今为止尚未发现的错误的测试。
b)Alpha测试和Beta测试
a)Alpha测试是由用户在开发环境下进行的测试,也可以是开发机构内部的用户在模拟实际操作环境下进行的测试。
开发者坐在用户旁边,这是在开发者受控的环境下进行的测试。
由开发者随时记录下错误情况和使用中的问题。
b)Beta测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。
开发者通常不在测试现场,这是在开发者无法控制的环境下进行的测试。
由用户记录下遇到的所有问题,定期向开发者报告。
beta测试是一模拟真实的使用环境从而发现缺陷的一种测试
c)白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。
它根据程序的控制结构设计测试用例,主要用于软件或程序验证。
白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行测试,是一种穷举路径的测试方法。
d) 黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
面向对象方法学概述
名词解释:
1.软件生命周期模型
软件生存周期模型:
是描述软件开发过程中各种活动如何执行的模型。
软件生存周期主要模型:
瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于
知识的模型等
2.模块独立性
模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且
接口简单。
模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。
3.软件的可维护性
软件可维护性指软件能够被理解、校正、适应及增强功能的容易程度。
4.软件工程
软件工程指用科学知识和技术原理来定义、开发、维护软件的一门学科。
或者说,软件工
程就是运用工程学的基本原理和方法来组织管理软件的生产、研究、开发、管理、维护的过
程、方法和技术。
5.数据字典
字据字典:
简称DD,就是用来定义数据流图中的各个成分具体含义的,它以一种准确
的\无二义性的说明方式为系统的分析\设计及维护提供了有关元素的一致的定义和详细
的描述。
6、静态测试
静态测试是采用人工检测和计算机辅助静态分析的方法对程序进行检测。
7、面向对象:
面向对象OO=类+对象+继承+通信
8、需求分析
需求分析是指:
开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的
需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式主义功能规约(需求规格
说明)的过程。
9、软件危机
软件危机(SoftwareCrisis)是计算机软件在它的开发和维护过程中所遇到的一系列严重
问题。
概括地说,主要包含两方面的问题:
如何开发软件,怎样满足对软件日益增长的需求;
如何维护数量不断膨胀的已有软件。
10、软件生存周期
软件生存周期:
一个软件从提出开发要求开始直到该软件报废为止的整个时期。
软件生
存周期包括:
可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、
维护等。
简答题:
1.软件生存周期有哪几个阶段?
①可行性研究②需求分析③总体设计④详细设计⑤编码⑥测试⑦维护
2.白盒测试法有哪些逻辑覆盖标准?
①语句覆盖②判定覆盖③条件覆盖④判定/条件覆盖⑤条件组合覆盖⑥点覆盖、边覆
盖、路径覆盖
3.软件的维护有哪4种类型?
①校正性维护②适应性维护③完善性维护④预防性维护。
4.软件成分的重用有哪3个级别?
:
①代码重用②设计结果重用③分析结果重用
5.设计任务管理子系统有哪7个任务?
①确定事件驱动型任务②确定时钟驱动任务③确定优先任务④确定关键任务⑤确定协
调任务⑥尽量减少任务数⑦确定资源需求
6.类构件的重用包括哪3种方式?
:
①实例重用②继承重用③多态重用
7.提高可重用性的7条准则是哪些?
①提高方法的内聚②减小方法的规模③保持方法的一致性④把策略与实现分开⑤
全面覆盖⑥尽量不使用合局信息⑦利用继承机制
8.提高可扩充性的4条准则是哪些?
①封装实现策略②不要用一个方法遍历多条关联链③避免使用多分支语句④精心确
定公有方法
9.提高健壮性的4条准则是哪些?
①预防用户的操作错误②检查参数的合法性③不要预先确定限制条件④先测试后优化
10.列举PDL语言的优点与缺点有哪些?
PDL语言的优点:
①可以作为注释插在源程序中间;②可以使用普通的正文编辑程
序或文字处理系统,很方便完成PDL的书写和编辑工作;③可以利用已有的自动处理程序
自动由PDL生成程序源代码。
PDL语言的缺点:
①不如图形工具直观。
②描述复杂的条件组合与动作之间的对应关
系时,不如判定表和判定树时简单。
11.如何改进软件设计、提高软件质量?
(1)提高模块的独立性。
(2)模块规模应该适中。
(3)适当选择深度、宽度、扇出和扇
入。
(4)模块的作用域应该在控制域之内。
(5)力争降低模块接口的复杂程度。
(6)设
计单入口单出口的模块。
(7)模块功能应该可以预测。
12.以G.J.Myers的观点,简述对软件测试的目的。
软件测试是
(1)为了发现错误而执行程序的过程;
(2)一个好的用例能够发现至今尚
未发现的错误的测试。
(3)一个成功的测试是发现至今尚未发现的错误的测试。
13.软件质量保证应做好哪几方面的工作?
(1)采用技术手段和工具。
(2)组织正式技术评审(3)加强软件测试(4)推行软件
工程规范(标准)。
(5)对软件的变更进行控制(6)对软件质量进行度量。
14.下列模块的内聚类型是什么?
再把它们按内聚的大小由小到大排列。
(1)使用同一数据来源产生两种报告
(2)求一元二次方程的根(3)计算最高成绩和平均
成绩(4)系统初始化处理
【1】通信内聚,功能内聚,逻辑内聚,时间内聚【2】(3)->(4)->
(1)->
(2)
15.什么是黑盒测试法?
常用的黑盒测试方法有哪些?
将程序当成是黑盒子以设计中的功能为标准在程序的接口出进行测试看它能否达到功
能要求。
常见方法:
等价类划分、边界值分析、因果图、错误推测。
16.选择程序设计语言应考虑哪些因素?
①项目的应用领域,是选择语言的关键因素。
②软件开发方法:
选择语言有时依赖该因
素。
③软件执行环境:
对软件生产率、错误率和软件质量有影响。
④算法和数据结构的复
杂性。
⑤软件开发人员的知识。
与开发人员的知识水平和心理因素有关,有时对语言选择
有影响。
17.什么是模块耦合性,有哪些类型?
耦合性:
也称块间联系。
指软件系统结构中各模块间相互联系紧密程度的一种度量。
模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
耦合性种类:
数据耦合、标记耦合、控制耦合、公共耦合、内容耦合
18.软件维护有哪些内容?
:
a、校正性维护b、适应性维护c、完善性维护d、预防性维护
19.简述软件测试的任务、目的与类型。
答:
软件测试是一个为了寻找软件错误而运行程序的过程。
目的就是为了发现软件中的错误。
一个好的测试用例是指很可能找到迄今为止尚未发现
的错误的用例。
一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。
软件测试
主要分为白盒测试和黑盒测试两大类。
20.简述软件工程目标和面临的主要问题。
答:
软件工程的目标是应用计算机科学、数学及管理科学等原理开发软件的工程。
它采用经
过实践验证的工程的原则、方法,以提高质量,降低成本。
但是目前的软件开发面临着许多问题:
(1)对软件开发成本和进度的估计常常很不准
确。
(2)用户常对“已完成的”软件系统不满意。
(3)软件产品的质量往往靠不住。
(4)
软件常常很难维护。
(5)软件常常缺乏适当的文档资料。
(6)软件