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