软件工程总复习提纲.docx
《软件工程总复习提纲.docx》由会员分享,可在线阅读,更多相关《软件工程总复习提纲.docx(35页珍藏版)》请在冰豆网上搜索。
![软件工程总复习提纲.docx](https://file1.bdocx.com/fileroot1/2023-2/21/3b3f4b45-6511-4fb4-9f3a-0def55e66136/3b3f4b45-6511-4fb4-9f3a-0def55e661361.gif)
软件工程总复习提纲
第一章:
软件工程概述
1.软件及软件开发的特点是什么?
(ppt)
抽象性:
逻辑实体,而非具体的物理实体
无明显制造过程
无磨损性:
不会老化
对硬件的依赖性:
开发和运行受计算机系统限制
软件的手工开发方式
本身的复杂性:
实际问题的复杂性+程序逻辑结构的复杂性
高成本
相当多的软件工作涉及到社会因素
2.软件危机是什么?
(P1)软件危机有哪些表现?
(P2)产生软件危机的主要原因是什么?
(Ppt)
【定义】计算机软件在开发和维护过程中所遇到的一系列严重问题。
【表现】
*对软件开发成本和进度的估算很不准确
*用户很不满意
*质量很不可靠
*没有适当的文档
*软件成本比重上升
*供不应求:
软件开发生产率跟不上计算机应用迅速深入的趋势
【具体表现】
对软件开发成本和进度的估计常常很不准确;
用户对“已完成的”软件系统不满意的现象经常发生;
软件产品的质量往往靠不住;
软件常常是不可维护的;
软件通常没有适当的文档资料;
软件成本在计算机系统总成本中所占的比例逐年上升;
软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
生产力较低,跟不上用户对软件的需求。
【客观原因】软件本身特点决定的。
*逻辑部件
*规模庞大(软件是逻辑产品、产品的需求描述的不完整、不准确,开发人员对它的理解上有偏差等等;)
【主观原因】不正确的开发方法:
缺乏高质量的人才;经验、合作、交流、管理;缺乏一种有效的、系统的、科学的原理、原则、方法和工具来指导软件的开发和维护;
*忽视需求分析
*错误认为:
软件开发=程序编写
*轻视软件维护
3.软件工程的定义(P5)
软件工程是运用工程的、数学的、计算机等科学的概念、方法和原理来指导软件开发和维护的一门学科,或者说是研究如何开发软件的一门学科。
【现代软件工程定义】
Boehm:
运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料
IEEE:
软件工程是开发、运行、维护和修复软件的系统方法
FritzBauer:
建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法
4.软件包含些什么?
程序、数据、文档(P5)
5.软件工程的三要素:
过程、方法、工具(P9)
6.什么是软件的生命周期?
(ppt)软件的生命周期分哪几个时期?
哪几个阶段?
每一个阶段的任务和阶段性成果分别是什么?
(P11~14三个时期、八个阶段)(Ppt)
软件生命周期是指从提出软件产品的开发开始,经过开发、使用和维护,及至该软件产品被最终淘汰的全过程。
【三个时期】
软件定义:
确定软件系统的需求
软件开发:
软件开发人员确定如何完成并实现软件系统
软件使用与维护:
软件提交给用户之后,还需经历使用、维护及至最终退役的过程
【八个阶段】
问题定义(任务:
确切的定义需要解决的问题
途径:
对客户进行详细的访问调查
阶段性产品:
经过客户确认的关于问题性质、工程目标和工程规模的报告)
可行性研究(任务:
了解用户需求和现实环境,从技术、经济等方面研究并论证开发该软件系统的可行性;
途径:
深入、细致地调查了解用户的要求和现实环境;攒写调查报告;可行性论证和分析(技术、经济、操作);初步项目开发计划(选用资源、人员配置定义任务、风险分析、成本效益分析、进度安排)
阶段性产品:
可行性论证报告;初步的项目开发计划)
需求分析(任务:
确定用户对待开发软件系统的需求包括:
功能:
能干什么性能:
可靠性、安全性、可维护性等
运行环境约束:
待开发的软件系统必须满足的运行环境(硬件、网络、软件环境);
途径:
需求分析人员需要与用户反复交流商讨,使用户需求逐步准确化、一致化、完全化。
阶段性产品:
软件需求规格说明书)
*总体设计
【任务】根据SRS建立目标软件系统的总体结构(模块、模块的功能和接口、模块之间的相互控制关系)、设计全局数据库或数据结构,规定设计约束,制定组装测试计划等。
【途径】根据SRS,自顶向下,逐步求精;采用抽象、模块化、信息隐蔽、局部化的软件工程原则
【阶段性产品】概要设计规格说明书,数据库或数据结构说明书,组装测试计划。
*详细设计
【任务】逐步细化总体设计所生成的各个模块,详细描述程序模块的内部细节(数据结构、工作流程等等),形成可编程的程序模块,制订单元测试计划。
【途径】根据用户需求规格说明书和概要设计说明书进行
【阶段性产品】详细设计规格说明书
*编码和单元测试
【任务】基于某种程序设计语言,根据详细设计规格说明书编写程序,并对程序进行调试和单元测试,验证程序与详细设计文档的一致性。
【途径】以详细设计规格说明书为依据、基于某种程序设计语言进行编码。
【阶段新产品】源程序代码
*综合测试
【任务】通过各种类型的测试及相应的调试,使软件达到预定的要求。
集成/验收
集成测试
【任务】根据概要设计规格说明书,将经过单元测试的模块逐步进行集成和测试,以验证各个模块之间连接是否存在错误,测试软件系统或者某个子系统是否满足设计要求。
【途径】以概要设计规格说明书以及集成测试计划为依据进行组装模块并进行测试。
【阶段性产品】满足概要设计要求可运行的系统源程序,系统集成测试报告
确认测试
【任务】根据软件需求规格说明书,测试软件系统是否满足用户的需求。
【途径】由用户参与,以软件需求规格说明书为依据进行测试;
【阶段性产品】可提供给用户使用的软件产品(文档如用户手册,操作手册;源程序代码,其它文档)测试计划、详细测试方案、实际测试结果
*软件维护
改正性维护:
修正使用过程中发现的错误
完善性维护:
增加新的功能
适应性维护:
修改软件适应工作环境的变化
预防性维护:
为以后的维护做预先准备
7.软件工程学研究的内容包括哪些?
(软件开发技术和软件工程管理ppt)软件工程的目标有哪些?
【研究的内容】
【目标】
*提高可维护性,延长寿命
付出较低的开发成本
达到要求的软件功能
取得较好的软件性能
开发的软件易于移植
需要较低的维护费用
能按时完成开发工作,及时交付使用
8.软件工程的七条基本原理是什么?
(P7~P9)
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚的审查
开发小组的人员应该少而精
承认不断改进软件工程实践的必要性
9.瀑布模型和快速原型模型的思想(P15~P17)。
软件开发过程与软件生命周期是一致的(推迟实现的观点)
相邻二阶段之间存在线性因果关系,上一个阶段的输出是下一个阶段的输入(阶段间具有顺序性和依赖性)
为了保障软件开发活动的正确性,在每一个活动完成之前,必须对该阶段的阶段性产品进行评审,正确后才能进入下一阶段的工作。
(质量保证的观点)
由于原型是用户和开发人员共同确认和评审的,因此利用它能统一用户和开发人员对软件项目需求的正确理解,有助于用户需求的确认和定义;
确定用户的需求后,就可以对软件系统进行软件开发了:
设计、编码、测试等等。
软件开发人员首先根据用户提出的初步需求,快速地开发出一个原型,它向用户展示了待开发软件系统的全部或部分功能、行为和性能。
在征求用户对原型的意见之后,进一步修改、完善和确认软件系统的需求;
10.CASE的定义(PPt)
CASE(计算机辅助软件工程Computer-AidedSoftwareEngineering):
在软件工程活动中,软件开发人员按照软件工程的方法和原则,借助于计算机及其软件工具的帮助来开发、维护和管理软件产品的过程。
第二章:
可行性研究
1.可行性研究的任务和目的(P25)
可行性研究的实质是要进行一次大大压缩简化了的系统分析和设计的过程。
【任务】
进行概要的分析研究,初步确定项目的规模,目标,约束和限制。
进行简要的需求分析,抽象出项目的逻辑结构,建立逻辑模型。
从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的解决方法。
对每种解决方法都要研究它的可行性。
可行性研究的【根本任务】:
对以后的行动方案提出建议
【目的】用最小的代价在尽可能短的时间内确定问题是否能够解决
2.可行性研究要考虑的三个方面:
技术、操作、经济可行性(P25)
【技术可行性】一般要考虑的情况包括开发的风险,即设计出的系统能否达到要求的功能和性能;资源的有效性;相关技术的发展是否支持。
【经济可行性】进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资。
【社会可行性】要开发的项目是否存在任何侵权问题,运行方式在用户组织内是否可行,现有管理制度﹑人员素质﹑操作方式是否可行。
【可行性研究的步骤】
1.复查系统规模和目标
2.研究目前正在使用的系统
3.导出新系统的高层逻辑模型
4.重新定义问题
5.导出和评价供选择的解法
6.推荐行动方针
7.草拟开发计划
8.书写文档提交审查
3.数据流图符号的意义(P41)。
会看会画数据流图(P32~P37)。
【系统流程图】
系统流程图(表达的是数据在各部件间的流动情况)≠程序流程图(对数据进行加工处理的控制过程)
【数据流图DFD】描述数据流、变换等对象的图形工具,是用于描绘系统的逻辑模型。
有四种成分:
源点/终点、处理、数据存储、数据流
4.数据字典的内容和定义的方法(P37~P38)
数据字典是关于数据的信息的集合,是对数据流图中包含的所有元素的定义的集合。
数据字典与数据流图共同构成系统的逻辑模型。
每个出现在数据流图中的数据名以及相互的逻辑关系都必须用一个配套的数据字典予以精确的描述。
【包括四类元素的定义:
】
数据流
数据流分量(数据元素)
数据存储
处理
【一个数据字典通常有多个数据条目,每个数据条目主要包括以下内容:
】
在数据流图中标识的各个数据流、外部实体、数据存储的名字及其别名;
数据定义;
以它作为输入流或输出流的变换的列表(位置);
使用该数据条目的简要说明;
数据条目的解释性说明(描述);
其他补充说明:
取值范围、缺省值、设计约束等。
例1:
学生证数据=姓名+性别+系别+专业+年龄+
{学期注册},其中:
性别=[男|女]。
试指出其他尚可分解的元素及其分解后的结构。
例2:
名字:
订票单
别名:
无
定义:
日期+目的地+出发地+航班
作为输出流的变换列表:
作为输入流的变换列表:
预定机票
使用说明:
必须给出各个数据项
解释性说明:
无
缺省值:
出发地=填写本地
5.成本效益分析的方法(P41~P42)(不考)
第一步:
估计开发成本、运行费用和新系统将带来的经济效益。
1.货币的时间价值
依照经济分析方法预测出投资成本回收的时间。
投资通常是一种贷款行为,若以年利率i借贷投资P元,则n年后还贷的数值为:
意即在n年后得到F元钱将等价于现在的P元。
2.投资回收期:
就是使累计的经济效益等于最初的投资费用所需的时间。
3.纯收入:
整个生存周期之内的累计经济效益折成现在值)与投资之差。
4.投资回收率:
通常用货币的时间价值进行估算。
可用利率来表示货币的时间价值。
通常把建立系统若干年后能取得的收益折算成现在的价值和开发系统所需的费用进行比较得出投资回收率。
【成本估计】
代码行技术:
每行代码的平均成本×代码行数
任务分解技术:
人力×工资(将较复杂的任务分解为多个相对简单的子任务后分别估算出完成各子任务所需的人力及相应人力的平均工资,最后计算得到总成本)
自动估计成本技术:
历史数据、数据库系统
第三章:
需求分析
1.需求分析应该建立的三种模型是什么?
分别用什么图形工具来描绘?
(P46、P52)
三种模型
数据模型:
描述问题信息域——实体-联系图ER图
功能模型:
定义软件功能——数据流图
行为模型:
描述软件行为——状态转换图
2.需求分析工作可划分为哪三个阶段。
(Ppt)
三个阶段:
1.需求获取阶段(问题分析)
2.需求规约阶段(需求描述)
3.需求验证阶段(需求评审)
【任务】通过多种方式(与用户交流、实践等)清晰地理解所要解决的问题,完整的获取用户的需求。
【原则】1)寻求用户的不合理需求和潜在需求。
2)对用户的需求进行建模。
【作用】可以准确地描述用户从多个不同视点、不同抽象层次上对原始问题及目标软件系统的认识;可以帮助需求分析人员分析发现用户需求中的不一致性,排除不合理部分,挖掘潜在用户需求;有助于形成需求规格说明书。
【方法】访谈、面向数据流自顶向下求精(顶层数据流图--1层数据流图……)、快速建立软件原型(快速、容易修改)
【任务】以需求模型为基础,考虑到问题的软件可解性,生成软件的需求规格说明书和初步的用户手册。
【原则】确保需求规格说明书对用户需求描述的完整性、一致性和准确性。
鼓励用户参与需求规格说明书以及用户手册的制定。
尽可能做到结构清晰,措辞准确和简洁。
【任务】让用户和设计人员对需求规格说明以及用户手册的理解达成一致。
【原则】确保需求规格说明书和用户手册是一致、完全和准确的;支持各方(用户,需求分析人员、设计人员)参与评审工作。
3.需求分析阶段回答什么问题,需求分析的任务是什么?
(P56~P58)
基本任务:
准确定义系统的目标,回答“系统必须做什么?
”
(1)确定对系统的综合要求(功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求、将来可能提出的要求)
(2)分析系统的数据要求(建立概念模型-ER图,形象描绘数据结构-层次方框图、Warnier图、IPO图,数据结构规范化)
(3)导出系统的逻辑模型
(4)修正系统开发计划:
重估成本、进度
(5)开发原型系统
4.需求规约阶段分析建模时,ER图(实体联系图)、状态图、层次图、warnier图、IPO表的图形符号意义。
会看这些图。
【实体-联系图(ER图)】P62
【状态图(行为模型)】状态+事件P65
【层次方框图】层次方框图采用树型结构的一系列多层次的矩形框描绘数据的层次结构。
树型结构的顶层代表完整的数据结构,最底层的各个框代表组成这个数据的实际数据元素。
由矩形分层构成的可用于描述数据全集、子集和数据元素间相互关系的树状数据结构图。
(不考)【warnier图】只使用左{符号、括号和符号
(不考)【IPO表(输入、处理、输出图)】IPO图与数据流图中的处理一一对应并由系统管理人员定义编号的排列顺序。
【建立数据流图的注意事项】
数据流不表示加工顺序,而仅表示数据流向
每层数据流图中的加工个数不要太多,最好不要超过7个(7加减2原则)
不同层次数据流图之间的一致性
只需要对复杂的加工作进一步分解。
不要对整个系统的数据流图分解出太多层次,通常3、4层已经足够。
数据加工的命名一般采用动宾词组或主谓词组,数据流、数据存储和外部实体用名词词组。
5.应该从哪几个方面验证软件需求正确性?
(P70)
需求评审(验证)一致性、完整性、现实性、有效性
第五章:
总体设计
1.概要设计的任务和过程。
(P81~P83)
【目的】“怎样做?
”根据SRS产生一个模块化的软件总体结构,并明确各个模块的功能和接口以及模块之间的控制关系、说明输入输出数据的数据结构。
【任务】1、设计软件系统结构(程序由那些模块组成,以及他们之间相互的关系)
2、数据结构及数据库设计
3、编写概要设计文档
4、评审——“两类结构,文档评审”
【方法】结构化设计方法(SD)——面向数据流的设计方法
面向数据结构的设计方法
面向对象设计方法(OOD)
【过程步骤】两个主要的阶段组成:
系统设计(确定系统的具体实现方案)+结构设计(确定软件结构)
(1)设想供选择的方案;
(2)选取合理方案;
(3)推荐最佳方案;
(4)功能分解;
(5)设计软件结构;
(6)数据库设计:
(7)制订测试计划;
(8)书写文档,包括:
系统说明、用户手册、修订的测试计划、详细的实现计划、数据库设计说明书
(9)审查和复审。
2.模块的作用域和控制域是什么?
好的软件体系结构中模块作用域和控制域的关系是怎样的?
(P90~91)
【作用域】受该模块内一个判定影响的所有模块的集合
【控制域】模块本身及所有直接或间接从属于它的模块的集合
模块的作用域应该在控制域之内(否则会使模块间出现控制耦合)
3.模块独立以及内聚和耦合的关系。
几种内聚和几种耦合的含义以及与模块独立性间强弱关系。
设计软件在内聚和耦合性上应该遵循的原则。
(P87~P88)(ppt)
【设计原理】模块化、抽象、信息隐蔽和局部化。
模块独立的概念是模块化、抽象、信息隐蔽和局部化概念三个基本原理的直接结果。
【模块独立重要的理由】比较容易开发、比较容易测试和维护
【衡量模块独立程度的标准】耦合、内聚。
耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚,低耦合,提高模块的独立性。
在内聚性与耦合性发生矛盾的时候,最好优先考虑耦合性,也就是先保证耦合性低一些。
【耦合】指模块之间的联系紧密程度。
模块之间联系越紧密,其耦合性越强,独立性就越差。
模块耦合度越低越好:
1.独立性;2.减少错误传播。
【模块的耦合性从低到高可分为以下几种类型】
无直接耦合(nodirectcoupling):
二个模块都不依赖对方而独立存在。
两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现。
数据耦合(datacoupling):
二个模块通过参数交换信息,而信息仅限于数据。
一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。
属低耦合。
特征耦合(stampcoupling):
二个模块通过传递数据结构加以联系,或都与一个数据结构有关。
控制耦合(controlcoupling):
二个模块通过参数交换信息,而交换的信息中包含控制信息。
控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖。
(中等程度耦合)
外部耦合(externalcoupling):
二个模块与同一外部环境相关联(全局变量,I/O,文件,数据库等)
公共耦合(commoncoupling):
二个模块通过全局的数据环境(全局数据结构,公共区等)相互作用。
软件可理解性降低、诊断错误困难、软件可维护性差、软件可靠性差。
内容耦合(contentcoupling):
一个模块使用另一模块内的数据和控制信息,或者直接转移到另一模块内执行
尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。
【内聚性】模块内部各个元素彼此结合的紧密程度。
它是信息隐蔽和局部化概念的自然扩展。
高内聚往往以意味着模块间的松耦合。
偶然内聚——一个模块内的各处理元素之间没有任何联系。
如一个模块内各个成分为完成一组功能而结合在一起,他们相互之间关系松散。
逻辑内聚——模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
如一个模块完成的诸任务逻辑上是相关的;如一个模块产生所有与类型无关的输出。
时间内聚——一个模块内所包含的诸任务必须在同一时间段内执行。
这些功能只因时间因素关联在一起。
过程内聚——模块内各个成分彼此相关且必须按特定的次序执行。
通信内聚——模块内所有处理元素都在同一个数据结构上的操作。
各处理使用相同的输入数据或者产生相同的输出数据。
顺序内聚——一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能的元素的输出就是下一功能元素的输入。
功能内聚——模块内所有元素共同完成一个功能,缺一不可,模块已不可再分。
(最强)
4.七条启发式规则。
(P90~92)
模块的划分:
高内聚,低耦合,保持相对独立性
模块的大小:
模块规模应该适中
形成的结构:
深度、宽度、扇出和扇入都应适当
“顶层扇出较高,中间扇出较小,底层模块高扇入”
模块的控制:
模块的作用域应该在控制域之内
模块的接口:
力争降低复杂程度(简单、清晰、含义明确)
设计单入口单出口的模块(也即不要出现内容耦合)
模块功能应该可以预测
5.软件结构图中,深度、宽度、扇入、扇出的含义和扇入扇出与模块调用间的关系。
(P90)
6.熟练掌握层次图,会看会画层次图。
(P92~P93)
描绘软件结构的图形工具包括:
层次图、HIPO图、结构图
层次图用来描绘软件的层次结构,其中的每个矩形框代表一个模块,方框之间的连线表示调用关系,而非组成关系。
(层次图≠层次方框图)
7.HIPO图、结构图的符号含义,理解会看这些图形。
(P103~P104)
⏹HIPO图=层次图+IPO图(输入/处理/输出)
⏹除最顶层的方框外,所有的方框加编号(编号规则同数据流图)
⏹对层次图中的各个模块,采用IPO图的方式说明该模块的处理功能。
⏹结构图=层次图+调用信息
⏹1.每个方框->模块,箭头(直线)->模块的调用关系
⏹2.带注释的箭头->模块调用过程中来回传递的信息
8.熟练掌握面向数据流的结构化程序设计的方法,会从DFD图转化成软件的体系结构图。
(P94~P103)
第六章:
详细设计
1.详细设计的主要任务和目的。
♦详细设计——根据得到的模块结构图MSD,对其中每一个模块给出过程属性的描述,即算法设计。
即确定每个模块的内部特征,即每个模块内部的执行过程(怎样做)。
【具体目标】:
⏹确定怎样具体的实现所要求的系统,提供关于算法的更多的细节。
⏹根据详细设计的结果可得到直接用于编程的程序逻辑结构。
【基本任务】实现对应总体设计的模块所需要的处理逻辑
主要有:
详细的算法
v数据表示和数据结构
v实施的功能和使用的数据间的关系
2.结构化程序设计的思想以及三种基本结构。
(P107~P109)
【主要思想】控制结构:
单入口单出口(一个模块只有一个入口和出口)设计方法:
自顶向下、逐步求精
详细设计的目标不仅是逻辑上正确地实现每个模块的功能,还应使设计出的处理过程清晰易读。
结构化程序设计是实现该目标的关键技术之一,它指导人们用良好的思想方法开发出易于理解、易于验证的程序。
【三种基本结构】顺序结构,分支结构,循环结构
【人机界面设计过程中的问题】
(1)系统响应时间:
长度和易变性
(2)用户帮助设施
(3)出错信息处理
(4)命令交互
【设计过程】创建模型-用原型实现-用户试用评估-根据用户意见修改
3.熟练掌握程序流程图、盒图N-S图、PAD图的符号含义和画法以及和伪代码四种工具之间的相互转换。
(P114~P118)
♦程序流程图:
箭头代表控制流。
♦N-S图:
一定是结构化的(基本过程结构清晰、易懂;数据的处理与变换不清楚且不易修改;功能域明确;不可能任意转移控制;易于确定局部和全局数据的作用域;易于表现嵌套关系和模块的层次结构)
♦问题分析图(PAD图):
采用二维树型结构来表示程序的控制流。
(过程与数据结构可同时表示;易读、易学、易修改、易细化、易编码)
判定表:
适合描述那些包含复杂的条件组合,并要根据这些条件选择动作执行的模块;但不能表示循环、顺序和选择。
伪码:
一种以正文形式表示数据结构和处理过程的设计工具,是一种混合语言。
伪码=严格的关键字外部语法+自然语言的词