软件工程导论思维导图
2022-05-10 21:17:13 0 举报
AI智能生成
软工导论张海藩第六版-考研
作者其他创作
大纲/内容
实现
导述
编码和测试统称为实现,所谓编码就是把软件设计结果翻译成某种程序设计语言书写的程序
程序质量主要取决于软件设计的质量
测试的工作量占40%
测试是保证软件质量的关键步骤
编码
选用的程序设计语言的特点及编程风格也对程序的可靠性、可读性
、可测试性和可维护性产生深远的影响——靠读测维
、可测试性和可维护性产生深远的影响——靠读测维
编码的规范(风格),公司都会有自己的规范
5个
语数文输效
程序内部的文档
数据说明
语句构造
输入输出
效率
主要指处理机时间和存储器容量两个方面
原则
是性能要求
是靠好的设计来提高
程序的效率和程序的简单程度是一致的,
不要牺牲程序的清晰性和可读性来不必要的提高效率
不要牺牲程序的清晰性和可读性来不必要的提高效率
测试
暴露问题并不是软件测试的最终目的,发现问题是为了解决问题
根本目的
尽可能多的发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用
定义(目的)
为了发现程序中的错误而执行程序的过程
好的测试方案极可能发现迄今为止尚未发现的错误的测试方案
成功的方案是发现尚未发现的错误的测试
准则
6个
所有测试都应该追溯到用户需求
应远在测试开始之前就制定出测试方案
需制先2穷3
步骤
单元测试
集成测试
系统测试
验收测试(确认测试)
平行运行
关系重大的软件产品在验收后往往不立即投入生产性运行,而是要再经过一段平行运行时间的考验
单元测试
集中检测软件设计的最小单元-模块。主要使用白盒测试技术。
模块内聚程度高可以简化单元测试过程。如果每个模块只能完成一种功能,则需要测试的方案数量将明显减少,模块中错误也易于预测和发现
对多个模块的测试可以并行的进行
测试重点
5个
接据执处边
模块接口
局部数据结构
重要的执行通路
出错处理通路
边界条件(最重要)
测试方法
计算机测试
单元测试需要开发驱动软件和(或)存根软件(桩模块)
人工代码审查测试
(人工)代码审查比计算机测试的优点
一次人工代码审查可以发现许多问题,用计算机测试发现问题之后,
通常需要先修改这个错误才能继续测试,因此错误是一个一个发现并改正的
通常需要先修改这个错误才能继续测试,因此错误是一个一个发现并改正的
集成测试
是测试和组装软件的系统化技术
主要目标是发现与接口有关的问题(如:数据穿过接口丢失)
模块组装成程序时有两种方法
非渐增式测试
定义
先分别测试每个模块,再把所有模块按要求组装在一起
渐增式测试(普遍采用)
定义
把要测试的模块同已经测试好的模块结合起来测试,测试完以后再把下一个应该测试的模块结合起来
自顶向下
缺点
(一种的缺点即另一方的优点)
(一种的缺点即另一方的优点)
4个
需要存根程序
可能遇到与此相联系的测试困难
低层关键模块中的错误发现较晚
早期不能充分展开人力
优点
3个
不需要测试驱动程序
能够在测试阶段的早期实现并验证系统的主要功能
能在早期发现上层模块的结构错误
定义
从主控制模块开始,沿着程序的控制层向下移动,逐渐把各个模块结合起来
自底向上
优点
对应自顶向下的缺点
缺点
自顶向下的优点
定义
从软件"原子"模块开始组装和测试
混合策略
改进的自顶向下测试方法
因为基本上都使用自顶向下
混合法(三明治法)
回归测试
是指重新执行已经做过的测试的某个子集
系统测试
验收测试(确认测试)
目标
验证软件的有效性
验证指
保证软件正确的实现了某个特定要求的一系列活动
确认指
为了保证软件确实满足了用户需求而进行的一系列活动
有效性定义
如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的
软件需求规格说明书是进行确认测试的基础
确认测试以用户为主进行,通常使用黑盒测试法,这个阶段发现的
问题往往和需求分析阶段的差错有关,涉及面比较广,解决起来比较困难
问题往往和需求分析阶段的差错有关,涉及面比较广,解决起来比较困难
Alpha测试
是在受控的环境中进行的,开发者指导用户测试
Beta测试
软件最终用户在一个或多个客户场所进行,开发者不在Beta测试场所
白盒测试
定义
是测试用例设计方法。盒子指被测试的软件,白盒指盒子是可视的,即清楚盒子内部的东西,和里面如何运作
测试数据和预期的输出结果称为测试用例,最困难的问题是设计测试用的输入数据
逻辑覆盖
是逐渐进行越来越完整的通路测试过程的总称
逻辑覆盖由强到弱
各种逻辑覆盖的测试用例怎么设计
控制结构测试
基本路径测试
步骤
根据过程设计结果画出相应的流图
计算流图的复杂度,数是多少,即有多少独立路径(注意独立路径结果不唯一)
确定线性独立路径的基本集合(独立路径至少要包含一条在定义该路径之前不曾用过的边)
条件测试
循环测试
黑盒测试
区别
白盒检测软件逻辑结构,黑盒检测软件功能
白盒测试前是测试者完全知道程序的结构和处理算法,而黑盒则是把程序看成一个和黑盒,不考虑内部和处理
白盒在测试的早期进行,黑盒主要用于测试过程的后期
使用的技术方法不同,白盒主要有逻辑覆盖、路径测试。
黑盒主要是等价类划分、边界值分析
黑盒主要是等价类划分、边界值分析
技术种类
等价类划分
首先划分输入数据的等价类,从而确定输入数据的有效等价类和无效等价类,
还需要分析输出数据等价类,以便根据输出数据等价类,导出对应的输入数据的等价类
还需要分析输出数据等价类,以便根据输出数据等价类,导出对应的输入数据的等价类
边界值分析
处理边界情况是程序最容易发生错误,通常设计测试方案时,总是联合等价类划分和边界值分析两种技术
错误推测
很大程度上靠直觉和经验进行
选择输入组合的
一个有效途径是利用判定表或判定树为工具,另一个是把计算机测试和人工测试相结合
一个有效途径是利用判定表或判定树为工具,另一个是把计算机测试和人工测试相结合
测试用例的设计
调试(改bug)
是在测试发现错误之后排除错误的过程,是软件开发过程最艰巨的脑力劳动
途径
蛮干法
回溯法
原因排除法(包括对分查找法,归纳法,演绎法)
可靠性
定义
程序在给定时间内,按照规格说明书的规定,成功运行的概率
可用性
是指程序在给定的时间点,按照规格说明书的规定,成功运行的概率
估计错误的方法
植入错误法
分别测试法
补充:软件评审
定义
对软件元素或者项目状态的一种评估手段,以确定是否与计划的结果保持一致,并使其得到改进
阶段
需求评审
功能~
质量~
成本~
维护~
意义
可以组织项目组集体的力量,对软件相关内容进行合理分析,
尽可能的在软件的生命周期发现并解决问题,所以软件评审极为重要
尽可能的在软件的生命周期发现并解决问题,所以软件评审极为重要
课外
V模型
p59
测试和调试的区别
目的+进行时间+方法+人员+难度p81
4个测试的目的
p101
测试的生命周期是啥
p101
v模型
p59
什么是测试用例
为某个特殊目标而编写的一组测试输入,执行条件和预期结果,以便测试某个程序是否满足某个特定需求,它包括测试数据和预期结果
软件既正确又不可靠
一个程序在预定环境能正确完成预期的功能,但在意外情况下不能做适应的响应
维护
导述
是软件生命周期的最后一个阶段
基本任务
基本任务是保证软件在一个相当长的时间能够正常运行
大型软件维护成本是开发成本的4倍
定义
是软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程
种类
改正性维护
适应性~
完善性~(占最多)
预防性~(占最少)
特点
3个
结构化维护与非结构化维护差别巨大
维护的代价高昂
维护的问题很多
解释下结构化~
结构化维护:有一个完整的软件配置
非结构化维护:软件配置的唯一成分是程序代码
过程
5个
建立维护组织
书写维护报告
制定维护的事件流
保存维护记录
评价维护活动
基本途径
修改软件设计、复查、必要的代码修改、单元测试和集成测试、验收测试和复查
可维护性
定义
维护人员理解、改正、改动或改进这个软件的难易程度
决定他的因素
可理解性
可测试性
可修改性
可移植性
可重用性
文档
文档是影响软件的决定因素,文档比代码更重要,文档也需要被维护
分为
用户文档
描述系统功能和使用方法
系统文档
描述系统设计、实现和测试等内容
可维护性复审
代码复审应该强调编码风格和内部说明文档这两个影响可维护性因素
预防性维护
本质上是软件再工程
软件再工程过程
即软件重构,是一个循环模型
库存目录分析
面向对象方法学引论
导述
面向对象技术是当前最好的软件开发技术
原则
使描述问题的问题域与实现解法的求解域在结构上尽可能一致
优点
5个
人稳重易维
人稳重易维
与人类习惯的思维方法一致
稳定性好
可重用性好
较易开发大型软件产品
可维护性好
人们把客观世界的实体抽象为问题域中的对象
软件系统本质是信息处理系统
面向对象的概念
对象
对象是具有相同状态的一组操作的集合,对象是对属性值和操作的封装
特点
5个
数主封并读
数主封并读
以数据为中心
对象是主动地
实现了数据封装
本质上具有并行性
模块独立性好
其他概念
类
对具有相同数据和相同操作的一组相似对象的定义
实例
某个特定的类所描述的一个具体的对象的定义
属性
类中所定义的数据
封装
对外界隐藏了对象的实现细节,即信息隐藏
继承
能够直接获得已有的性质和特征,而不必重复定义他们
多态性
重写
重载
面向对象建模
通常需要建立对象模型、动态模型、功能模型,这三种必不可少,但对象模型是最重要、最基本、最核心的
对象模型
表示静态的、结构化的系统的数据性质,其为建立动态模型和功能模型提供了实质性的框架
使用UML提供的类图来建立对象模型
类与类之间的关系
4个
关联
两个类之间有语义上的联系
聚集
也称聚合,是关联的特例
泛化若通用元素消失则具体元素消失
分为
一般聚集
共享聚集
一般叫聚合
组合聚集
一般叫组合
泛化(继承)
依赖
一个类使用另一个类的对象作为操作的参数,一个类用另一个类的对象作为它的数据成员
细化
对同一事物在不同抽象层次上描述
动态模型
用UML的状态图来描绘对象的状态、触发状态转换的事件以及对象的行为
功能模型
表示变化的系统的“功能”性质,他指明了系统应该做什么,
因此更直接的反映了用户对目标系统的需求
因此更直接的反映了用户对目标系统的需求
用例图中的用例是一个类,他代表一类功能而不是使用该功能的某个具体实例
通常功能模型由一组数据流图组成
UML提供的用例图也是进行需求分析和建立功能模型的强有力工具,在UML中把用例图建立起来的模型称为用例模型
用例图
用例是一个类,他代表一类功能而不是使用该功能的某个具体实例
行为者
用例之间的关系
扩展
使用
怎么画
3种模型的关系
5个
子主题
面向对象分析
导述
所有分析过程都是提取需求的过程,包括:理解,表达,验证
面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程
开发大型项目,人们习惯按问题域把系统划分成几个不同的主题,而不是传统方法的按功能分解
基本过程
3个子模型
对、动、功
在对象模型中定义每个类的服务前,应该先建立动态模型和功能模型,
通过这两种模型,正确的确定每个类应该提供的服务(下面功能模型任务中添了两个步骤的原因)
通过这两种模型,正确的确定每个类应该提供的服务(下面功能模型任务中添了两个步骤的原因)
过程
(在建立对象模型5个主要活动中,加了建立,动、功)
(在建立对象模型5个主要活动中,加了建立,动、功)
寻找类与对象->识别结构->识别主题->定义属性->建立动态模型->建立功能模型->定义服务
建立对象模型
5个层次
主题层
识别主题
(5个层次对应的工作)
(5个层次对应的工作)
类与对象层
找出类与对象
结构层
识别结构
属性层
定义属性
服务层
定义服务
为什么面向对象分析的首要功能呢过是建立问题域的对象模型?
对象模型表示了目标系统的静态数据结构,而静态数据结构对应用细节依赖较少,比较容易确定,也比较稳定
建立动态模型
包括
状态图
顺序图(时序图)
活动图
编写脚本的目的
脚本
事件跟踪图
是扩充的脚本,可以认为它是简化的UML顺序图
建立功能模型
怎么画
需求陈述
内容
包括问题范围、功能需求、性能需求。应用环境及假设条件
它可繁可简,仅仅是为理解客户需求的开发点,是非正式的,并不是一层不变的文档
面向对象设计
导述
面向对象设计(OOD)是用面向对象观点建立求解域模型的过程
分析和设计是多次反复迭代的过程,他与分析界限很模糊
设计准则
优秀的软件设计的一个主要特点就是容易维护
准则
6个
模块化
抽象
信息隐藏
弱耦合
交互耦合因松散
继承耦合应紧密
强内聚
可重用
启发规则
6个
软件重用
概念
重用又叫再用或复用,是指同一事物不做修改或稍加修改就多次重复使用
含义
尽量使用已有的类
需要创建新类,则在设计新类的协议时,考虑将来的可重复实用性
具体划分重用
软件重用
知识重用
方法和标准的重用
软件成分的重用
代码重用
源代码剪切
源代码包含
源代码继承
设计结果重用
分析结果重用
可被重用的成分
10个
类构件
可重用软构件应具备的特点
3个
类构件的重用方式
3个
系统分解
系统分解成许多子系统,面向对象设计模型分成
人机交互子系统
问题域子系统
任务管理子系统
数据管理子系统
子系统交互方式
客户-供应商关系
平等伙伴关系
子系统组织方式
水平层次组织
垂直块组织
补充
在软件系统所完成的任务中,有些任务是顺序完成的,而有些任务必须
以并发交替的方式来完成,而任务管理子系统就是来调度任务完成的顺序
以并发交替的方式来完成,而任务管理子系统就是来调度任务完成的顺序
设计关联有两种方式
单项遍历
双向遍历
原型开发时都是双向
面向对象实现
导述
面向对象程序中特有的封装、继承和多态等机制,也给面向对象测试带来一些新特点,增加了测试和测试的难度
面向对象语言
面向对象设计的结果既可以用面向对象语言,也可以用非面向对象语言实现
究竟如何选择,关键不在语言功能强弱,也不在于方便性,而是语言的一直表达能力,可重用性及可维护性
究竟如何选择,关键不在语言功能强弱,也不在于方便性,而是语言的一直表达能力,可重用性及可维护性
技术特点
7个
面向对象程序设计风格
提高可重用性的准则
7个
提高可扩充性的准则
4个
提高健壮性的准则
4个
测试策略
面向对象单元测试最小的单元是封装的类和对象,测试面向对象软件时,
不能孤立地测试单个操作,而应该把操作作为类的一部分来测试
不能孤立地测试单个操作,而应该把操作作为类的一部分来测试
集成测试的两种策略
基于线程的测试
基于使用的测试
确认测试主要根据动态模型和描述系统行为的脚本来设计确认测试用例
设计测试用例
面向对象测试关注于设党的操作序列已检查类的状态
测试类的方法
随机测试
划分测试
基于故障的测试
子主题
软件项目管理
导述
管理定义
管理就是通过计划、组织和控制等一系列活动,合理的配置和使用各种资源,以达到既定目标的过程
软件项目管理优先于任何技术活动之前开始并且贯穿于软件的整个生命周期之中
软件项目管理过程从一组项目计划活动开始,而制定计划的基础是工作量估算和完成期限估计
估算软件项目规模
为了估算项目的工作量和完成期限,首先需要估算软件的规模
方法
代码行技术
根据以往开发类似产品的经验和历史数据,估计实现一个功能所需的源程序行数
优点
代码是所有软件项目都有的产品,而且很容易计算代码行数
缺点
源程序仅是软件配置的一个成分,用他的规模代表整个软件的规模不太合理
用不同语言实现同一个软件所需要的的代码行数并不相同
这种方法不适合用于非过程语言
功能点技术
以功能点(FP)为单位为度量软件规模
工作量计算
工作量估算模型
3种
静态单变量模型(基本的COCOMO模型)
静态多变量模型(COCOMO2模型、中级结构的COCOMO)
动态多变量模型(putnam模型)
没有一个估算模型可以适用于所有类型的软件
工作量通产的单位
人月(pm)
进度计划
gantt(甘特图)
是制定进度计划的工具
优点
能形象的描绘任务分解情况,直观简明和容易掌握,容易绘制
缺点
3个
网络工程
是制定进度计划时另一种常用的图形工具,是系统分析和系统设计的强有力工具
应同时使用gantt图和网络工程这两种工具制定和管理进度计划,使他们互相补充,取长补短
人员组织
民主制程序员组
主程序员组
现代程序员组
质量保证
软件质量
就是软件与明确地和隐含地定义的需求相一致的程度
质量保证措施
3个
软件配置管理
贯穿整个生命周期,是在软件整个生命期内管理变化的一组活动,用来标识,控制,报告变化,确保适当的实现了变化
基线定义
通过了正式复审的软件配置项,可以作为进一步开发的基础,只有通过正式的变化控制过程才能改变它
5项主要任务
标识对象
版本控制
变化控制
配置审计
状态报告
能力成熟模型(CMM)
用于评价软件机构的软件过程能力成熟度的模型,用于帮助软件开发机构建立一个有规模的,成熟的软件过程
有五个等级(从低到高)
初始级
可重复级
已定义级
已管理级
优化级
概述
导述
为什么要有这门学科
为了更有效的开发和维护软件,研究消除软件危机的途径
历史中软件经历的阶段
规模较小的程序,为每个具体应用而专门编写,只保存程序清单
软件作坊
软件工程阶段(现在)
软件危机
定义
计算机软件的开发和维护过程中所遇到的一系列严重问题
包含的问题(概括)
3个
如何开发软件,以满足对软件日益增长的需求
如何维护数量不断膨胀的已有软件
软件危机具有长期性和症状不明显的特征
典型表现(问题的直接体现)
7个
估质满维文成产
软件开发成本和进度常常不准确
用户对已完成的软件系统不满意常有
软件产品质量靠不住
软件通常没有适当的文档材料
软件成本在计算机系统总成本所占比例逐年上升
软件开生产率提高的速度,跟不上计算机应用的迅速普及的趋势
产生原因
根本
与软件本身的复杂特性特点有关
主要
和软件开发与维护的错误方法有关
开发和维护的错误认识和做法
主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等
解决软件危机的措施
3个
使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更有效的技术和方法
应该开发和使用更好的软件工具
有必要的组织管理措施
软件产品的配置分别是什么
主要包括
程序,文档和数据
程序
能够完成预定功能和性能的可执行的指令序列
数据
使程序能够适当的处理信息的数据结构
文档
是开发、使用和维护程序所需要的图文资料
软件工程
定义
IEEE定义
①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件,②研究①提到的途径
特性(特征)
7个
构变复用文效合
关注于大型程序的构造
中心课题是控制复杂性
软件经常变化
开发效率很重要
和谐合作是开发的关键
软件要有支持的用户
一种文化背景替另一种文化背景创造产品
基本原理
7个
人生控程改评审
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代化程序设计技术
结果应该能清楚的审查
开发小组的人员应该少而精
承认不断改进软件工程实践的必要性
软件工程方法学
通常把软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型
3要素
方法、工具和过程
方法
是完成软件开发的各项任务的技术方法,回答“怎么做”的问题
工具
为应用方法而提供的自动或半自动的软件工程支持环境
过程
为了获得高质量的软件所需要完成的一系列任务的框架,他规定了完成各项任务的工作步骤
传统方法学(结构化范型)
定义
传统方法学也称为生命周期方法或结构化范型。采用结构化技术来完成软件开发的各项任务,
并使用适当的软件工具或软件工程环境来支持结构化技术的运用
并使用适当的软件工具或软件工程环境来支持结构化技术的运用
文档的作用
5个
通备能记结
优点
把软件生命周期划分成若干个阶段,每个阶段相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个开发的难度
缺点
①传统方法学要么面向处理要么面向数据,②当软件规模庞大,或者对软件的需求是模糊的或随时间变化而变化时,使用传统方法学开发软件往往不成功,并且维护起来很麻烦。③基于功能分解,但功能需求变化时,要引起软件结构的整体修改,稳定性差。
面向对象方法学
要点
对象
类
继承
消息通信
优点
传统方法学强调自顶向下顺序的完成软件开发的个相阶段任务,但面向对象则是主动多次反复迭代的演化过程
面向对象有特有的继承性和多态性,进一步提高了面向对象软件的可重用性
以对象为核心,将数据和操作封装在一起,这使得问题域和求解域一致,容易理解
基于对象分解,但需求变化时,只会进行局部性修改
软件生命周期
定义
从软件产品开始,直到该软件被淘汰的过程
软件定义
问题定义
可行性研究
需求分析
软件开发
总体设计
详细设计
编码和单元测试
综合测试
运行维护
软件过程
定义
软件过程是为了获得高质量软件所需要的完成的一系列任务的框架,他规定了完成各项任务的工作步骤
用生命周期模型描述软件过程,也称过程模型
生命周期模型(过程模型)
8个
瀑布模型
特点
优点
文档驱动,既是优点,又是缺点
他有反馈环,快原没有
快速原型模型
优点
能线性开发的原因?
增量模型
优点
螺旋模型
怎么构成的
优点
喷泉模型
特性
Rational统一过程
是一个二维的生命周期模型
RUP和极限编程的对比
敏捷过程和极限编程
初衷
为了有更高效工作和快速响应变化的能力
极限编程
是其中最有名的的一个
极限就是说把好的开发实践运用到极致
适合小项目
微软过程
适合于商业环境下,资源有限,时间有限
对方法、工具和产品等方面不如RUP和敏捷全面
课外
1.软件工程出现为了解决什么问题
作用+危机前两个
2.为什么传统方法开发复杂软件难以维护,面向对象却能很好维护
传统缺点3个+面对优点4个
3.软件就是程序为什么错
p95,3个
4.结构化方法为什么是结构的
只有三种基本结构,设计出来的是单入口,单出口的程序
5.什么是里程碑,他的特征是什么
是用来说明项目进展情况的事件,把开发的结束或一线开发任务的完成叫一个里程碑
特征:与开发进度密切相关,里程碑可见性要高
6.对螺旋的理解
组成+执行过程+优点
7.迭代开发和增量开发的异同
8.各个过程的适合场景
9.为什么分阶段的生命周期有助于软件项目管理
10.喷泉模型为什么体现了面向对象开发过程的无缝和迭代
11.RUP优缺点
问题定义
初步确定规模和目标
可行性研究
可行性研究的任务
目的(任务)
用最小的代价在尽可能短的时间内确定问题是否能够解决
最根本的任务
对以后的行动方针提出建议
实质
进行一次大大压缩简化了的系统分析和设计的过程,也就是在比较高层次上,以比较抽象的方式进行的系统分析和设计的过程
从哪些方面研究
4个
技术可行性
经济可行性
操作可行性
社会可行性
可行性研究过程
研究过程
8个,这是过程,不能颠倒顺序
复正导问选行开文
1.复查系统规模和目标
2.研究目前正在使用的系统
3.导出新系统的高层逻辑模型
4.进一步定义问题
5.导出和评价供选择的解法
6.推荐行动方针
7.草拟开发计划
8.书写文档提交审查
需要的三个工具
系统流程图
作用
了解和分析现有的系统
他是概括的描述物理系统的传统工具,表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程
数据流图
定义
描绘数据在软件中流动和被处理的逻辑过程
用途
作为交流的工具
作为分析和设计的工具,面向数据流的设计方法基础是数据流图
原则
分层时必须保证信息连续性
合适的“处理”的个数5-9个
怎么画
1.从问题描述中提取4种成分
2.从高层次画数据流图,先将终点和原点,处理,数据流联系起来
3.描绘主要功能,就是把“处理”主要功能画出来,将数据储存添加进去
4.对主要功能进一步细化
数据储存和数据流都是数据,仅仅是所处的状态不同
数据流图与程序流程图的箭头所表示的控制流有本质不同
数据字典
与数据字典的关系
数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不合格,然而没有数据流图,数据字典也难以发挥作用
用途
5个
分不用控库
作为分析阶段的工具
有助于改进分析员和用户之间的通信
有助于改进在不同人员或不同的开发小组之间的通信
包含的每个数据元素的控制信息很有价值
数据字典是开发数据库的第一步
定义
数据的信息的集合,对数据流图的所有元素的集合
包含
数据流
数据流分量(数据元素)
数据存储
处理
成本/效益分析
成本分析
三种技术
代码行技术
任务分解技术
自动估计成本技术
效益分析
课外
1.项目开发计划
估算:对项目量和完成期限的估算
范围:包含软件功能,性能,系统接口
资源:人员资源,硬件,,进度安排,详细开发进度表
2.数据字典和数据流图的关系
2个定义+关系
3.DFD没有结点可达性
不描述控制,两个处理可能没有通路
不同输入会生成不同输出数据
一个处理的输出不用做另一个处理的输入
需求分析
目的(为什么要需求分析)
为了开发真正满足用户需求的产品,准确定义未来系统的目标,确定系统必须做什么
软件定义时期的最后一个阶段
任务
基本任务
准确回答“系统必须做什么”,
对目标系统提出完整、准确、清晰、具体的要求
对目标系统提出完整、准确、清晰、具体的要求
任务
1.对系统综合要求(准则)
8个
性功可错接约逆将
功能需求
性能需求
可靠性和可用性需求
出错处理需求
接口需求
约束
逆向需求
将来可能提出的要求
2.分析系统的数据要求
通常用数据模型E-R图来分析
3.导出系统的逻辑模型
4.修正系统开发计划
获取需求的方法
访谈
最早开始用,也是应用最广泛的,访谈的两种方法:发调查表和使用情况分析技术
面向数据流自顶向下求精(结构化分析方法)
把分析过程中数据元素的信息记录在数据字典中,算法记在IPO图中
简易的应用规格说明技术
这种方法使用户和开发者密切合作,解决了访谈和结构化方法中存在的用户与开发者分离的特点
快速建立软件原型
这是最准确,最有效,最强大的需求分析技术
快速原型
定义
快速建立起来的旨在演示目标系统主要功能的运行的程序
要点
实现用户看得见的功能,省略目标系统看不见的功能
特性
快速
容易修改
为了快速修改原型,使用的方法和工具
第四代技术
可重用的软件结构
形式化规格说明
分析建模与规格说明(需求分析阶段应该得到的东西)
规格说明书
在需求分析阶段得出的最主要的文档(自然语言书写)
模型
应该建立的模型
模型
为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
逻辑模型
数据模型
实体-联系图(E-R图)
3种成分
数据对象(矩形)(就像java对象)
属性(圆角矩形)
联系(菱形)(联系也有可能有属性)
怎么画
功能模型
数据流图
行为模型
状态转换图(状态图)
作用
描述系统的状态及引起系统状态转化的事件,来表示系统的行为,还指明了作为特定事件的结果(系统将做哪些动作)
状态
定义:是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模型
事件
定义:是在某个特定时刻发生的事情,它是对引起系统做动作和一个状态转换另一个状态的事件的抽象
符号
怎么画
数据规范化
范式
定义消除数据的冗余的程度
第一范式冗余最大,第五范式冗余最小,大多数选用第三范式比较恰当
其他用于需求分析的工具
层次方框图
用树型结构描绘数据的层次结构
warnier图
也是用树形结构描绘信息,但比层次方框图提供了更丰富的绘图手段
IPO图
在需求分析阶段,简略的描述系统的主要算法,在详细设计阶段进一步补充修正
是输入,处理,输出图的简称,能够方便地描绘输入数据,数据的处理和输出数据之间的关系
验证软件需求
从4个方面
一完现有
一致性
所有需求必须一致,不能互相矛盾
完整性
需求必须完整包括用户的需求
现实性
指定的需求应该是用现有的技术可以实现的
有效性
需求必须正确有效,能解决用户问题
课外
建立原型的好处
p89
总体设计
导述
基本目的
回答“概括的说,系统应该如何实现”
任务
通过这个阶段的工作,划分出组成系统的物理元素
设计软件的结构,确定系统中每个程序是由哪些模块组成的,以及模块之间的关系
设计过程
过程由两个构成
系统设计阶段
结构设计阶段
步骤
9个
设选推功,接数测文查
设想供选择的方案
选取合理的方案
推荐最佳方案
功能分解
设计软件结构
设计数据库
制定测试计划
书写文档
5个
系实用测数
系统说明
用户手册
测试计划
详细的实现计划
数据库设计结果
复查和审查
设计原理
5个
模块化
定义
把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,
把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
好处
5个
清试靠修组
采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解
使软件容易测试和调试
有助于提高软件的可靠性
提高软件的可修改性
有助于开发工程的组织管理
抽象
定义
抽出事物的本质特性而暂时不考虑他们的细节
与软件过程的关系
软件过程的每一步都是对软件解法的抽象层次的一次精化
逐步求精
定义
是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础
求精实际是细化过程,抽象和求精是一对互补的概念
信息隐藏和局部化
模块独立
定义
是模块化,抽象,信息隐藏和局部化概念的直接结果
为什么模块独立很重要(作用)
有效地模块化的软件比较容易开发出来
独立的模块比较容易测试和维护
耦合和内聚
耦合
定义
是衡量不同模块彼此间相互依赖的紧密程度。
耦合的强弱
耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据
低到高耦合
内聚
定义
衡量一个模块内部各个元素彼此结合的紧密程度
内聚程度由高到低
开发者应追求低耦合,高内聚,内聚更重要。
无连接的耦合最低,但几乎不可能实现
无连接的耦合最低,但几乎不可能实现
启发规则
7个
独规作适接预单
改进软件结构提高模块独立性
模块规模应该适中
深度、宽度、扇入、扇出都应该适当
模块作用域应该在控制欲之内
力争降低模块接口的复杂程度
设计单入口单出口的模块
模块功能应该可以预测
一些概念
模块作用域
受该模块内一个判定影响的所有模块的集合
模块控制欲
这个模块本身以及所有直接或从属他的模块的集合
深度
软件结构中控制的层数
宽度
软件结构内同一个层次上的模块数量
扇出
一个模块直接控制的模块数量
扇入
表示该模块的被调用次数多
描述软件结构的图形工具
层次图
层次图的连线表示调用关系,层次方框图的连线表示组成关系
层次图适合在自顶向下的设计软件的过程中使用
HIPO图
和层次图的区别就是它多编号
结构图
是进行软件结构设计的另一个有力工具
一个方框,代表一个模块,之间的箭头表示模块调用关系,带注释的箭头来表示模块调用过程中来回传递的信息
层次图和结构图并不严格表示模块的调用次序,层次图和结构图并不指明什么时候调用下层模块,层次图和结构图只表明一个模块调用哪些模块
面向数据流的设计方法
目标是给出设计软件结构的一个系统化的途径,信息流包括变换流与事务流
需求分析阶段的出的数据流图是总体设计极好的出发点,如果数据流图已经细化到适当的层次,则可以直接从数据流图映射出软件结构,这就是面向数据流设计的方法
指定测试计划和设计测试用例并不一样
在总体设计阶段制定测试计划,但此时还没有具体代码,所以不能具体的写出每条测试用例
详细设计
导述
根本目的
确定应该怎样具体地实现所要求的的系统
任务
过程设计
每个模块包含的算法
数据设计
软件中所需的数据结构
接口设计
各个模块之间的通信方式
详细设计的结果基本决定了最终的程序代码的质量
衡量程序的质量,不仅要看他的逻辑是否正确,性能是否满足要求,更重要的是要看它是否容易阅读和理解
结构化程序设计
定义
尽可能少用GOTO语句的程序设计方法
本质
并不是无GOTO语句的编程方法,而是一种使程序代码容易阅读、容易理解的编程方法
人机界面设计
可能遇到的问题
4个
响帮错交
系统响应时间
用户帮助设施
出错信息处理
命令交互
用户界面设计
是一个迭代的过程,一旦建立起用户界面的原型,就必须对它进行评估,以确定其是否满足用户需求
指南
3个
一般交互指南
信息显示指南
数据输入指南
过程设计的工具
图形
程序流程图
又称程序框图,它是历史最长,使用最广泛的描述过程设计的方法
优点
对控制流程的描绘很直观,便于初学者掌握
缺点
3个
不是逐步求精的好工具,诱使程序员过早的考虑程序的控制流程,而不去考虑程序的全局结构
用箭头代表控制流,因此程序员不受任何约束,可以完全不顾程序设计的精神,随意转移控制
不易表示数据结构
盒图(N-S图)
优点
4个
功能域明确,可以从盒图上一眼就看出
不可能任意转移控制
很容易确定局部和全程数的作用域
很容易表现嵌套关系,也可以表示模块的层次结构
PAD图
是问题分析图,使用二维树形结构的图来表示程序的控制流,将它翻译成程序代码较容易
优点
6个
必然是结构化程序
程序结构十分清晰
表现程序逻辑,易读,易懂,易记
容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成,提高软件可靠性和软件生产率
既可用于表示程序逻辑,也可用于描述数据结构
PAD图的符号支持自顶向下,逐步求精方法的使用
判定树
优点
形式简单,无需任何说明,易于掌握和使用
缺点
简洁性差,同一值往往要写很多遍,越接近叶端重复次数越多
表格
判定表
当算法包含多重嵌套的条件选择时,判定表能清晰地表示
由四部分组成
左上部列出所有条件
左下部是所有可能做的动作
右上部是表示各种条件组合的矩阵
右下部是和每种条件组合对应的动作
语言
过程设计语言PDL
也称为伪码,是一种“混杂”语言,他使用一种语言的词汇,同时却使用另一种语言的写法
优点
3个
可以作为注释直接插在源程序中间
可以使用普通正文编辑程序或文字处理系统,很方便的完成PDL的书写和编辑工作
已经有自动处理PDL的程序存在,而且可以自动由PDL生成程序代码
缺点
不如图形工具形象直观
面向数据结构的设计方法
Jackson方法
五个步骤
分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构
找出输入数据结构和输出数据结构中有对应关系的数据单元
由描绘数据结构的jackson图导出程序结构的jackson图
列出所有的操作和条件,并且把它们分配到程序结构图的适当位置
用伪码表示程序
Warnier方法
使用面向数据结构的设计方法,当然首先需要分析确定数据结构,并且用适当的工具清晰地描绘数据结构
程序复杂度的定量度量
作用
3个
估算出软件中错误以及软件开发需要用的工作量
可以用来比较两个不同的设计或两个不同算法的优劣
作为模块规模的精确限度
方法
McCabe方法
流图
流图仅仅描绘程序的控制流程,用任何方法表示的过程设计结果,都可以翻译成流图(用系统流程图翻译书上有原题)
计算环形复杂度
方法
3个
用途
对测试难度的一种定量,也能对软件最终的可靠性给出某种预测
Halstead方法
易混淆的知识点
各个阶段的接口
需求分析阶段:定义接口需求
概要设计阶段:接口的定义
详细设计阶段:接口的设计
0 条评论
下一页