软件工程概述
- 软件工程产生的背景以及软件工程的定义
- 开发模型:
- 线性模型
- 增量模型
- 螺旋模型
- 开发方法
- 结构化方法
- 面向对象方法
- 各个软件工具
- 如项目管理工具、分析设计工具、测试与分析工具等等
结构化分析和设计方法
- 结构化分析主要包括功能建模和数据建模,通常使用数据流图(DFD)和实体联系图(ERD)来描述
- 结构化设计通常分为概要设计和详细设计两阶段。
- 概要设计阶段的重点在于合理划分系统模块,指导模块划分的原则是保证模块之间的高内聚低耦合原则。概要设计阶段使用的工具是软件结构图。
- 而进入到详细设计阶段,建议使用NS图这样符合结构化程序设计语言规范的工具来定义模块内部的流程
面向对象
- 面向对象的概念
- 面向对象定义:Coad-Yourdon给出了一个定义:面向对象=对象(Object)+类(Class)+继承(Inheritance)+通信(Messages)。如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的
- 对象的定义
- 类的定义
- 继承的定义
- 消息的定义
- 封装定义
- 多态与动态绑定介绍
- 面向对象开发过程
- 系统分析阶段
- 通过面向对象分析(OOA),建立了概念模型。按照对模型进行构造和评审的顺序,概念模型可分为五个层次,分别是:类与对象层、属性层、服务层、结构层和主题层
- 系统设计阶段
- 系统对象设计阶段:建立系统整体结构并确认接口
- 设计对象接口:加入接口有利于建立对象结构与对象交互,更充分地展现对象的静态、动态关系。
- 设计算法和数据结构
- 确认子系统:以系统整体结构图描述各个子系统之间的相互服务关系。
- 确定子系统之间的通信
- 系统体系结构设计阶段:选择系统环境与设计体系结构
- 任务管理设计:主要包括从主结构设计、分布式结构设计、增加协调者和资源管理
- 数据管理设计:包括数据结构设计和数据管理设计。
- 人机界面设计
- 系统对象设计阶段:建立系统整体结构并确认接口
- 系统实现、测试和维护阶段
- 本书不做重点介绍。
- 系统分析阶段
- UML
- 构架
- 由5类视图构成,包括用例视图、逻辑视图、进程视图、构件视图(实现视图)和部署视图
- 基本构造块(图示)
- UML的公共机制:为了使UML整个模型更加一致,UML定义了4种公共机制
- 规格说明(Specification)
- 修饰(Adornment)
- 通用划分(CommonDivision)
- 扩展机制(ExtensibilityMechanism)
- UML的扩展机制
- 构造型(Stereotype)
- 标记值(Tagged)
- 约束(Constraint)
- 构架
- 统一开发过程(RationalUnifiedProcess,RUP):是由提出UML方法的Booch和Jacobson以Rational的Objectory为核心提出的一整套面向对象的软件工程过程。
- 未感兴趣。
- OOCASE:RationalRose工具简介
- 未感兴趣。
需求分析与用例建模
- 需求分析的核心概念和任务
- 需求的定义和类型
- 需求分析的任务
- 需求分析的过程
- 问题识别(需求获取)
- 分析与综合(需求建模)
- 编制需求分析阶段的文档(需求描述)
- 验证(需求评审)
- 用例图(未感兴趣,暂作记录)
- 用例图的定义与组成元素
- 系统边界
- 行为者
- 场景和用例
- 用例之间的关系
- 包含(Include)
- 扩展(Extend)
- 泛化(Generalization)
- 用例图的规格说明
- 未感兴趣
- 案例分析
- 未感兴趣
静态建模
- 基本讲述如何使用UML建模(设计)系统,描述得非常清晰、透彻和全面,当使用到的时候可以回头翻阅;
- 面向对象分析和设计的关系
- 类图
- 类的名称
- 类的属性
- 类的操作
- 类的分类
- 类之间的关系
- 关联
- 关联关系的图示表达
- 名称
- 角色
- 多重性
- 名称
- 聚集(Aggregation)是关联的特例
- 共享聚集:其中一个类描述了一个较大的事物(整体),它由较小的事物(部分)组成,并且部分对象可以是任意整体对象的一部分,表示关系较弱的情况。它描述了“has a”关系,即将整体对象拥有部分对象表示成在整体对象的一端用一个空心菱形修饰的简单关联关系。
- 组合聚集:一种强形式的聚集,整体对象不仅拥有它的部分对象,并具有强的物主身份,表示“containsa”的关系,即将部分对象不能脱离整体对象存在表示成在整体对象的一端用一个实心菱形修饰的简单关联关系。
- 共享聚集:其中一个类描述了一个较大的事物(整体),它由较小的事物(部分)组成,并且部分对象可以是任意整体对象的一部分,表示关系较弱的情况。它描述了“has a”关系,即将整体对象拥有部分对象表示成在整体对象的一端用一个空心菱形修饰的简单关联关系。
- 关联关系的图示表达
- 依赖
- 依赖关系将行为或实现与对其他类有影响的类联系起来。依赖关系有很多种,除了实现关系以外,还有跟踪关系(不同模型的元素之间的一种松散连接)、精化关系(两个不同层次意义之间的一种映射)、使用关系(在一个模型中需要另一个元素的存在)、绑定关系(为模板参数指定值)等。
- 依赖关系将行为或实现与对其他类有影响的类联系起来。依赖关系有很多种,除了实现关系以外,还有跟踪关系(不同模型的元素之间的一种松散连接)、精化关系(两个不同层次意义之间的一种映射)、使用关系(在一个模型中需要另一个元素的存在)、绑定关系(为模板参数指定值)等。
- 泛化(继承)
- 关联
- 对象图
- 对象图的定义和组成元素
- 对象图和类图的区别
- 对象图建模
- 接口
- 接口表示方法
- 接口的名称
- 接口的操作
- 接口的关系
- 理解接口
- 为了使接口易于理解和处理,可以为接口提供更多的信息。首先,可以为各个操作附上前置和后置条件,为整个类或构件附上不变式。这样需要使用接口的客户就能理解接口做什么以及如何使用它。
- 包
- 当系统复杂度增加时,有必要把类、接口、构件、结点、图等元素有序地组织起来,以更清晰地表达系统的层次关系。UML中的包(Package)提供了建模元素的分组机制。
- 包的定义和表示方法
- 包的名称
- 包的元素
- 包的嵌套
- 案例分析
-
某电子投票系统
- 某高校艺术类招生考试管理
-
动态建模
- 消息
- 消息的定义
- (UML2.0已经不用“约束”,见 http://www.uml.org.cn/oobject/200503082.htm)
- 消息的类型
- 消息的定义
- 时序图
- 时序图的组成元素
- 对象
- 生命线
- 激活
- 消息
- 创建对象和撤销对象
- 时序图中的条件和分支
- UML使用约束表示,UML2.0使用“组合片段”表示
- 时序图中的约束(改概念和UML官方文档有出入)
- 时序图中的循环
- 时序图的组成元素
- 协作图
- 协作图的组成元素
- 对象(Object)
- 消息(Messages)
- 链接(Link)
- 消息的层次关系和表达
- 协作图中,对象之间传递的消息必须标明序号,用以说明消息传送的先后顺序。序号标识的方法有两种,一种是顺序标识法,另一种是具有层次关系的标识法——嵌套消息标识法。
- 协作图中,对象之间传递的消息必须标明序号,用以说明消息传送的先后顺序。序号标识的方法有两种,一种是顺序标识法,另一种是具有层次关系的标识法——嵌套消息标识法。
- 协作图中的循环
- 协作图的组成元素
- 时序图和协作图的关联与差异
- 相同点主要有3个
- 两种图都直观地规定了发送对象和接收对象的责任。
- 两种图都支持所有的消息类型。
- 两种图还是衡量耦合性的工具。
- 时序图和协作图之间有如下区别
- 协作图的重点是将对象的交互映射到它们之间的链接上,但是时序图却不把链接表示出来。
- 时序图可以描述对象的创建和撤销情况。而在协作图中,对象要么存在要么不存在,除了通过消息描述或约束外,没有其他的方法可以表示对象的创建或撤销。
- 时序图可以表现对象的激活和去激活情况,但对于协作图来说,无法清晰地表示对象的激活和去激活情况。
- 相同点主要有3个
- 状态图
- 状态图描述的是一种行为,它说明具体某一个对象在它的生命周期中响应事件所经历的状态序列以及它们对那些事件的响应。
- 在UML中描述一个状态图的图符除了状态图符和状态转移图符外,还有起始状态、终止状态、条件判定、发出信号、接收信号和并发状态等图符
- 状态图是由状态、事件、转移、执行动作和连接点组成的,用来建模对象是如何改变状态的。
- 状态(状态包含以下)
- 名称(Name)
- 进入/退出效应(Entry/ExitEffect)
- 内部转移(InternalTransition):不导致状态改变的转移。
- 子状态(Substate):状态的嵌套结构,包括非正交(顺序活动)子状态和正交(并发活动)子状态。
- 延迟事件(DeferredEvent)
- 事件
- 可分内部事件和外部事件,内部事件有:
- 入口事件,以关键字entry说明
- 出口事件是UML提供的标准内部事件,以关键字exit说明
- do事件是UML提供的标准内部事件,以关键字do说明
- include事件是UML提供的标准内部事件,以关键字include说明
- 自定义内部事件
- 也可将事件分为信号事件、调用事件、时间事件和变化事件
- 信号事件也称为信号(Signal),是在实例间进行通信的异步消息的规约。
- 调用事件表示对象接到一个操作调用请求。
- 时间事件表示到达指定时间时发生的事件。
- 变化事件表示状态的一个变化或某些条件得到满足的事件。
- 可分内部事件和外部事件,内部事件有:
- 转移
- 源状态(SourceState)
- 事件触发器(EventTrigger)
- 警戒条件(GuardCondition)
- 效应(Effect)
- 目标状态(TargetState)
- 状态(状态包含以下)
- 嵌套状态
- 顺序状态(上图同时也是顺序状态)
- 并发状态
- 历史状态
- 状态图之间的消息发送
- 活动图
- 活动图用来表示完成一个操作所需要的活动,或者一个用例实例(场景)的活动。活动图在本质上类似于传统结构化方法中的流程图,不同之处在于活动图能够展示并发和控制分支。
- 活动图的组成元素
- UML活动图中除了活动图符外还有起始活动与终止活动、对象、转移、条件判定、并发活动、接收信号与发出信号、泳道等各种图符。
- UML活动图中除了活动图符外还有起始活动与终止活动、对象、转移、条件判定、并发活动、接收信号与发出信号、泳道等各种图符。
- 活动图一般包括动作、活动结点、流和泳道,像所有其他图一样,活动图也可以包括注解和约束。
- 活动图的层次关系
- 在一个活动图中,其中的一个活动可以分解为若干个子活动或动作,这些子活动或动作可以组成一个新的活动图。
- 案例分析
实现建模
- 逻辑建模
- 构件和构件图
- 构件图中通常包含3种元素:构件、接口和依赖关系
- 构件图中通常包含3种元素:构件、接口和依赖关系
- 构件图
- 部署图
- 节点
- 节点之间的联系
- 建立部署图的步骤
- 案例分析
软件体系结构概述
- 软件体系结构的描述
- 软件体系结构的描述方法
- 荐标准IEEE1471—2000,定义了软件体系结构描述的内容要求
- (1)功能性:指系统需要做什么。
- (2)性能:指在重度负载下系统将如何运转。
- (3)安全性:指系统是否有保护用户信息的足够能力。
- (4)可行性:指是否可以实现该系统。
- IEEE1471还定义了软件体系结构描述的标准,包括:
- (1)体系结构设计的标识、版本、总体信息。
- (2)系统参与者的标识以及在体系结构中他们所关注方面的标识。
- (3)组织体系结构所选择的视点规格说明以及这种选择的基本原理。
- (4)一个或多个体系结构视图。
- (5)体系结构描述所需的成分之间不一致的记录。
- (6)体系结构选择的基本原理。
- 一般体系结构描述方法
- 图形表达工具:可以用类似于UML中的构件图来表达
- 模块内连接语言(MIL)
- 基于软件构件的系统描述语言:将软件系统描述成一种由许多以特定形式相互作用的特殊软件实体构造组成的组织或系统
- 体系结构描述语言(ADL)
- 荐标准IEEE1471—2000,定义了软件体系结构描述的内容要求
- 软件体系结构的描述语言(ADL)
- ADL的三个基本元素是构件、连接件、体系结构配置。
- ADL通常解决以下几个问题:
- (1)软件行为规格说明。
- (2)软件协议规格说明。
- (3)连接件规格说明。
- 主要的体系结构描述语言有Aesop、MetaH、C2、Rapide、SADL、Unicon和Wright等
- 软件体系结构的描述方法
- 动态软件体系结构
- Web服务体系结构
- 软件产品线体系结构
软件体系结构风格
- 软件体系结构风格的定义
- 软件体系结构风格描述某一特定应用领域中系统组织方式的惯用模式,通常独立于实际问题。
- 经典的软件体系结构风格
- 管道/过滤器风格
- 基于事件的隐式调用风格
- 构件不直接调用一个过程,而是触发或广播一个或多个事件。系统其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用这个事件中注册的所有过程。
- 分层风格
- 仓库风格与黑板系统
- 仓库风格是以数据为中心的体系结构风格。
- 黑板系统由知识源、黑板数据结构和控制器组成
- 客户机/服务器结构
- 浏览器/服务器结构
- 公共对象请求代理结构(CommonObjectRequestBrokerArchitecture,CORBA):一种独立于语言和软件/硬件平台的软件体系结构规范。
- 正交软件体系结构
- 每一条线索的实现与其他线索的实现无关或关联很少,在同一层中的构件之间是不存在相互调用的。如果线索是相互独立的,即不同线索中的构件之间没有相互调用,那么这个结构就是完全正交的。
- 主要特征:
- (1)由完成不同功能的n(n>1)个线索(子系统)组成。
- (2)系统具有m(m>1)个不同抽象级别的层。
- (3)线索之间是相互独立的(正交的)。
- (4)系统有一个公共驱动层(一般为最高层)和公共数据结构(一般为最低层)。
- 每一条线索的实现与其他线索的实现无关或关联很少,在同一层中的构件之间是不存在相互调用的。如果线索是相互独立的,即不同线索中的构件之间没有相互调用,那么这个结构就是完全正交的。
- 异构软件体系结构
- 在实际的系统开发中存在许多案例,它们不只使用一个体系结构风格,而是由某些体系结构组合而成
- 基于云计算的软件体系结构
设计模式
- 设计模式概述
- 设计模式的分类
- 懒得记录了。
- 设计模式原则
- 懒得记录了。
- 典型设计模式
- 用示例描述了工厂、抽象工厂、桥接、组合、迭代器、MVC等模式,不作记录了。
- 基于构件和基于体系结构的软件开发
- 案例分析……
软件体系结构评估
- 体系结构评估方法
- 质量属性专题研讨会(QAW)
- 体系结构权衡分析方法(ATAM)
- 软件体系结构分析方法(SAAM)
- 积极的中间设计审核(ARID)
- ATAM评估方法:(ArchitectureTradeoffAnalysisMethod,架构权衡分析方法)是一种比较全面的软件架构评估方法。
- ATAM分为4个评估阶段共9个步骤。
- ATAM分为4个评估阶段共9个步骤。
完结
- 体系结构从软件出发,标准化、模式化输出解决软件复杂度的办法,其实正正是现代软件架构的同义词和发展基础。