noteForSE2

项目启动

项目和项目管理

目标

  • 在限定时间内;
  • 在一定的成本内;
  • 在要求的质量水平上;
  • 高效使用资源;
  • 获得客户认可。

过程和活动

过程:项目启动、项目计划、项目执行、项目跟踪与控制和项目收尾

活动:计划制定、团队管理、成本控制、质量保障、度量、过程管理、进度跟踪与控制、⻛险管理、配置管理

软件质量保障

活动:就是各种评审

质量模型

功能性、可靠性、易用性、效率、可维护性、和可移植性

评审

  1. 在规划阶段(Planning),制定审查计划,决定审查会议的次数,安排每次审查会议的时间、地点、参与人员、审查内容等等。
  2. 在总体部署阶段(Overview),向所有参与审查会议的人员描述待审查材料的内容、审查的目标以及一些假设,并分发文档。
  3. 在准备阶段(Preparation),审查人员各自独立执行检查任务。在检查的过程当中,他们可能会被要求使用检查清单、场景等检查方法。检查中发现的问题会被记录下来,以准备开会讨论或者提交给收集人员。
  4. 在审查会议阶段(Inspection Meeting),通过会议讨论,识别、确认、分类发现的错误。
  5. 在返工阶段(Rework),修改发现的缺陷。
  6. 在跟踪阶段(Follow-up),要确认所有发现的问题都得到了解决,所有的错误都得到了修正。

质量度量

测度

是为了描述软件产品而提供的定量指标

  • 代码行数

测量

进行测度的活动称为测量

度量

是软件产品 在特定属性上的量化测度程度

  • 基于所有对象的代码行测度可以建立平均代码行数、最大代码行数、最小代码行数

软件配置管理

定义

用技术的和管理的指导和监督方法,来标识和说明配置项的功能和物理特征,控制对这些特征的变更,记录和报告变更处理及其实现状态,并验证与规格需求的一致性

image-20210331201525819

配置项

置于软件配置管理之下的软件配置的各种有关项目,包括:

  1. 各类管理文档
  2. 评审记录与文档
  3. 软件文档
  4. 源码及其可执行码
  5. 运行所需的系统软件和支持软件
  6. 有关数据
  7. ……

基线::已经经过正式评审的规格说明或产品,可以作为进一步开发的基础,并且只有通过正式的变更控制过程才

版本控制

示意图

  • image-20210331194431566

模式

  • Lock-modify-unlock solution

    image-20210331194509416

  • Copy-modify-merge solution

    image-20210331194538975

变更控制的过程

image-20210331194728713

需求基础

需求基础

需求的层次

image-20210327182120172

  1. 业务需求
    • 系统建立的战略出发点,表现为高层次的目标,描述了组织为什么要开发系统
  2. 用户需求
    • 执行实际工作的用户对系统所能完成的具体任务的期望,描述了系统能够帮助用户做些什么
    • 例:系统应该允许客户经理添加、修改或者删除会员个人信息
  3. 系统需求
    • 用户对系统行为的期望,每个系统级需求反映了一次外界与系统的交互行为,或者系统的一个实现细节
    • 例:在接到客户经理的请求后,系统应改为客户经理提供所有会员的个人信息。

需求分类

需求图谱

image-20210327180145887

项目需求

image-20210327180943029

过程需求

image-20210327180959902

系统需求

软件需求

  1. 功能需求
    • image-20210327183120183
  2. 性能需求
    • 速度
    • 容量
    • 吞吐量
    • 负载
    • 实时性
  3. 质量属性
    • 可靠性:上传下载时,如果网络故障,系统不能出现故障
    • 可用性:系统的可用性要达到98%
    • 安全性:收银员只能查看,不能修改、删除VIP顾客的信息
    • 可维护性:如果要加新功能,要能够在2人月内完成
    • 可移植性:服务器要能在1人月内从win7更换到solaris 10操作系统
    • 易用性:使用系统1个月的收银员进行销售处理的效率要达到10件商品/分钟
  4. 对外接口
    • image-20210327181945032
  5. 约束
    • image-20210327182006421
  6. 数据需求(非标准类型的软件需求类别,而是功能需求的补充)
    • image-20210327182031139

软件体系结构基础

软件体系结构的发展

  1. 1969年第一次提到软件体系结构

理解软件体系结构

概念和定义

一个软件系统的体系结构规定了系统的计算部件和部件之间的交互

Wiki:Software architecture is the realization of non-functional requirements, while software design is the realization of functional requirements.

要素:

  • 高层抽象
  • 关注利益相关者
  • 设计方案

区分物理与逻辑

  • 逻辑更高层
  • 逻辑-抽象,物理-实现
  • 逻辑意味着更高的视角

高层抽象

好处:

  • 直观,便于理解
  • 验证正确性
  • 关注度分离,降低复杂度

部件、连接件、配置

连接件是一个与部件平等的单位

部件与连接件是比类、模块等软件单位更高层次的抽象

部件

在系统架构中封装处理和数据的元素被称为软件组件

组件通常提供特定于应用程序的服务

image-20210519104308387

原始部件:可以直接被实现为相应的软件实现机制

复合部件:由更细粒度的部件和连接件组成,复合部件通过局部配置将其内部的部件和连接件连接起来,构成一个整体

连接件

image-20210519104656145

原是连接件:可以直接被实现为相应的软件实现机制

复合连接件:由更细粒度的部件和连接件组成,复合连接件通过局部配置将其内部的部件和连接件连接起来,构成一个整体

image-20210519104801011

配置

image-20210519104941253

体系结构风格初步

Main Program and Subroutine Style 主程序/子程序风格

部件:procedures , functions and module

连接件:calls between them

设计决策与约束

  • 基于声明-使用(程序调用)关系建立连接件,以层次分解的方式建立系统部件, 共同组成层次结构。(构成方式)
  • 每一个上层部件可以“使用”下层部件,但下层部件不能“使用”上层部件,即不允许逆方向调用(单向调用)
  • 系统应该是单线程执行。主程序部件拥有最初的执行控制权,并在“使用”中将控制权转移给下层子程序(单线程)
  • 子程序只能够通过上层转移来获得控制权,可以在执行中将控制权转交给下层的子子程序,并在自身执行完成之后必须将控制权还交给上层部件(控制单向传递)

实现

  • 功能分解
  • 集中控制

效果

优点

  • 流程清晰,易于理解
  • 强控制性

缺点

  • 程序调用是一种强耦合的连接方式,非常依赖交互方的接口规格,这会使得系统难以修改和复用(强耦合,难修改、复用)
  • 程序调用的连接方式限制了各部件之间的数据交互,可能会使得不同部件使用隐含的共享数据交流,产生不必要的公共耦合,进而破坏它的“正确性”控制能力。(有公共耦合,破坏“正确性”的控制力)

应用

主要用于能够将系统功能依层次分解为多个顺序执行步骤的系统。

一些使用结构化方法(自顶向下或自底向上)建立的软件系统也属于主程序/子程序⻛格。

Object-Oriented Style 面向对象风格

组件:object or module

连接件:function or invocations (methods).

设计决策及约束

  • 依照对数据的使用情况,用信息内聚的标准,为系统建立对象部件。每个对象部件基于内部数据提供对外服务接口,并隐藏内部数据的表示。(构建方式)
  • 基于方法调用(Method Invocation)机制建立连接件,将对象部件连接起来。(连接方式)
  • 每个对象负责维护其自身数据的一致性与完整性,并以此为基础对外提供“正确”的服务
  • 每个对象都是一个自治单位,不同对象之间是平级的,没有主次、从属、层次、分解等关系

实现

  • 任务分解
  • (委托式)分散式控制

效果

优点:

  • 内部实现的可修改性
  • 易开发、易理解、易复用的结构组织

缺点:

  • 接口的耦合性
  • 标识(Identity)的耦合性
  • 副作用:面向对象式⻛格借鉴了面向对象的思想,也引入了面向对象的副作用,因此更难实现程序的“正确性”。例如,如果 A 和B 都使用对象 C,那么 B 对 C 的修改可能会对 A 产生未预期的影响。再例如对象的重入(Reentry)问题:如果 A 的方法f()调用了 B 的方法 p(),而 p()又调用了 A 的另一方法 q(),那么就可能使得 q()失败,因为在 q()开始执行时,A 正处于 f()留下的执行现场,这个现场可能是数据不一致的。

应用

适用于那些能够基于数据信息分解和组织的软件系统,这些系统:

  • 主要问题是标识和保护相关的数据信息;
  • 能够将数据信息和相关操作联系起来,进行封装

Layered Style 层次风格

Components: typically collections of procedures or objects.

Connectors: typically procedure calls or methods invocations under restricted visibility

设计决策与约束

  • 从最底层到最高层,部件的抽象层次逐渐提升。每个下层为邻接上层提供服务, 每个上层将邻接下层作为基础设施使用。也就是说,在程序调用机制中上层调用下层。
  • 两个层次之间的连接要遵守特定的交互协议,该交互协议应该是成熟、稳定和标准化的。也就是说,只要遵守交互协议,不同部件实例之间是可以互相替换的
  • 跨层次的连接是禁止的,不允许第 I 层直接调用 I+N(N>1)层的服务
  • 逆向的连接是禁止的,不允许第 I 层调用第 J(J<I)层的服务

实现

  • 关注点分离(每层逐次抽象)
  • 层间接口使用固定协议(固定控制)

效果

优点:

  • 设计机制清晰,易于理解。
  • 支持并行开发。
  • 更好的可复用性与内部可修改性。

缺点:

  • 交互协议难以修改。
  • 性能损失。
  • 难以确定层次数量和粒度

应用

分层⻛格适用于具备下列特性的系统:

  • 主要功能是能够在不同抽象层次上进行任务分解的复杂处理;
  • 能够建立不同抽象层次之间的稳定交互协议;
  • 没有很高的实时性能要求,能够容忍稍许的延迟;

Model-View-Controller Style

image-20210519112512093

Changes in their states are propagated to the view subsystems

The model subsystems are designed such that they do not depend on any view or controller subsystems

image-20210519112622551

设计决策和约束

效果

优点:

  • 易开发性。视图和控制的可修改性
  • 具有一定的可修改性优势
  • 适宜于网络系统开发的特征

缺点:

  • 复杂性:MVC 将用户任务分解成了表现、控制和模型三个部分,这增加了系统的复杂性,不利于理解任务实现
  • 模型修改困难

软件体系结构设计与构建