实用软件工程
2017-02-23 21:33:04 0 举报
AI智能生成
软件工程书上的一些东西
作者其他创作
大纲/内容
软件定义:计算机程序及其有关数据文档的完整集合
软件工程:软件开发、运行、维护和引退的系统方法
发展
CASE技术
定义:Computer Aided Software Engineering,计算机辅助软件工程是一组工具和方法的集合,可以辅助软件开发生命周期各阶段进行软件开发
三个部分
前端:系统分析和设计功能
后端:系统的实现和维护阶段
中心信息库:连接前后端进行系统信息管理的工具
环境
软件平台
图形功能:定义软件规格说明,表示系统设计方案
查错功能
中心信息库:储存和组织所有与软件系统有关信息的机构
硬件平台
独立工作站
一台主机和若干工作站组成的两层结构
一台中央主机,中型部门级或项目级的主机和若干工作站的三层结构
软件工具
定义:为支持计算机软件的开发、维护、模拟、移植、管理而研制的程序系统
目的:提高生产率,改进软件质量
组成
工具
工具接口
工具用户接口
功能:软件开发过程中提供支持和帮助
描述客观系统
存储和管理开发过程中的信息
代码的编写或生成
文档的编制或生成
软件工程管理:进度管理、资源与费用管理、质量管理
性能:支持或帮助的程度
表达能力或描述能力
保持信息一致性的能力
使用方便程度
工具可靠程度
对硬件、软件环境的要求尽量降低
分类
按用途分
模拟
开发
测试、评估
运行、维护
性能测量工具
程序设计支持工具
按生命周期分类
软件需求分析工具
软件设计工具
软件编码工具
软件确认工具
软件维护工具
发展
单个工具向多个工具集成化发展
重视用户界面设计
不断采用新的理论和技术
软件工具的商品化
可视化软件开发工具将软件工程革新进一步推向深入
软件开发环境
定义:一个软件开发环境是一组方法、过程及计算机程序的整体化构件,它支持从需求定义、程序生成直到维护的整个软件生命周期
分类
按生产不同阶段
软件开发环境
软件项目管理环境
软件质量保证环境
软件维护环境
按开发环境结构模型
分布式
网络环境
工作方式
交互式软件
批处理软件环境
是否与软件开发方法有关
不依赖软件开发方法的环境
专门支持某种软件开发方法的软件环境
构成和特性
软件信息数据库
交互式人机界面
语言工具
质量保证工具
需求分析及设计工具
配置管理工具
集成化环境
统一公共数据
统一的用户界面
集成化层次
公共的用户接口
实现工具之间数据的可传递性
软件开发过程各阶段集成化
实现不同硬件之间工具和数据的可传递性
使软件开发过程中的每一项工作都能在工作站上进行
软件重用
定义:软件在开发过程中不做修改或稍作修改就可以重复使用相同或相似的软件元素的过程-软件构件
可重用成分
源代码重用
剪贴、包含、继承
设计结果重用
体系结构重用
规格说明重用:适用于用户需求没变,系统体系结构变化
重用过程模型
组装模型
类构件的重用模型
实例重用
继承重用
多态重用:相同消息不同响应
软件重用过程模型
领域:相似或相近的软件需求的应用系统所覆盖的一组功能区域
开发可重用软件构件-领域工程
目的:标识、构造、分类和传播构件
三个主要活动
分析过程
开发可重用的软件构件
传播软件构件
分类和检索软件构件
分类模式
枚举分类:通过层次结构描述构件,实际构件放在枚举层次的适当路径最底层
刻面分类:分析软件构件的基本特征,以及特征的优先次序
属性值修改
RUP统一过程
定义:Rational Unified Process,一个随时间推移不断进化的过程
统一过程的开发模式
分四个阶段,每个阶段经过分析、设计、编码、集成、测试反复迭代
初始化:估算项目成本和效益。确定项目规模、功能、架构、进度
细化:建立软件系统的合理架构
构造:通过一系列的迭代过程,增量式地建造、实现用例
提交:使用产品改正缺陷,制作最终版本
统一过程特点
基于构件
使用UML统一建模语言
用例驱动,先构造风险大的
迭代增量方式
架构优先方法
统一过程要素
项目
产品
人员
过程
工具
Rational Rose简介
用图形符号对系统的需求和设计进行形式化描述
四个视图
用例视图:包括系统中的所有参与者、用例、用例图只关注系统功能不关注系统的具体实现方法,可能还包括一些顺序图、协作图
逻辑视图:关注焦点是系统的逻辑结构,提供对系统详细描述以及构件之间如何关联,包括类图、交互图、状态图等
绘制方法
一标识分析类:不关注语言细节
二将分析类变为设计类 ,有具体语言细节
分析类和设计类不一定一一对应
构件视图:包含代码模型库、执行文件、运行库、其他构件信息,主要负责控制代码和编译部署应用程序的人
构件:代码实际模块
代码图:构件及其相互关系
包:相关构件的组
部署试图:关注系统的实际部署,可能与系统的逻辑结构不同
进程:在自己内存空间执行的线程
处理器:任何有处理功能的机器
设备:包括任何没有处理功能的机器
Rational Rose使用
创建新模型 .mdl文件
几种构件模型
定义:构件模型是关于开发可重用软件构件和构件之间相互通信的一组标准的描述
CORBA
Common Object Request Broker Architecture 公共对象请求代理体系结构
底层:ORB Object Request Broker 对象请求代理
构件采用接口描述语言Interface Description LanguageIDL描述
CORBA提供了IDL到C、C++等等语言的映射机制-IDL编译器
IDL编译器可以生成服务期方接口框架skelton和客户方的接口存根stub代码,通过分别与客户端和服务器端程序的联编,可得到相应的服务器程序和客户程序
CORBA提供了一系列公共对象服务规范Common Object Service SpecificationCOSS,可实现跨平台、分布式操作
COM/DCOM
Component Object Model/Distributed Component Object Model是一种构件/分布式对象模型
JavaBean
定义:javaBean是能够在构造工具中,进行可视化操作的可重用软件
两要素
构件
容器
特征
属性、方法、事件 基本特征
自我检查、定制、永久性
网络上的三中活动方式
JDBC Java Database Connectivity:使Bean构件能够访问数据库
JavaRMI Java Remote Method Invocation:分布在不同网络地址上的两个构件实现互相操作
JavaIDL Java Interface Description Language:通过JavaIDL可以实现严格JavaBean和一个CORBA服务之间的互操作
三种构件模型的比较
集成性
主要反映在基础平台对应程序互操作能力的支持上
可用性
所采用的构件技术必须是成熟的技术
可扩展性
能够协调不同的设计模式和实现策略
软件构架技术(软件体系结构)
定义:描述了系统整体设计格局,基于构件的软件开发提供了构件组装的基础和上下文
软件过程:把输入转化为输出的一组彼此相关的资源和活动
基本原理
分阶段生存周期严格管理
坚持进行阶段评审
现代化程序设计技术
工程结果能够清楚的审查
开发小组的人员少而精
承认不断改进软件工程实践的必要性
内容
软件开发技术
软件工程方法学
三要素
方法:软件开发任务技术方法
工具:为方法提供的软件支撑环境
过程:规定了完成阶段的各项准则
分类
传统方法
分类
结构化分析
结构化设计
结构化实现
优点
提升可维护性
提升成功率
提升生产率
面向对象方法学=对象+类+继承+消息通信 对象是数据和对数据操作相结合的软件构件
四要素
对象、类、继承、消息传递
优点
与人类习惯的思维方法一致
稳定性好
可重用性好
较容易开发大型软件
可维护性好
概念
对象
定义:封装了数据以及在数据上的操作
属性:对象的数据
方法:对象执行的操作
特点
数据为核心
主动性
实现了数据封装
本质上具有并行性
模块独立性好
类
定义:具有相同数据和相关操作的一组相似对象的定义
实例:某个特定的类所描述的一个具体对象
消息:对象发出的服务请求 组成:接受消息的对象+消息标识符+封装+输入信息和回答信息
封装:对象的属性和方法(服务)结合成一个独立的单位
继承:子类自动拥有父类定义的属性和方法的机制
多态性:允许属于不同类对象对同一消息做出响应
重载:函数重载、运算符重载
UML
语义
基本元素层:代表要定义的所有事物
元模型层:提供了简单,一致,通用的表示符号和说明
静态模型层:元素之间的关系,通常称为类模型
用例模型:从用户角度描述系统需求,所有开发活动的指南
图(diagram)五类九种图
用例图:表示系统的功能,并指出各功能的操作者
静态图:类图,对象图,包,表示系统的静态结构
行为图:状态图和活动图,描述系统的动态行为和对象之间的相互关系
交互图:顺序图,合作图描述对象之间的交互关系
实现图:构件图和配置图,描述系统的物理实现
视图:用例,实现,部署,状态,活动,交互,模型管理
模型元素 :图中使用的概念
通用机制:为所有元素在语义上提供了简单,一致,通用的定义性说明
扩展机制:使其可以适应一些特殊方法和用户的特殊需要
UML模型
用例模型:描述用户所理解的系统功能,用例图
静态模型:描述系统内的对象,类,包,以及类与类,包与包之间的相互关系
动态模型描述系统的行为
实现模型:包括构件图和部署图:描述了系统实现时的一些特性
图
用例图
定义:定义了系统的功能需求,从用户角度描述系统功能,指出各功能操作者
元素
用例:椭圆
执行者:角色,小人表示
通信联系:执行者和用例之间交换信息
脚本:用例的实例,系统一次具体执行过程
类图和包
类图
定义:类与类之间的静态关系
符号:类的名称,属性,操作
类的关系
关联关系
普通关联
限定关联:一对一关联,限定词放在关系末端
关联类:记录关联的一些附加信息
聚集:类与类之间的关系时整体部分关系
共享聚集:部分对象可同时参与多个整体对象的构成
复合聚集:部分类完全隶属于整体类,部分与整体共存亡
类的一般特殊关系继承,泛化
类的依赖关系
类的细化关系
概念层:需求分析阶段使用概念层类图
说明层:设计阶段用说明层类图描述软件的接口部分
实现层:实现阶段描述软件系统中类的实现
包
定义:一种组合机制,由类图或另一个包构成,表示包与包之间的依赖,细化,泛化关系
设计包的原则
重用等价原则:把包作为可重用单元,类放在包中
共同闭包原则:需要同时改变的类放在一个包中
共同重用原则:不会一起使用的包放在同一个包中
非循环依赖原则:包与包之间的依赖关系不要放在同一个包中
对象图
定义:类图的实例,对象图中对象名字下面加下划线
状态图
定义:两个状态之间的关系
状态机:某对象或交互过程在其整个生命周期中对事件作出响应先后经历的状态
顺序图
定义:对象之间动态交互的情况,着重表示对象消息传递的时间顺序
顺序图两个方向
从上到下:时间先后顺序
水平方向:不同对象之间传递消息的方向
活动图
状态转换的触发事件时内部动作完成用活动图,外部用状体转换图
状态图的一种特殊情况
协作图
定义:用于描述系统中相互协作的对象之间的交互关系和关联链接关系,侧重静态关系
构件图
定义:构建之间的相互依赖关系
构件类型
源构件:实现类的源代码文件
二进制构件:对象代码库,静态文件,动态文件库
可执行构件:链接所有二进制构件所得到的结果
构件图只把构件表示成类型,要表示实例必须使用部署图
部署图
定义:描述计算机系统硬件的物理拓扑 结构以及在此结构上运行的软件,常用于帮助人们理解分布式系统
结点和连接:一种代表运行时计算资源的分类器,如pc
构件和接口:可执行的物理模块代码,逻辑上可以和类图中的包或类对应
对象
UML应用
UML模型
用例模型:从用户的角度描述系统需求,是所有开发活动的指南
静态模型:定义了类,对象,关系以及组建模型
动态模型:描述系统随着时间推移发生的行为
实现模型:系统实现的一些特性
UML视图
结构分类
静态视图:类图
用例视图:用例图
实现视图:构件图
动态行为
部署视图
状态视图
活动视图
交互视图:顺序图/协作图
模型管理
模型的分层组织管理,包,子系统,模型
可扩展性
常用视图
用例视图:展示了外部执行者所观察到的系统功能
逻辑视图:类之间的逻辑关系,系统内部如何提供系统功能
并发视图:系统并发行
构件视图:模块之间的依赖关系
部署视图:展示系统的部署
使用准则
选择适合的图
只对关键事物建立模型
分层次划模型图
模型具有协调性
模型元素大小适中
扩展机制
标签值:增加模型元素信息。static virtual friend
约束:complete完全分类,hierarchy分层,ordered有序,bag多次出现无序
版型《》
应用领域
适用于系统开发的全过程
面向对象软件设计与实现
分析OOA
目的:对客观世界的系统建立对象模型、动态模型、功能模型
过程
定义:抽取和整理用户需求并建立问题域精确模型的过程
步骤
发现对象,定义对象和类的属性与服务
确定各类对象之间的关系,建立实例连接
划分主题,定义系统结构
编写脚本并画出顺序图,状态转换图
分析系统中数据之间的依赖关系,建立功能模型
建立三模型
对象模型
动态模型
功能模型
原则
定义有实际意义的对象
模型的描述要规范准确,强调实体本质,忽略无关属性
共享性
封装性
建立对象模型OOD
定义:最重要一个模型,对象模型表示静态的、结构化的系统的数据性质
方法
需求分析调研
搜集必要资料
访问用户并做好详细记录
确定系统边界
建立系统的对象模型
发现、定义系统中对象和类的属性与服务
定义系统中对象之间的关系
建立系统说明文档
对象说明文档
关系说明文档
概要说明文档
确定对象和类
对象
对象是系统中用来描述客观事物的一个实体
对象标识
外部标识
内部标识
属性
描述对象静态特征的数据项
服务
是用来描述对象的动态特征的一系列操作
类
具有相同属性和服务的一组对象的集合
类的相互关系
一般特殊、泛化、继承、归纳
聚集关系、整体部分、组合
关联关系、相互依赖、相互作用
阶:参与关联对象的个数
链属性:关联链的性质,链属性与关联之间用虚线连接
限定:对关联的含义做某种约束,利用限定词通常能有效减少关联阶数
主动对象
定义:一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行
划分主题
主题
定义:把一组具有较强联系的类组织在一起而得到的类的集合
特点
一组类构成的集合,本身不是一个类
主题内部对象具有某种意义上的内在联系
主题的划分具有一定灵活性
划分方式
自底向上
自顶向下
主题图
三种方式
展开,压缩,半展开
建立动态模型
编写脚本:某个功能的一系列事件 起于一个外部输入,止于一个外部输出
设计用户界面
画UML顺序图或活动图
画状态转换图
建立功能模型
功能模型用来说明如何处理数据以及数据之间有何依赖关系,由一组数据流图组成
步骤
确定输入输出值
画数据流图
定义服务
面向对象设计
系统设计
将系统分解为子系统
层次组织
封闭式:每层子系统仅仅使用其下层提供的服务
开放式:可使用下面任意一层服务,不符合信息隐蔽性
块状组织
设计系统的拓扑结构
层次和块的组合,管道型、树型、星型
设计问题域子系统
调整需求
重用设计
把与问题域有关的类组合起来
添加一般化类
设计人机交互子系统
交互方式
客户-供应商client-supplier
平等伙伴关系peer-to-peer
设计准则
一致性
减少步骤
及时提供反馈
提供撤销命令
无需记忆、易学、有吸引力
策略
用户分类
技能层次分类:外行、初学者、熟练者、专家
组织层次分类:行政人员、管理人员、专业技术人员、其他办事员
职能分类:顾客、员工
描述用户
用户类型
系统欲达到的目的
特征,年龄,性别
关键成功因素
技能水平、完成本职工作的脚本
设计命令层次
研究现有人机交互的含义和准则
确定初始命令的层次
精化命令层次
设计人机交互类
设计任务管理子系统
任务:进程的别称,是执行一系列活动的一段程序
分析并发现(根据动态模型)
设计任务管理子系统
识别事件驱动任务:与硬件通信的任务
识别时钟驱动任务:以固定时间间隔激发这种事件,执行处理
识别优先任务和关键任务
识别协调者
评审任务
确定资源需求
定义各个任务
设计数据管理子系统
数据管理部分提供了数据管理系统中存储和检索对象的基本结构
选择数据存储管理模式
文件管理系统:提供基本文件处理功能
关系数据库管理系统:用表格管理数据
面向数据库管理系统:两种实现方式一扩充RDBMS,二扩充面向对象程序设计语言
设计数据管理子系统
子主题
对象描述
协议描述:通过定义对象可以接收的每个消息和当对象接收消息后完成的相关操作建立对象借口
实现描述:描述由传送给对象的消息所蕴含的每个操作的实现细节
设计类中的服务
确定类中的服务、综合考虑对象、动态、功能三种模型
设计实现服务的方法
设计类的关联
单向关联-指针
双向关联-指针集合
链属性
设计优化:在效率和设计清晰性之间寻求折中
面向对象设计的准则
模块化:对象就是模块,把数据结构和操作数据的方法紧密结合在一起,构成模块
抽象:类是一种抽象数据类型,对外开放的公共接口构成了类的规格说明
信息隐蔽:对用户,属性表示方法、操作的实现算法都应该隐蔽
低耦合:提高继承耦合,降低交互耦合
高内聚
服务内聚:一个服务应该完成一个且仅完成一个功能
类内聚:类的属性和服务高内聚
一般特殊内聚:对相应领域知识正确抽象
重用性:尽量使用已有的类
面向对象设计的启发规则
设计结果清晰易于理解
一般特殊结构深度适当
设计简单的类
使用简单的协议
使用简单的服务
把设计变动减到最小
面向对象系统的实现OOP
选择程序设计语言
关键因素
与OOA OOD有一致表示方法,类、继承等
可重用性、可维护性
面向对象语言的技术特点
支持类与对象、整体部分、一般特殊
实现属性、服务机制
类库,永久保存对象、效率、开发环境
实际因素
将来是否可以占据主导地位
可重用性、类库、开发环境、其他
面向对象程序设计风格
提高软件可重用性(软件构件)
提高类操作的内聚
降低类操作的规模
保持操作一致性
提供决策的操作与完成具体任务的操作分开设计
全面覆盖所有条件组合、不用全局变量、继承机制
提高软件的可扩充性
类的实现封装
一个操作应该只包含对象模型中有限内容
避免多次使用分支语句
精心确定公有属性、服务、关联
提高软件健壮性
预防用户操作错误
检查参数的合法性
不预先设定数据结构的限制条件
经过测试在确定需要优化的代码
面向对象实现的人员分工
面向对象测试策略
对象和类的认定
认定对象是否全面
认定对象是否具有多个属性,只有一个属性的对象通常应该看做其他对象的属性
认定同一对象实例是否有共同的区别于其他实例的共同属性,如果有应该继续分解
如果对象之间有复杂关系应该检查他们之间的关系是否正确
面向对象的单元测试
传统单元测试侧重于模块的算法细节和穿过模块接口的数据,而面向对象的类测试是由封装在该类中的方法和类的状态行为所驱动的
面向对象的集成测试
基于线程的集成测试
单独测试每个单独的线程
基于使用的集成测试
先测独立类,然后测依赖类
簇测试
利用试图发现协作中错误的测试用例,来测试协作的类簇
面向对象的确认测试
不再考虑类与类之间相互连接的细节问题,验证所有的需求是否均被正确的实现
面向对象的测试步骤
制定测试计划:所设计的测试用例和测试规程以最小的代价来测试最重要的用例,并且对风险性最大的需求进行测试
设计测试用例:设计合适的操作序列以便于测试类的状态
设计类的测试用例
根据类说明设计测试用例:类说明可用自然语言、状态转换图或类说明语句等多种形式描述
根据状态图设计测试用例
设计集成测试用例:用于验证被组装成构造的构件之间能否正常交互
设计系统测试用例:用于测试系统功能在整体上是否满足要求,以及在不同条件下的用例组合是否有效
设计回归测试用例
实现测试构件
依赖于测试自动化工具
软件工程师开发测试构件
集成测试:确定调用代码中是否有错误
系统测试
测试评估
测试的完整性、可靠性
软件工具
软件开发环境
软件工程管理学
软件工程经济学
费用管理
软件管理学
人员组织管理
开发人员
项目负责人:组织能力、判断能力重大问题做出决策能力
系统分析员:概括能力、判断能力、决断力
程序员:熟练的编程能力
组织机构
组织模式
按课题划分
按职能划分
矩阵型模式
程序设计小组组织形式
主程序员组
民主制程序员组
层次式小组
用户
不积极配合
求快求全
功能变化
工程计划管理
软件配置管理
软件配置:是软件产品在软件开发或运行过程中产生的全部信息
信息分三类
机器不可执行形式
机器可执行形式
数据
软件配置管理SCM是在整个软件生命周期内管理变更的一组活动
四项任务
标识变更
软件配置在不断变化,首先应标识这种变更
基线:通过了正式复审的软件配置,不可以随意更改
控制变更:在软件生命周期中对软件配置项进行变更的评价和核准机制
配置审计
配置状态报告
软件质量保证
特性
功能满足用户规定的需求
遵守规定标准所定义的一系列开发准则
满足某些隐含需求
衡量标准
功能性:达到设计规范和满足用户需求的程度
可靠性:规定时间条件下,能够实现所要求的功能的能力和不引起系统失效的概率
易使用性
效率
可维护性
可移植性
软件质量保证措施
用好的技术方法
测试软件
进行正式的技术评审
标准实施
控制变更
程序正确性证明
记录、保存、报告软件过程信息
软件开发风险管理
风险特点
产生风险的不确定性和风险产生的损失
按风险影响分类
项目风险
技术风险
商业风险
按风险可预测性分类
已知风险
可预测风险
不可预测风险
风险识别
风险预测
处理风险
风险缓解
风险监控
风险管理和意外事件计划
软件工程标准与软件文档
概述
软件产品特点
逻辑产品。高度抽象性
同一功能软件可以有多样性
软件生产过程复杂,具有易错性
软件开发和维护主要根据用户需求定制,过程复杂性、易变性
重要性
软件复杂性,所以软件工程需要有相应的管理策略
软件工程涉及很多学科
软件规模日益扩大,人员日益增加,开发时间增长。
软件规模估算
软件开发成本估算
自顶向下估算方法
参照以前完成项目消耗的总成本和工作量推算将要开发软件的总成本和工作量,重视系统及工作量
缺点:往往不清楚底层工作的技术困难,这些困难往往使得成本增加
自底向上估算方法
将每一部分的估算工作交给负责该部分工作的人来做
缺点:虽然估算较为准确但是往往会缺少对软件开发系统集工作量缺少估算
两种方法应该结合使用
差别估算方法
与已开发类似项目比较找出相同不同之处
缺点:虽然可以提高精度,但是不容易确定“差别”的界限
专家估算
主观性
类推估算
盲目性
算式估算
由理论导出
由经验得出
代码行技术LOC
根据以往经验和历史数据,估算出将要编写代码的源代码行数每行平均成本乘以总行数
特点
优点:容易计算
缺点:不同语言实现同一软件产品代码行书不同,该技术不适用非过程性语言
功能点技术
依据对软件信息域特性和软件复杂性评估结果,估算软件规模
信息域特性
输入项数Inp:输入项目数
输出项数Out:输出项目数
查询数Inq
主文件数Maf:主文件是数据的一个逻辑组合,可能是大型数据库的一部分或一个独立文件
外部接口数:系统利用外部接口向其他系统传送信息
估算步骤
计算未调整功能点数UFP
计算技术复杂因子TCF
计算功能点数FP=UFPXTCP
COCOMO2模型
子主题
进度计划
Gantt图 横道图
工程网络技术PERT Program Evaluation and Review Technique
最早时刻
最晚时刻
关键路径
机动时间
收藏
0 条评论
下一页