(完整)软件工程复习重点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(完整)软件工程复习重点
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)软件工程复习重点)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)软件工程复习重点的全部内容。
三大块内容:
软件危机与软件工程
传统软件开发方法
面向对象方法
一、软件危机与软件工程:
软件、软件危机、软件生存期、软件开发模型、软件管理
1、软件: 软件是能够完成预定功能和性能的可执行的计算机程序
+使程序正常运行所需要的数据
+描述软件开发过程及其管理、程序的操作和使用的有关文档.
文档:分开发、管理、用户、维护文档,作用是记录及解决不可视性、通信与交
流、管理与维护、用户服务
2、软件危机
a)表现:软件成本高、难于控制开发进度、软件工作量估计困难、软件质量低、软件
修改维护困难
b)原因:需求问题(描述不精确、理解不一致)、管理问题、方法和工具问题、软
件本身的特点
3、软件生存期:
a)三个时期:定义时期(软件计划、需求分析)—>开发时期(软件设计、编码实现、
测试)—>使用和维护时期(维护)
b)六个阶段:软件计划à需求分析à设计à编码à测试à使用与维护
c)生命周期方法特点:顺序性、依赖性,推迟程序的物理实现、质量保证的观点(利于
尽早发现错误,如阶段文档、评审)
4、软件开发模型
a)瀑布模型:文档驱动
i.阶段划分、分而治之、控制开发过程的复杂性
ii.自顶向下、由抽象到具体,顺序进行
优点:规范管理开发过程、文档驱动
缺点:初期系统的需求难以完全确定、文档驱动、周期长
b)原型模型:
i.针对:软件开发初期需求难以确定
ii.基本思想:快速建立原型,完善用户需求
iii.优点:用户参与、快速
iv.缺点:快速弱功能、对开发环境要求高
c)螺旋模型(风险驱动)
d)增量模型(模块、功能驱动)
e)迭代模型
f)喷泉模型
5、软件管理
a)区别于其他工业产品生产管理的特点
b)主要内容:开发计划与进度管理、文档管理、人员组织管理、成本管理、质量管理
二、传统软件工程方法:
a)软件计划
i.问题定义
ii.可行性研究
1.经济可行性
2.技术可行性
3.法律可行性
b)需求分析
i.结构化分析SA
ii.面向数据流的分析方法
1.DFD四个组成部分(表示方法、命名)
2.DFD作图:需求描述àDFD
3.层次分解法(保持父图和其子图的平衡)
4.数据字典(符号)
c)软件设计
i.总体设计
1.模块独立性:高内聚
2.作用域是控制域的子集
3.单入单出
4.规模、深度、宽度、扇入、扇出适当
ii.传统设计方法
1.面向数据流的设计方法(数据流图)
a)结构化设计SD-à对应有SD结构化需求分析、SP结构化实现
b)DFDà软件结构(层次图)
i.变换设计
ii.事务设计
c)优缺点
2.面向数据结构的设计方法
a)Jackson方法
b)Jackson图
i.三种元素间的逻辑关系:顺序、选择、重复
ii.可描述两种数据结构:数据结构、程序结构
c)思想:数据结构与程序处理过程相互转换
d)步骤:I/O DSà对应关系àProgram Structureà细化求精
e)优缺点:
i.数据入手
ii.简化数据处理程序的设计
iii.模块与独立性原则没有给予应有的重视
iv.求提供对复杂系统设计过程的支持
3.Parnas方法
iii.详细设计
1.结构化程序设计SP
a)高效率---良结构
b)三种基本控制结构、单入单出
2.过程设计的工具
d)实现/编码
i.语言
1.功能等价
2.描述问题方便性有差异
a)例如:OOPL-——非OOPL
ii.程序设计风格
e)软件测试
i.目标
ii.方法
1.正确性证明
2.静态测试
3.动态测试
a)黑盒(功能)测试
i.等价类划分
ii.边界值分析
iii.错误推测
b)白盒(结构)测试
i.语句覆盖
ii.判定覆盖
iii.条件覆盖
iv.判定-条件覆盖
v.条件组合覆盖
iii.步骤
f)软件维护
i.四种类型
1.校正性
2.适应性
3.完善性
4.预防性
ii.提高可维护性的措施
三、面向对象方法(Object—oriented Method)
a)OOM与CM对比:区别—优点
i.思维方式 iv. 稳定性
ii.可重用性 v。
可维护性
iii.大型软件
b)OOSE方法
i.三个阶段、五个模型、
E CASE
第二章.传统软件工程方法:软件计划
具体任务:项目定义、可行性分析、软件计划
其中:可行性分析:
1、可行性研究实质:可行性研究试一次大大压缩和简化了的系统分析和设计过程,也就是
在较高层次上以较抽象的方式进行的系统分析和设计过程.
2、主要内容:
a)经济可行性:资金有无落实、成本—效益分析
b)技术可行性:开发的风险、资源的有效性、技术方案
c)操作可行性:用户组织内的管理制度、人员素质、操作方式等是否可行。
d)法律及社会可行性
e)开发方案的选择:折衷手段权衡。
3、可行性研究的主要步骤:
a)复查系统规模
b)研究正在使用的旧系统
c)导出高层逻辑模型
d)重新定义问题
e)导出多种解法
f)推荐行动方针
g)草拟开发计划
h)书写文档并提交审查
系统流程图(物理建模工具):会读、读懂.
数据流图:
概述
•描绘系统的逻辑模型的工具
• DFD: Data Flow Diagram
•描绘信息流和数据从输入移动到输出的过程中所经
受的变换
数据从哪里来,到哪里去,经过怎样的处理,保存在哪里
•没有任何具体的物理部件,只是描绘数据在软件中
流动和被处理的逻辑过程。
是系统逻辑功能的图形表
示。
•是分析员和用户沟通的工具是后期设计的出发点
DFD的绘制一般采用自顶向下、逐步细化的方法,主要步骤如下:
·明确系统界面。
识别出那些不受系统控制但又影响系统运行的外部环境.
·绘制基本系统模型.
基本系统模型由若干源点、终点和一个基本处理组成,表明系统对数据加工变换的基本功能。
·逐层细化基本系统模型得到功能级DFD和详细DFD。
下面即分层数据流图。
假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。
对于每个需要再次定货的零件应该列出下述数据;零件编号零件名称、定货数量、目前价格、主要供应者和次要供应者. 零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。
当某种零件的库存数量少于库存量临界值时就应该再次定货。
从问题描述中提取数据流图的四种成分。
首先考虑数据的源点和终点:
•“采购部每天需要一张定货报表”
•“通过放在仓库中的CRT终端把事务报告给定货系统"
可知:
采购员是终点
仓库管理员是源点
接下来考虑处理:
•“采购部每天需要一张定货报表” ——采购部需要报表
•“零件入库或出库称为事务,通过放在仓库中的
CRT终端把事务报告给定货系统.” --事务的后果是改变库存量
可知:
产生报表是一个处理
处理事务是另一个处理
最后考虑数据流和数据存储:
•系统把定货报表送给采购部--——定货报表
•事务需要从仓库送到系统中——--事务---—需把事务数据存储起来
产生报表和处理事务在时间上不匹配,当某种零件的库存数量少于库存量临界值时就应该再次定货,而每天打印一次定货报表-———-需把定货信息存储起来
可知:
定货报表、事务是数据流(数据流如报表包含零件编号零件名称、定货数量、目前价格、主要供应者和次要供应者等信息。
事务包含零件编号、事务类型、数量等.)
库存清单、定货信息是数据存储
基本系统模型:
功能数据流图:注意符号
进一步分解处理事务:
命名
1)为数据流(或数据存储)命名
•名字应代表整个数据流(或数据存储)的内容,而不是仅仅反映它的某些成分
•不要使用空洞的、缺乏具体含义的名字(如“数据"、“信息”、“输入”之类)
•如果在为某个数据流(或数据存储)起名字时遇到了困难,则很可能是因为对数据流图分解不恰当造成的
2 )为处理命名
•通常先为数据流命名,然后再为与之相关联的处理命名,体现了人类习惯的“由表及里”的思考过程
•名字应该反映整个处理的功能
•名字最好由一个具体的及物动词,加上一个具体的宾语组成。
•通常名字中仅包括一个动词
•如果在为某个处理命名时遇到困难,则很可能是发现了分解不当的迹象,应考虑重新分解
应注意的问题
1 )是数据流不是控制流
画数据流不是控制流;数据流图反映系统“做什么”,不反映“如何做”,因此箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序.
2 )一般不画物质流
数据流反映的是能用计算机处理的数据,并不是实物,因此系统的数据流图上一般不要画物质流。
3 )加工的画法
每个加工至少有一个输入数据
数据流图的用途:
1)建立新系统逻辑模型的工具
2)作为与用户和开发人员交流信息的工具
3)作为分析、设计乃至维护的依据
数据字典:
概念
•数据字典是关于数据的信息的集合
• DD: Data Dictionary
•是对DFD中包含的所有元素的定义的集合
•在分析、设计和维护过程中供查阅用
内容
1)数据流
2)数据流分量(即数据元素)
3)数据存储
4)处理(IPO图或PDL更加方便)—-是对上述四类元素的定义
具体信息
•名字-—数据、控制项、数据存储或外部实体的主要名称
•别名——该元素等价的其他名字,尽量减少
•使用地点与方式——使用数据或控制项的处理的列表,以及使用这些对象的方式(例如作为处理的输入,从处理输出,作为数据存储,作为外部实体)
•内容描述——描述数据或控制项内容的符号
•补充信息-—关于数据类型、预置值、限制等的其他信息
软件项目的量化估算
⏹成本估算 & 工作量估算
⏹工程进度安排
行成本估算
阶段成本估算
甘特图:历史悠久、应用广泛的进度计划工具进度安排的任务网络图
优点:简单,能动态地反映开发进展
缺点:难以反映多个任务间的逻辑关系
第三章.传统软件工程方法:需求分析
需求分析
⏹ 1 目标和任务
⏹ 2 需求获取技术
⏹ 3 需求内容
⏹ 4 需求建模方法
需求分析任务
⏹问题分析
⏹需求描述
⏹需求评审
需求建模方法
1.面向数据流的分析方法
2.面向对象的分析方法
3.面向数据结构的分析方法
需求工程的任务
需求开发包含四个过程:需求获取、需求整理与分析、需求定义、需求验证。
需求分析的具体任务:需求获取、确定和分析需求、开发原型系统、编写SRS、需求验证、变更管理、修正计划
软件需求及需求的分类
软件需求:以一种清晰、简洁、一致且无二义性的方式,描述用户对目标软件系统在功能、行为、性能、设计约束等方面的期望,是在开发过程中对系统的约束.(表达做什么而不描述如何做.)
Requirement is the Basics of Quality,软件需求的作用:
①分理解现实中的业务问题,并作为软件设计的基础;②为软件项目的成本、时间、风险估计
提供准确的依据;③少开发工作量,避免将时间与资源浪费在设计与实现错误的需求上;④通提供需求文档和需求基线,来有效的管理系统演化与变更;⑤为顾客与开发团队之间正式合同的一部分;⑥最终的验收测试提供标准和依据
需求的分类:
业务需求à业务需求指导需求获取à用户需求à转化用户需求为系统需求à系统需求
前四个为原始问题空间、后面系统需求为解决方案空间。
业务需求(Business Requirements):客户对于系统的高层次目标要求(highlevel objectives),定义了项目的远景和范畴(vision and scope)
1、业务:属于哪类业务范畴?应完成什么功能?为何目的?
2、客户:软件为谁服务?目标客户是谁?
3、特性:区别于其他竞争产品的特性是什么?
4、价值:价值体现在那些方面?
5、优先级:功能特性的优先级次序是什么?
用户需求(User Requirements):从用户角度描述的系
统功能需求与非功能需求,通常只涉及系统的外部行
为而不涉及内部特性。
系统需求(System Requirements, SR):系统应该提供
的功能或服务,通常涉及用户或外部系统与该系统之
间的交互,不考虑系统内部的实现细节
系统需求的类型分:
功能性需求:描述了系统与其实现环境之间的交互。
环境包括用户和任何其他与该系统进行交互的外部系统。
功能需求可以以不同的详细程度反复编写和细化
功能需求描述应该完整而且一致和准确
完整性意味着用户所需的所有的服务应该全部给出描述
一致性意味着需求描述不能前后矛盾
准确性是指需求不能出现模糊和二义性的地方
非功能性需求:
描述了不直接关联到系统功能行为的系统的方方面面。
从各个角度对系统的约束和限制,反映了客户对软件系统质量和性能的额外要求,如响应时间、数据精度、可靠性等。
可用性(Usability):是一种用户可以学会的操作、输入准备、解释一个系统或者构件输出的状况。
可靠性(Reliability):是系统或构件在给定时间内、指定条件下,完成其要求功能的能力。
性能(Performance):需求要考虑系统的定量属性,比如响应时间,吞吐量、有效性和准确性.可支持性(Supportability):需求关注于在进行部署后系统的变化状况,比如包括可适配性、可维护性、可移植性等。
需求获取技术略
需求分析:分析方法
结构化分析方法SA
核心思想是模块化,自顶向下逐步求精对系统进行分析.
使用多个需求分析视图,建立系统的数据、功能和行为模型
数据流图DFD
加工说明PSPEC
数据字典DD
状态迁移图STD
关联图
E—R图
面向对象分析方法OOA
核心思想是利用OO的概念和方法对软件需求建造模型,以使用户需求逐步精确化、一致化、完全化。
结构化分析建模(与SA区分),就是面向数据流的分析方法
结构化分析方法是一种传统的系统建模技术,它提出来一组提
高软件结构合理性的准则。
结构化分析:使用数据流程图、数据字典、结构化英语、判定
表和判定树等工具,来建立一种新的、称为结构化说明书的目
标文档-需求规格说明书。
结构化分析方法的要点是:面对数据流的分解和抽象;把复杂
问题自顶向下逐层分解
、
其中,只要求数据流图和数据字典。
DFD是描绘系统逻辑模型的常用图形工具。
它描绘了信息流和数据从输入端移动到输出端的过程中所经受的变换。
在DFD中没有具体的物理元素,只是描述信息在系统中的流动、处理和存储的逻辑过程,表明系统必须完成的基本逻辑功能。
DFD中只有四种元素,不包括任何有关物理实现的细节,所以,绝大多数用户可以理解和评价它。
DFD是分析和设计的工具。
实体关系图—E-R图
数据流图--DFD图
状态转换图—STD图
DFD组成成分:
(4)加工分解原则
a)1加工≤7子加工
b)按问题的逻辑特性分解
c)尽量少分解层次
d)分解均匀
模型中还需要描述数据是如何被加工处理的:1、结构化语言 2、判定表 3、判定树判定表:
第四.传统软件工程方法:软件设计中的总体设计.
软件设计两个阶段:概要设计详细设计
作用:SE核心过程
软件设计阶段的任务
从工程管理的角度,分为总体设计阶段和详细设计阶段;
技术的角度,分体系结构设计、数据设计、接口设计和过程设计
总体设计分两个阶段:
① 系统设计阶段
确定系统的具体实现方案.
② 结构设计阶段
确定软件结构
确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
总体设计的重要性:总体设计是软件开发过程中一个非常重要的阶段。
可以肯定,如果软件系统没有经过认真细致的总体设计,就直接考虑它的算法或直接编写源程序,这个系
统的质量就很难保证。
许多软件就是因为结构上的问题,使得它经常发生故障,而且很难维护
什么是好的软件设计
软件质量评价标准:
定性评价:
❑用户角度:达到需求、界面友好、简单易学
❑开发人员角度:良结构、易测试、易维护、可移植…定量评价:软件度量
宏观标准:可靠性良软件结构文档齐全
软件结构
软件的各个组成部分之间的关系的表示,
决定了整个系统的结构和质量
扇出:直接由一个块所控制的块数
扇入:直接调用它的上级块数目
深度:控制的总层数
宽度:跨度最宽层的跨度数
模块化
依据:复杂程度工作量
模块重要特征:
1.抽象:忽略细节,分层理解问题,自顶向下层层细化。
2。
信息隐藏
☞细节隐藏
☞可理解性
☞修改副作用小
☞错误副作用小
模块独立性
度量:耦合—块间联系内聚-块内联系
耦合
零耦合:块间无任何连接
数据耦合:两模块通过参数交换信息,只交换数据。
控制耦合:传递的信息有控制信息(有时以数据形式出现)
公共环境耦合:两个多个模块通过一个公共数据环境相互作用
问题:§ 公共部分的改动将影响所有调用它的模块
§ 公共部分的数据存取无法控制
§ 复杂程度随耦合模块的个数增加而增加
内容耦合:
⏹一个模块访问另一个模块的内部数据
⏹一个模块不通过正常入口而转到另一个模块的内部
⏹两个模块有一部分程序代码重叠(只可能出现在汇编程序中)
⏹一个模块有多个入口
耦合度与软件结构
原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。
内聚
高内聚意味着松耦合,内聚更重要
偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚
内聚度与软件结构
软件模块分解的过程:
业务域分解/问题域分解
领域专家,企业战略;系统à子系统
业务功能域分解
服务,资源;子系统拆分为多个服务
技术域分解
功能需求和非功能需求,当前IT技术;业务域和业务功能域分解出的元素进行整合在模块分解时,要注意以下几点:
n 低耦合高内聚:“从弱耦合入手,切断联系"
n 层次性:先业务后技术,循序渐进
n 正交原则:相互独立,职责没有重叠
n 抽象原则
n 稳定性原则
n 复用性原则度量
(迭代演化面向对象)
软件度量
度量测量估算
软件度量
⏹软件复杂性度量
❑规模
❑文本复杂性
❑控制结构的复杂性
⏹软件可靠性度量
❑系统故障率
❑软件修复与软件有效性
❑软件可靠性估算
软件设计的启发规则
1.提高模块独立性
❑松耦合,高内聚
❑增加内聚,减少耦合
2。
模块规模适中
3.深度/宽度/扇入/扇出适当
4。
作用域在控制域内
☞控制域:模块本身以及所有直接或间接从属于它的模块的集合
☞作用域:受该模块内一个判定影响的所有模块的集合
⏹修改软件结构
❑判断点上移
❑受影响块下移
5。
降低接口的复杂程度
❑接口复杂可能表明模块的独立性差
❑接口复杂或不一致(看起来传递的数据间无联系),是紧耦合或低内聚的征兆
6、单出单入,避免内容耦合
7、模块功能可预测
❑相同输入必产生相同输出
❑模块中使用全局变量可能导致不可预测
软件结构划分方式
水平划分
⏹按主要功能定义模块结构的各分支
⏹顶层控制模块,下层输入、处理、输出三个分支
⏹优点:功能分离,易修改扩充
⏹缺点:模块接口传递数据多,信息流的整体控制复杂化
垂直划分
⏹自顶向下逐层分布工作
⏹顶层模块控制,低层模块实际处理
⏹优点:对低层模块的修改不易引起副作用
⏹便于将来的维护
软件系统设计技术
面向数据流(DFD)的设计方法
面向数据结构的设计方法
原型法
结构化设计(Structured Design, SD)
基于模块化、自顶向下求精、结构化程序设计技术基础上发展起来
面向数据流的设计方法
数据流图映射到软件结构
用启发式规则对结构进行细化
面向数据流的设计方法(结构化设计SD)
软件结构设计中的图形工具
Ø层次图(H图)——-——系统结构图; ------Hierarchy
⏹描述软件结构,而非数据结构
⏹矩形框:模块
⏹连线:调用关系,而非组成关系
Ø HIPO图=H图+IPO表
⏹H图 + IPO图(Input-process—output Diagram)
⏹在H图中,除最顶层方框外,在每一个方框内加上一个编号,编号次序依次为:1。
0,2.0,…;
2.1,2.2,…;3。
1,
3.2…
⏹对于H图中的每一个方框,有一张IPO图描述这个方框所代表模块的处理过程
Ø结构图-————-模块联系图
1。
结构图是软件结构设计的另一种工具,与层次图类似。
2.它在层次图的每一个方框内注明的是模块的名字或主要功能。
3。
方框之间的直线表示模块的调用关系。
4。
用带注解的箭头表示模块调用过程中传递的信息
基于数据流(SD )的设计方法
又称为结构化设计方法;
目标:给出设计软件结构的一个系统化途径;
作用:该方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构图。
另注:通过结构化分析来得到DFD,SA是结构化需求分析、SD是结构化设计、SP是结构化实现
数据流的类型:变换流、事务流、混合型
1.变换流:所有信息都可以归结为变换流
变换流参看图形,信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经过加工处理以后再沿输出通路变换成外部形式离开软件系统。
当数据流具有这些特征时,这种信息流称为变换流。
变换型的软件结构图
2。
事务流:当信息流具有明显的“事务中心”时,可归结为事务流
输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。
这种“以事务为中心的”的数据流,称为“事务流”。
T称为事务中心
n 接收输入数据;
n 分析每个事务以确定它
的类型;
n 根据事务类型选取一条
活动通路
事务型软件结构图
3.混合型,兼具两种特征.
面向数据流方法的设计过程
一定要重点看总体设计部分后面的P140左右的例题
第五.传统软件工程方法:软件设计中的详细设计
详细设计的任务
结构化程序设计
详细设计的工具
面向数据结构设计
人机界面设计
详细设计说明书
程序复杂性的度量
详细设计的任务:
1。
用伪代码、图或表等工具描绘每个模块的算法流程.
2.确定每个模块的局部数据结构、数据库的物理结构、模块间的接口和输入输出数据
3。
为每个模块设计测试用例,使得编码阶段对具体模块的调试测试更加方便
4。
编写详细设计说明书
结构化程序设计(SP结构化实现,与结构化设计SA区分)
a) 高效率—-—良结构
b)三种基本控制结构、单入单出
程序代码仅使用顺序、选择和循环这三种基本的控制结构进行连接,且每个代码块只有一个
入口和一个出口,只在检测错误和退出循环处使用非基本结构技术。
详细设计的工具
图形描述
程序流程图( PFC)趋势是使用的人越来越少.
优点:直观清晰、广泛易学
缺点:不能逐步求精,不易表示数据结构,随意转移控制造成非结构化盒图( N-S)
本质上的改进是没有箭头,不能随意转移控制。