软件工程导论学习笔记

作业题

能力成熟度模型

  • 软件能力成熟度模型(CMM)将软件能力成熟度自低到高依次划分为 5 级。目前, 达到 CMM 第 3 级(已定义级)是许多组织努力的目标,该级的核心是

    A.建立基本的项目管理和实践来跟踪项目费用、进度和功能特性

    B.使用标准开发过程(或方法论)构建(或集成)系统

    C.管理层寻求更主动地应对系统的开发问题

    D.连续地监督和改进标准化的系统开发过程

    解析:A基本管理属于2可重复级;C属于已管理级;D改进属于5优化级;B标准属于3已定义级

image.png

  • 软件能力成熟度模型(CMM)的第 4 级(已管理级)的核心是 。

    A.建立基本的项目管理和实践来跟踪项目费用、进度和功能特性

    B.组织具有标准软件过程

    C.对软件过程和产品都有定量的理解和控制

    D.先进的新思想和新技术促进过程不断改进

    解析:4已管理级关键词:定量,预测

软件过程模型

  • 为了有效地捕获系统需求,应采用 .

    A.瀑布模型 B.V 模型 C.原型模型 D.螺旋模型

    解析:

    • 瀑布模型从一种非常高层的角度描述了软件开发过程中进行的活动,并且提出了要求开发人员经过的事件序列。该模型适用于项目开始时需求已确定的情况。

    • V 模型是瀑布模型的变种,它说明测试活动是如何与分析和设计相联系的。

    • 原型模型允许开发人员快速地构造整个系统或系统的一部分以理解或澄清问题。原型的用途是获知用户的真正需求,因此原型模型可以有效地引发系统需求。

    • 螺旋模型把开发活动和风险管理结合起来,以将风险减到最小并控制风险。

    • 演化模型在获取一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,然后逐步演化成为最终软件产品。

    • 增量模型是一种阶段化的软件开发过程模型。在该过程模型中,客户提出系统需求,并指出哪些需求是最重要的。开发团队把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成, 并且能完成特定的功能。其优点包括:能较短时间内向用户提交可完成一些有用的工作产品;逐步增加产品的功能,使用户有较充裕的时间学习和适应新产品;项目失败的风险较低;优先级最高的服务首先交付,然后依次将其他 构件集成进来,这意味着最重要的服务将接受最多的测试。快速发布

    • 喷泉模型是典型的面向对象生命周期模型,是一种以用户需求为动力,以对象作为驱动的模 型。该模型克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。“喷泉” 一词本 身体现了迭代和无间隙特性。迭代意味着模型中的开发活动常常需要重复多次,在迭代过程 中不断地完善软件系统;无间隙是指在开发活动之间不存在明显的边界

系统工程

  • 经济可行性研究的范围包括( )

    A、技术有效性 B、管理制度 C、效益分析 D、开发风险

    解析:

    • 经济可行性主要进行成本效益分析,从经济角度,确定系统是否值得开发
    • 技术可行性主要根据系统的功能、性能、约束条件等,分析在现有资源和技术条件下系统能否实现
    • 法律可行性合同责任、侵犯专利权、版权等问题
  • (多选题)在对协同电子商务平台项目进行技术可行性分析的过程中需要注意哪些方面? ( )

    A、在限制条件下,功能目标是否能达到

    B、利用现有技术,性能目标是否能够达到

    C、对开发人员数量和质量的要求,并说明能否满足

    D、在规定的期限内,开发是否能够完成

    解析:根据软件设计文档国家标准(GB8567-2006)的要求,技术可行性章节应该主要包含 以下内容:

    1.在当前的限制条件下,该系统的功能目标能否达到

    2.利用现有的技术,该系统的功能能否实现

    3.对开发人员的数量和质量的要求,并说明这些要求能否满足

    4.在规定的期限内,本系统的开发能否完成 除了上述内容之外,技术可行性部分应该对当前开发所使用的主流研发框架和架构做简要的 介绍和说明,不限于图表和文字等方式。

  • 为了分析顾客不同情况下的订票习惯,可采用以下哪种需求获取方式( )

    A、正式访谈 B、非正式访谈 C、调查表 D、观察实践

    解析:错选C,使用观察实践,情景分析获取用户在不同场景下的不同需求。

结构化方法和数据流图

  • 面向数据流自顶向下求精过程不包括

A、分析追踪数据流图

B、用户复查

C、细化数据流图

D、实现数据流图

软件工程与软件过程

软件

软件=程序+数据+文档

计算机软件

  • 计算机软件是指计算机系统中的程序及其文档
  • 程序是计算任务的处理对象和处理规则的描述
  • 文档是为了便于了解程序所需的阐明性资料

软件的特点

  • 软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确地估算
  • 软件是被开发或被设计的,没有明确的制造过程,一旦开发成功,只需复制即可,但其维护的工作量大
  • 软件的使用没有硬件那样的机械磨损和老化问题
  • 软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其他软件等)
  • 软件必须遵从人为的惯例,并适应已有的技术和系统。
  • 软件需要随接口的不同而改变

软件的分类

有多种分类方法。

  • 基础设施类
    • 系统软件
    • 支持软件
  • 应用类
    • 应用软件

软件工程

软件工程学科出现的主要原因是软件危机的出现

软件危机

  • 一个合格的软件开发是按时按量按质实现软件
  • 许多软件项目不能满足客户的要求
  • 许多软件项目超出预算和时间安排

image.png

image.png

软件工程的定义

1968年NATO(北大西洋公约组织)会议上首次提出

计算机科学技术百科全书:软件工程是应用计算机 科学、数学及管理科学等原理,开发软件的工程。 软件工程借鉴传统工程的原则、方法,以提高质量、 降低成本为目的

软件生存周期

软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存周期

软件生存周期大体可分为如下几个活动:

graph LR
A(计算机系统工程) ---B(需求分析)

    B --- C(设计)
    C ---D(编码)
    D---E(测试)
    E---F(运行)
    F---G(维护)

软件过程模型(8种)

image.png

image.png

能力成熟度模型

能力成熟度模型CMM

原本是评估依据,后来用于改进软件管理过程

image.png

能力成熟度模型集成CMMI

阶段式模型 (整体能力的划分)

image-20220905211312772

连续式模型(某方面能力的衡量)

image-20220905211353252.png

image-20220905211407538

软件过程模型

软件过程模型 瀑布模型 增量模型 原型模型 螺旋模型 喷泉模型 基于构件的开发模型 形式化方法
特点 首先有完成核心基本需求,再逐步确定非核心;多个增量可叠加 反映系统性质的一个子集 风险驱动的软件过程模型,把开发活动和风险管理结合起来,以将风险减到最小并控制风险 基于面向对象思想、迭代、无间隙。模型各个阶段没有明显界限,开发人员同步进行开发 利用预先包装的构件来构造应用系统 是建立在 严格数学基础上。开发过程重凡是采用严格 的数学语言,具有精确的数学语义的方法,都称为形 式化方法
适用场景 项目开始前需求和解决方案就很明确,短期或中期项目 不完全明确但知道核心需求,急需使用的软件,需求经常变化 要从用户身上了解主要需求,周期是一个环型,可废弃上一个原型或在其基础上追加 适应于面向对象的软件开发过程,以对象为驱动,只用对象和关系实现活动的迭代和无间隙 构件化结构,可以尽量重用已有的组件。 对安全性、可靠性极高
优缺点 缺:缺乏灵活性、维护代价大 各增量构件均为一个可操作产品。融合了瀑布模 型的基本成分(重复地应用)和演化模型的迭代特征,特别适用于需求经常发生变化的软件开发。 用户需要方面,重交互。缩短了开发周期,加快了工程进 度,降低成本。 将原型实现的迭代特征与瀑布模型中控制的系统化的方面结合起来, 不仅体现了这两种模型的优点,而且增加了风险分析 可以提高软件 项目开发效率,节省开发时间 减少开发、降低风险和成本、需求妥协、快速交付 易于发现需求的歧义性、不完整性和不一致性,易于对分析模型、 设计模型和程序进行验证。

瀑布模型

项目需求方案明确,短期小型工程

从下到上很难,不适用需求经常换的

image-20220905211552135

image-20220905211651996

image-20220905211703289

演化模型

开发早期对软件需求的认识是模糊的、不确定的,因此软件很难一次开发成功。逐步演化而来

开发的软件,需求不能一次搞清楚,且系统需求比较复杂?

答案:用演化模型

graph LR
A{演化模型}-->B(增量模型)
A-->C(原型模型)
A-->D(螺旋模型)

增量模型

每次增量都可用,有核心需求,急需使用的软件。多个增量可重叠

image-20220905212334175

  • 适用于需求经常发生变化的软件开发
  • 第一个增量通常是核心产品

image-20220905212549792

原型模型

原型(prototype)是预期系统的一个可执行版本,反映 了系统性质(如功能、计算结果等)的一个选定的子集。

image-20220905212656390

特点:

  • 用户不能完全准确表达对未来系统的全面要求
  • 开发者对要解决的问题的应用问题模糊不清
  • 一圈出来一个版本

类型:

  • 探索型
  • 实验型
  • 演化型

image-20220905212802183

增量模型和原型模型的区别

核心都是迭代,但增量模型强调各增量构建均是一个可操作产品。原型模型不断讨论修改完善。

image-20220905212909013

image-20220905213105101

螺旋模型

  • 有风险机制

image-20220905213228769

image-20220905213239716

image-20220905213315281.png

喷泉模型

  • 像喷泉从下往上,后面的工作在做前面的也没停止
  • 基于面向对象思想,迭代、无间隙

注意,面向对象不是喷泉独有的,其他一些模型也有

基于构件的开发模型

image-20220905213500212.png

image-20220905213513555.png

形式化模型

建立在严格数学基础上

image-20220905213521544.png

CASE工具和环境的重要性

CASE 已被证明可以加快开发速度,提高应用软件生产率并保证应用软件的可靠品质。计算机专业人员利用计算机使他们的企业提高了效率,企业的各个部门通过使用计算机 提高了生产率和效率,增强了企业的竞争力并使之带来了更多的利润

系统工程

系统工程的任务

  1. 识别用户的要求

    • 识别基于计算机系统的整体要求
    • 标识系统的功能和性能范围
    • 确定系统的功能、性能、约束和接口
  2. 系统建模和模拟

    考虑以下模型:

    • 硬件系统模型
    • 软件系统模型
    • 人机接口模型
    • 数据模型
  3. 成本估算及进度安排

    需要一定的资金投入和时间约束

    • 进行成本估算
    • 作出进度安排
  4. 可行性分析

    主要从经济技术法律等方面分析所给出的解决方案是否科学。

  5. 生成系统规格说明

    作为以后开发基于计算机的系统的依据

可行性分析的任务

  1. 经济可行性:确定系统是否值得开发
    • 成本
    • 效益
    • 货币的时间价值
    • 投资的回收期
    • 纯收入
  2. 技术可行性:分析系统在现有资源和条件下能否实现
    • 风险分析
    • 资源分析
    • 技术分析
  3. 法律可行性:是否引起侵权、破坏等责任问题
  4. 方法的选择和折衷

需求工程

需求工程的具体步骤和任务

  1. 需求获取

    • 系统分析人员通过与用户的交流

    • 对现有系统的观察及时对任务进行分析

  2. 需求分析与协商:

    • 分析每个需求与其他需求的关系以检查需求的一致性、重叠和遗漏的情况
    • 并根据用户的需求对需求进行排序
  3. 系统建模

    通过合适的工具和符号系统地描述需求

  4. 需求规约

    给出对目标软件的各种需求

  5. 需求验证

    对功能的正确性、完整性和清晰性以及其他需求给予评价

  6. 需求管理

    对需求工程所有相关活动的规约和控制

制定需求获取策略主要考虑因素

  1. 功能需求

    • 考虑系统要做什么,在何时做
    • 在合适及如何修改或升级
  2. 性能需求

    考虑软件开发的技术性指标

  3. 用户或人为因素

    考虑用户的类型

需求获取的方法和策略

  • 建立顺畅的通信途径
  • 访谈与调查
  • 亲身实践
  • 会议
  • 头脑风暴
  • 概念建模
  • 原型、仿真
  • 自省
  • 用户行为数据在线采集

设计工程

软件设计原则

image.png

抽象与逐步求精

抽象

  • 在最高层用术语概括性描述
  • 在中间层次用面向过程化方法
  • 在最低层用直接实现的方式

抽象:忽略一个问题中与当前目标无关的那些方面,以便更充分地关注与当前目标有关的方面

分解:将问题不断分解为较小的问题,直到每个最底层的问题都足够简单为止

随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构)

模块化

模块化:就是把程序划分成独立命名可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成 一个整体,可以完成指定的功能满足用户的需求。

如果一个大型程序仅由一个模块组成,它将很难被人所理解。

“分而治之”

问:程序采用模块化设计,有哪些优点?

答:程序采用模块化设计,有以下优点:

  • 将问题简化,划分模块可使每一个模块完成单一的功能, 模块之间的联接关系简单,具有独立性

  • 可以独立的进行模块的编码测试,便于软件开发工作的组织

  • 把每一个模块要解决的问题局限在有限的范围,减少出错 机会,易于修改和维护;

  • 有助于软件项目的组织管理,一个复杂的大型软件可以由许多程序员分工编写,提高了开发效率;

  • 一个模块可被重复使用,以提高软件产品的复用率;

  • 利于估计工作量和开发成本。

信息隐藏

David Parnas在1972年最早提出信息隐藏的观点。 他在其论文中指出:代码模块应该采用定义良好的接口来封装,这些模块的内部结构应该是程序员的私有财产外部是不可见的

image.png

image.png

功能独立

功能独立:功能独立是模块化、抽象、信息隐藏和局部化等概念的直接结果。

两个定性标准:

  • 内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚要高, 每个模块完成一个相对独立的特定子功能。
  • 耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。耦合要低, 即每个模块和其他模块之间的关系要简单。

内聚

紧密程度

image.png

逻辑内聚

image.png

时间内聚:初始化

image.png

过程内聚:按任务的顺序

image.png

通信内聚:模块的功能都要做,但数据集都是同一个(和逻辑内聚区分)

image.png

顺序内聚:既要按任务的顺序,一个的输出要作为另一个的输入

image.png

功能内聚:只完成一项工作

image.png

通信内聚和逻辑内聚区分:前者数据集都是同一个,但是逻辑内聚也可以同一个数据集,这时看是否有传入参数来决定执行的操作。

耦合

相互依赖程度

image.png

image.png

内容耦合

公共耦合

image.png

外部耦合

image.png

控制耦合

image.png

标记耦合

image.png

数据耦合

例如中途调用的函数

image.png

非直接耦合

image.png

标记耦合传的是数据结构的一部分,如数组、字符串等,而数据耦合传的是简单数据

高内聚,低耦合

结构化程序设计方法

详细描述处理过程常用工具:图形、表格和语言

  • 图形:程序流程图、N-S图、PAD图
  • 表格:判定表
  • 语言:过程设计语言(PDL)

image-20221222113658687.png

结构化分析方法

  • 结构化方法:它以数据流为中心构建软件的分析模型和设计模型
  • 结构化分析与建模:主要思想:抽象与自顶向下的逐层分解(控制复杂性的两个基本手段)
  • 抽象忽略一个问题中与当前目标无关的那些方面,以便更充分地关注与当前目标有关的方面。
  • 分解:将问题不断分解为较小的问题,直到每个最底层的问题都足够简单为止。
  • 结构化系统分析模型组成结构有:
    • E-R图
    • 数据流图(DFD)
    • 状态变迁图(STD图)
    • 数据字典(DD)

数据流图

主要思想:数据流图描述输入数据流到输出数据流的变换(即加工),用于对系统的功能建模

符号:

  • ⚪或椭圆 表示加工,也叫数据处理
  • ▭ 矩形表示数据流的源点或终点,统称外部实体
  • = 双杠,文件或数据存储
  • → 箭头表示数据流

使用数据流图进行需求分析的过程:

  1. 画出系统的输入和输出

    A. 确定源和宿

    B. 确定加工

    C. 确定数据流 :输入数据流,输出数据流

    D. 顶层图通常没有文件

  2. 画出系统内部

    A. 确定加工 :确定父图中某加工分解而成的子加工

    B. 确定数据流 :沿用或新增

    C. 确定文件

    D. 确定源和宿

  3. 画出加工内部

  4. 重复第 3 步,直至每个尚未分解的加工都足够简单(即不必再分解)。

image.png

1f10dc03d569bb00e848cdecb12578d.jpg

画顶层图

  • 顶层图有唯一的加工椭圆表示
  • 系统之外的源或宿(外部实体):矩形表示

image.png

步骤:

  • 确定唯一加工
  • 确定功能需求和外部实体(源或宿)
  • 确定数据流:系统的输入/输出信息

画0层图

步骤:

  • 确定加工:确定父图中某加工分解而成的子加工

    • 根据功能分解来确定加工:将一个复杂的功能分解成若干个较小的功能,较多应用于高层DFD中的分解

    image.png

  • 确定源和宿

    image.png

  • 确定数据流

    • 沿用父图
    • 新增数据流

image.png

image.png

  • 确定文件
    • 已有文件则应画在子图中
    • 分解子图中,若需要保存某些中间数据以备后用,则可以讲这些数据组成一个新的文件
    • 新文件至少应有一个加工为其写入记录,同时至少存在另一个加工该文件。

image.png

画1层图(画加工内部)

复杂的加工可以继续分解为一张DFD子图

分解方法:

  1. 指定图中的某一个加工看作一个小系统,系统的输入输出流就是这个加工的输入输出流
  2. 然后采用画0层图的方法,画出该加工的子图
  • 加工1子图内部,即考试报名内部

    image.png

  • 加工2子图,即统计成绩

    image.png

总结

画分层数据流图的步骤:

  1. 画系统的输入和输出
  2. 画系统内部
  3. 画加工内部
  4. 重复第3步,直至每个尚未分解的加工都足够简单 (即不必再分解)

注意:千万不要试图在数据流图中表现分支条件或循环,这样会造 成混乱,画不出正确的数据流图。

检查分层细化时是否保持信息的连续性,即当把一个处理分解成一 系列处理时,分解前和分解后的一系列输入输出数据流必须相同, 这条规则也成为数据流图的数据平衡原则。

审查

完整性:

  • 每个加工至少有一个输入数据流和一个输出数据流
  • 分层数据流图,每个文件应至少有一个加工读取该文件,有另一个加工写该文件
  • 画的是数据流而不是控制流

数据字典

判定表

确定四个区域的内容

image.png

简化标准:

  • 具有相同的操作
  • 有且仅有一个不同的取值,简化后用小横杠表示,如本题简化后第四列第一个

判定树

image.png

  • 根节点是加工过
  • 最右边是具体的部分
  • 中间的部分都是影响条件

模块结构图

image-20221024114704451.png

注意:

  • 模块之间相连的线段(调用)是没有方向的,有方向的是数据流

结构图

基本成分:模块,调用,数据

类树形结构

image.png

  • 扇入是别人调用他的个数
  • 扇出是他调用别人的个数

含义

  • 深度和宽度在一定程度上反映了程序的规模和复杂程度
  • 一个模块的扇出过大通常意味着该模块比较复杂,然而扇出太少可能导致深度增加
  • 一个模块的扇入表示有多少模块可直接调用它,它反映了该模块的复用程度,因此模块的扇入越大越好

面向数据结构的分析与设计

什么是面向数据结构的方法

面向数据结构的方法是

· 以数据结构为中心

· 从输入/输出的数据结构导出程序结构的

· 一种软件需求分析与设计的方法

特点

· ①以信息对象及其操作作为核心进行需求分析

· ②认为复合信息对象具有层次结构,并且可按顺序、选择、重复3种结构分解为成员对象信息

· ③提供由层次信息结构映射为程序结构的机制,从而为软件设计奠定良好的基础

Jackson图的三种结构

顺序元素

clip_image002-16726347926341.jpg

1.1.1. 选择元素

clip_image004.jpg

1.1.2. 重复元素

clip_image006.jpg

面向对象方法基础

UML

image.png

image.png

image.png

image.png

UML语言中的关系

· 关联

· 依赖

· 泛化

· 实现

· 聚合

· 组合

UML包含的视图(红色为已学)

结构化

静态视图

• 类图(class)

• 展示类与类之间的相互联系,如关联、依赖、泛化等。可以把若干个相关类包装在一起作为一个单元(包),相当于一个子系统。。

• 一个系统可以有多张类图,一个类也可以出现在几张类图中

• 对象图是类的实例。区分:对象图在对象名下面加了下划线,同时显示对象间的实例连结关系

• 类

• 类间关系

• 四种

• 依赖

• —> 被依赖元素的变化会要求或指示依赖元素的改变(例如类A的方法仅仅使用了类B的对象,那么类A依赖于类B)

• 访问

• 绑定

• 调用

• 创建

• 派生

• 实例化

• 允许

• 实现

• 精化

• 发送

• 使用

• 关联(聚集、组合)

• 对象与其他实例的连接

• 聚集 ——♢ “部分”对象可以是任意整体对象的一部分

• 组合 ——◆ 更强形式的关联,具有强的物主身份,即“整体”对象拥有“部分”对象(例如类A的部分是由类B的对象组成,并且类A控制类B的生命周期,那么类A与类B是组合关系)

• 是一种拥有的关系,它使一个类知道另一個类的属性和方法;如:老师与学生,丈夫与妻子的关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者沒有箭头,单向的关联有一个箭头。

• 泛化 —▷ 继承,由子类指向父类

• 实现 —▷ 类连接到接口,接口是行为规划而不是结构

• 强度:依赖<关联<聚集<组合<泛化=实现,类间关系依次增强

属性和操作

• 属性中的变量名要小写

主要版型

• 边界类

• 控制类

• 实体类

设计视图

• 内部结构(internal structure)

• 协作图(collaboration)

• 构件图(component)

用况视图

• 用况图(use case)

• 展示各类外部执行者与系统提供的用况之间的连接。用况图给出用户所感受到的系统行为,但不描述系统如何实现该功能

• 用况–系统的功能,执行者–使用功能的人或外部系统

• 主要元素

• 参与者

• 用例

• 关系

• 关联 ———————————

• 包含 ——<>——

• 扩展 ——<>——

• 泛化 ——————————▷

动态的

• 状态机视图

  • 状态机图(state machine)
    • 通常是对类描述的补充,说明该类的对象所有可能的状态以及哪些事件将导致状态的改变。
    • 状态的改变成为迁移(transition)。一个状态迁移还可以有与之相关的动作,该动作指出状态迁移时应做什么。
    • 不是所有的类都要画状态,应当满足这些条件才画
    • 有一些意义明确的状态
    • 其行为受不同的状态所影响和改变

• 活动视图

  • 活动图(activity)
    • 描述完成一个操作(如用况)所需要的活动
    • 由动作状态组成
    • 完成一个动作的活动的规约
    • 一个动作完成时,离开该动作状态
    • 消息发送和接收的规约

• 交互视图

  • 顺序图(sequence)

    • 展示几个对象之间的动态交互关系。
    • 主要显示:对象之间发送消息的顺序,显示对象之间的交互,即系统执行的某一特定点所发生的事
  • 通信图(communication)

· 物理的

  • 部署视图
    • 部署图(deployment)

· 模型管理

  • 模型管理视图

    • 包图(package)
  • 剖图

    • 包图(package)

UML包括哪四种事物?

· 1.结构事物

• 类

• 接口

• 用例

• 主动类

• 构件

• 结点等

· 2.动作事物

• 状态等

· 3.组织事物

• 包

· 4.注释事物

• 给建模者提供信息,提供关于任意信息的文本说明,但没有语义作用

面向对象建模

用况建模

执行者,用况

用况是执行者想要做的事,执行者执行用况

线段带箭头表示发起的方向

注意扩展关系是扩展指向用况

泛化(归纳)关系是子用况指向父用况,类似继承

实验****5 面向对象方法的应用(1)

用况建模

(1) 实验目的

掌握UML用况图的画法,学习在软件构思和需求分析阶段进行用况建模,学会填写相关文档。

(2) 实验原理

ü 统一建模语言

统一建模语言(UML)是一种用来对真实世界物体进行建模的标准标记,这个建模的过程是开发面向对象设计方法的第一步。

UML从考虑系统的不同角度出发,定义了用况****图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图等图形,这些图从不同的侧面对系统进行描述。系统模型将这些不同的侧面综合成一致的整体,便于系统的分析和构造。尽管UML和其它开发工具还会设计出许多派生的视图,但上述这些图和其它辅助性的文档是软件开发人员所见的最基本的构造。

UML适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。在需求分析阶段,可以用用况来捕获用户需求。通过用况建模,描述对系统感兴趣的外部角色及其对系统(用况)的功能要求。分析和设计阶段主要关心问题域中的主要概念(如类和对象等)和机制,需要识别这些类以及它们相互间的关系,并用UML类图来描述。为实现用况,类之间需要协作,这可以用UML动态模型来描述。

ü 用况模型

用况图定义:由执行者(Actor)、用况(Use Case)以及它们之间的关系构成的用于描述系统功能的静态视图称为用况图。用况图(User Case Diagram)是被称为执行者的外部实体所能观察到的系统功能的模型图,呈现了一些执行者和一些用例,以及它们之间的关系,展示了用况之间以及与执行者之间是怎样相互联系的,主要用于对系统、子系统或类的功能行为进行建模。用况图定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现。

用况图由执行者(Actor)、用况(Use Case)、系统边界、箭头组成,用画图的方法来完成。

  • 执行者(Actor)
    • 定义:执行者(Actor)不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。因此执行者可以是人,可以是事物,也可以是时间或其他系统等等。还有一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。比如小明是图书馆的管理员,他参与图书馆管理系统的交互,这时他既可以作为管理员这个角色参与管理,也可以作为借书者向图书馆借书,在这里小明扮演了两个角色,是两个不同的执行者。
    • 画法:执行者在Visio称为“参与者”,在画图中用简笔人物画来表示,人物下面附上执行者的名称。执行者的命名,通常是一些角色名,或者系统设备名等。

wps1.png

  • 用况
    • 定义:是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生传递特定执行者的价值的可观察结果。这是UML对用况的正式定义,对我们初学者可能有点难懂。我们可以这样去理解,用况是执行者想要系统做的事情。
    • 画法:用况在Visio称为“用例”,在画图中用椭圆来表示,椭圆下面附上用况的名称。对于用况的命名,我们可以给用况取一个简单、描述性的名称,一般为带有动作性的词。

wps2.png

  • 系统边界
    • 定义:系统边界是用来表示正在建模系统的边界。边界内表示系统的组成部分,边界外表示系统外部。
    • 画法:可使用Visio的“子系统”画系统边界,因为系统边界的作用有时候不是很明显,所以在画图时可省略。系统边界在画图中用方框来表示,同时附上系统的名称,执行者画在边界的外面,用况画在边界里面。命名时使用系统或子系统的名称就可以了。

wps3.png

用况图中的关系

定义:用况图中可表示执行者和用况之间,用况与用况之间,执行者与执行者之间的多种关系。

  • 关联关系:执行者与用况之间的关系,表示用况是这个执行者发起的,执行者可以行使系统中的这个功能。关联关系在Visio中就称为“关联”,为一条不带箭头的线段。

wps4.png

  • 包含关系:用况与用况之间的关系。基用况必须和被包含用况一起使用才够完整,被包含用况也必然被执行。包含关系在Visio中就称为“包含”,使用带箭头的虚线表示(在线上标注《》),箭头从基用况指向被包含用况。

wps5.png

  • 扩展关系:用况与用况之间的关系。扩展用况是对基用况(被扩展用况)的扩展,即使没有扩展用况的参与,也可以完成一个完整的功能。扩展关系在Visio中就称为“扩展”,使用带箭头的虚线表示(在线上标注《》),箭头从扩展用况指向基用况(被扩展用况)。

wps6.png

  • 泛化关系:同类元素之间的关系,如用况与用况之间,执行者与执行者之间。类似面向对象中的继承关系。泛化关系在Visio中称为“归纳”,用实线+空心三角形表示,空心三角形指向父,子可以继承父所有的行为

用况图

用况图主要的作用有三个:(1)获取需求;(2)指导测试;(3)还可在整个过程中的其它工作流起到指导作用。

用况图

用况图是从程序员角度描述系统的功能?错

静态建模

类图和对象图

  • 对象图是类图的实例

  • 类之间的关系有关联、依赖、泛化、实现

  • 类图是一种静态模型,是其他图的基础

  • 一个系统可以有多张类图,一个类也可以出现在几张类图中

如何用UML表示一个类

类又名称,属性和操作组成

名称唯一,一般采用双驼峰命名法

属性,操作首字母通常小写,单驼峰

属性的语法:属性名:类型=初始值 例如:maxCount:Interger=0

操作的语法:操作名 (参数表):返回类型 例如:method1(Object par):void

类之间的关系

— 关联

–> 依赖

—▷泛化 需要协助

–▷ 实现

重数:表示这个类的多少个实例对象可以与另一个类的一个实例关联

允许一个类与自身关联

状态图和活动图

什么是状态图?

· 通常是对类描述的补充,说明该类的对象所有可能的状态以及哪些事件将导致状态的改变。

状态图的组成元素

· 状态

· 状态之间的迁移

· 分支

· 状态内的迁移

· 复合状态

活动图

什么是活动图?

· 描述完成一个操作(如用况)所需要的活动

活动图的组成元素

· 活动

· 泳道

· 分支

· 分岔和汇合

· 对象流

1.1. 顺序图

1.1.1. 什么是顺序图?

展示几个对象之间的动态交互关系

1.1.2. 顺序图

1.组成

• ①对象

• ②生命线

• ③激活

• ④消息(其中描述消息语法不是重点)

• ⑤组合片段

2.带条件和分支的顺序图

3.带约束的顺序图

4.带循环和自身消息的顺序图

5.创建对象和删除对象的顺序图

结构化控制结构

6.带组合片段的顺序图

• 组合片段是矩形的,注意其覆盖的高度和宽度,高度对应时长,宽度对应覆盖的对象

• 框住一个范围,也可以嵌套

7.网上在线订购的顺序图

买饮料的顺序图

第九章 基于构件的软件开发

什么是构件

软件构件是软件系统中具有相对独立功能,可以明确标识,接口由规约指定,与语境有明显依赖关系,可独立部署,且多由第三方提供的可组装软件实体。

可复用构建是指具有可复用价值的构件

可变性分析

构件应具有较强的通用性和可变性

为了满足不同的复用需求,需要在构件复用时可能发生变化的一个或多个位置上标识变化点,同时为变化点附加一个或多个变体

基于构建的软件开发过程

领域工程步骤(生产构建)

1领域分析

2建立领域特定的基准体系结构模型

3标识候选构件

4泛化和可变性分析

5构件重构

6构件的测试

7构件的包装

8构件的入库

应用系统工程的步骤(使用构件)

1建立应用系统的体系结构模型

2寻找候选构件

3评价和选择合适的构件

4构件的修改和特化

5开发未被复用的部分

6构件的组装

7集成测试

8评价被复用的构件,并推荐可能的新构件

clip_image002-16726355802722.jpg

第十章 敏捷软件开发

什么是敏捷开发方法

敏捷开发是一种基于更紧密的团队协作、能够有效应对快速变化需求、快速交付高质量软件的迭代和增量的新型软件开发方法

代表性的敏捷开发方法

Scrum(迭代式增量软件开发过程)为基础的方法论

· Scrum

· Scrum/XP混合

· …

看板方法

精益创业

极限编程(XP)