复习笔记:系统分析与设计

概论

软件的基本特征:

  • 复杂性、一致性、可变性、不可见性。

软件开发的目标:

  • 用户需求为向导,构建出满足用户需求的软件系统。

软件开发的利益相关者:

  • 客户、开发者。

CMM过程成熟度级别:

  • 初始级、可重复级、已定义级、已管理级、优化级。

ISO9000标准:

  • 主要前提:如果过程是正确的,则结果(产品或服务)就是正确的。
  • 组织必须文档化并记录它的所有正式活动。

三级管理系统:

决策级别 决策焦点 典型IS应用 典型IT解决方案 关键概念
策略级 长期目标 市场和销售分析、产品规划、性能评估 数据挖掘、知识管理 知识
战术级 短期目标和资源分配 预算分析、薪酬预测、库存调度、客户服务 数据仓库、分析处理、电子表格 信息
操作级 员工日常生活和生产支持 发薪、发货、采购、财务 数据库、事务处理、应用生成器 数据

系统整体规划及分析方法:

  • SWOT:优势(Strengths)、劣势(Weaknesses)、机会(Opportunities)、威胁(Threats)
  • VCM:价值链模型(Value Chain Model)
    5类基本活动:内部物流、操作、外部物流、销售与市场、服务。
  • BPR:业务过程重组(Business Process Reengineering)
    方法:确定业务愿景、确定再造过程、度量现有过程、识别IT杠杆、设计原形。
  • ISA:信息系统体系结构(Information Systems Architecture)
    五个IS参与者:规划者、所有者、设计者、建造者、承包者。

需求确定

需求:定义了系统的期望服务和系统必须遵守的约束。

  • 期望服务(功能性需求):系统范围、必须的业务功能、要求的数据结构。
  • 系统约束(非功能性需求):可用性、可复用性、可靠性、性能、效率、可支持性。

如何做软件系统的需求分析:

  • 需求采集(确定)、需求建模(可视化)、需求规格说明。

需求引导:

  • 传统方法:与客户面谈、调查表、观察、研究业务文档。
  • 现代方法:软件原型法、头脑风暴、联合应用开发JAD、快速应用开发RAD。

需求协商与确认:

  • 需求协商:以文档草稿为基础,对列出的需求进行协商与修正。
  • 需求确认:更加完整的需求文档版本,需求标识与分类,利益相关者阅读文档并复审。
  • 步骤:需求依赖矩阵、需求风险分析、优先级。

需求管理:

  • 标识与分类:唯一标识符、在文档层次内的顺序编号、在需求分类中的顺序编号。
  • 变更管理:建立变更请求文档、评估变更影响、实现变更、配置管理工具存储与跟踪。

需求文档:

  • 运行环境要求、功能性需求、非功能性需求、接口等。

业务流程建模与标注BPMN:

  • 流对象(Flow):事件、活动、网关。
  • 连接对象(Connection):序列流、消息流、关联。
  • 泳道(Swinlane):过程中的业务实体(参与者)。
  • 人工信息(Artifact):数据对象、组、注释。
    复习笔记:系统分析与设计_第1张图片
    复习笔记:系统分析与设计_第2张图片
    复习笔记:系统分析与设计_第3张图片
    复习笔记:系统分析与设计_第4张图片

可视化建模基础

统一建模语言UML:图形化和形式化描述需求。

用例视图(用例图)

  • 用例:系统外部可见的系统功能单元。
    用例文档化:简要描述、参与者、前置条件、主事件流、备选流、后置条件。
  • 参与者:外部的人或事物针对用例所扮演的角色。
  • 关系:关联、包含、扩展、泛化。
    关联:参与者与用例之间的关系。
    包含(include):箭头指向被包含用例。
    扩展(extend):箭头指向被扩展用例。
    泛化:一般和特殊的关系,空三角形箭头从特殊(子类)指向一般(超类)。
    复习笔记:系统分析与设计_第5张图片

活动视图(活动图)

  • 动作:活动由若干动作组成。
  • 控制流:从一个动作到下一个动作控制的流程。
  • 关系:迁移、分支、分叉、结合。
    迁移:活动的完成与新活动的开始。
    分支:根据条件控制执行方向。
    分叉(fork):以下的活动可并发执行。
    结合(join):以上的并发活动再此结合。
    复习笔记:系统分析与设计_第6张图片

结构视图(类图)

  • 类(Class):一组具有相同数据结构和数据操作的对象集合。
    如何从功能性需求分析中抽取类:抽取候选类、判定候选类、合并/扩展。
  • 类名:实体类(正体)、抽象类(斜体)。
  • 类属性:[可见性] 属性名称:[属性类型][=初始值]
  • 类操作:[可见性] 方法名称([参数])[:返回类型]
    可见性:+表示public、-表示private、#号表示protected。
  • 类关系:关联、聚合、复合、泛化。
    关联:类属性与其它类关联。
    聚合(aggregation):删除整体不一定会删除部分,用空心菱形表示。
    复合(composition):删除整体一定会删除部分,用实心菱形表示。
    泛化:继承、可替换性、多态性。
    复习笔记:系统分析与设计_第7张图片

交互视图

活动图和交互图的异同:

  • 同:用例的实现、具有过程。
  • 异:交互图的抽象级别低、一个活动图可能对应多个交互图。

顺序图和通信图可以相互转换。

顺序图(时序图):强调对象间时间顺序。

  • 生命线:表示对象存在的时间。
  • 激活:表示此时间段内对象执行相应操作。
  • 消息:
    同步消息:发送者停止活动,等待接收者放弃或返回控制,用实三角形箭头表示。
    异步消息:接收者和发送者是并发工作的,用普通箭头表示。
    返回消息:表示从过程调用返回,用虚线箭头表示。
    复习笔记:系统分析与设计_第8张图片

通信图(协作图):强调对象间通信消息。

  • 箭头表示消息,没有生命线和激活。
    复习笔记:系统分析与设计_第9张图片

状态机视图(状态图)

  • 状态:在对象生命周期中的某个条件或者状况。
  • 转换:事件(参数) [守卫]/动作
    复习笔记:系统分析与设计_第10张图片

实现视图

构件图:系统物理视图,显示构件间的依赖关系。

  • 构件(component):系统中可重用的模块封装为具有可替代性的物理单元。
    接口:提供接口、依赖接口。
  • 子系统(subsystem):继承构件的概念,封装系统行为的某些部分。
  • 包(package):一组高度相关类的聚合,划分程序的逻辑模型。
    复习笔记:系统分析与设计_第11张图片

部署图:系统运行时的结构,展示硬件的配置及其软件如何部署到网络结构中。

  • 节点:可以是硬件也可以是运行其上的软件系统,用立方体表示。
  • 通信:节点之间的连线。
    复习笔记:系统分析与设计_第12张图片

需求规格说明

体系结构:定义了系统中相互作用的软件构件与子系统的结构与组织形式。

模型-视图-控制器MVC:

  • 模型(Model):接受视图请求的数据,返回最终的处理结果。
    业务模型:业务流程/状态的实际执行以及业务规则的维护。
    数据模型:实体对象的数据保存。
  • 视图(View):用户交互界面。
  • 控制器(Controller):决定选择什么样的模型和视图来可以完成特定的用户请求。
    复习笔记:系统分析与设计_第13张图片

J2EE核心体系结构:
复习笔记:系统分析与设计_第14张图片

表示-控制器-bean-中介者-实体-资源PCBMER:

  • 原则:向下依赖原则DDP、向上通知原则UNP、相邻通信原则NCP、显式关联原则EAP、循环去除原则CEP、类命名原则CNP、相识包原则APP。
    复习笔记:系统分析与设计_第15张图片

需求规格说明:
复习笔记:系统分析与设计_第16张图片

状态规格说明:

  • 发现类(类建模):名词短语法、公共类模式法、用例驱动法、CRC(类-职责-协作者)。
  • 发现关联(关联建模):类的属性是其他类、从用例中发现、循环关联。
  • 说明关联(关联建模):确定关联的多重性、异或约束Xor。
  • 接口(interface):接口没有属性、关联或状态,接口只有操作。
  • 表示接口(接口建模):使用(use)接口用虚线箭头表示,实现(implement)接口用空三角形虚线箭头表示。
    复习笔记:系统分析与设计_第17张图片

行为规格说明:

  • 发现用例(用例建模):一个功能性需求可以直接映射为一个用例。
  • 发现动作(活动建模):对描述用例的叙述性规格说明进行语句分析。
  • 发现消息(交互建模):活动图中的动作映射为顺序图中的消息。
  • 发现操作(操作建模):顺序图中的每一个消息都有目标对象的一个操作为其服务。

状态变化规格说明:

  • 发现状态:不是所有属性都能决定状态变化。

从分析到设计

高级类扩展:

  • 构造型:扩展已有类型和类的语义,但不改动结构。
    在这里插入图片描述
  • 注释:文本解释,对元素的语义没有影响。
  • 约束:条件或限制,语义的申明。
    复习笔记:系统分析与设计_第18张图片
  • 标签:通过名-值对丰富模型语义,模型元素必须定义一个带有标签定义的构造型。
    复习笔记:系统分析与设计_第19张图片
  • 导出信息:一种应用于属性或关联的约束,从其他模型元素获得。
    复习笔记:系统分析与设计_第20张图片
  • 关联类和具体化类:
    关联类:两个类之间存在多对多的关联,且每个关联实例都有自己的属性值。
    关联类需要满足一个约束:对于每一个类A实例和类B实例之间的关联,只能存在一个类C的实例。
    具体化类:若不满足约束,则要用一个普通类D代替类C,并在类D与类A和B之间分别建立二元关联。

高级泛化与继承建模:

  • 扩展继承:子类具有比超类更多的特性(属性或方法)。
  • 限制继承:有一些超类特性在子类中被禁止(重载)。
  • 方便继承:任意选择一个类作为其他类的父类。
    两个类具有相似的实现,但不属于同类,不应该采用方便继承。

高级聚合与委托建模:

  • 复合:物理包含,同一个对象只能属于一个复合对象。
    ExclusiveOwns聚合:存在依赖性、传递性、非对称性、固定性。
    Owns聚合:存在依赖性、传递性、非对称性。
  • 聚合:非物理包含,同一个对象可以有多个聚合。
    Has聚合:传递性、非对称性。
    Member聚合:多对多。

高级交互建模:

  • 生命线与消息:
    复习笔记:系统分析与设计_第21张图片

  • 片段:
    alt:可选片段,如果守卫条件中表达if-then-else条件逻辑。
    opt:选择片段,如果守卫条件为真,执行该片段。
    loop:循环片段,服从循环片段而重复多次的片段。
    break:中断片段,如果中断条件为真,执行该片段。
    parallel:并行片段,允许所包含行为交替执行。


体系结构与程序设计

设计模式:

  • 外观(Facade):为子系统提供一个高层接口,来隐藏子系统的复杂性。
  • 抽象工厂(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  • 责任链(Chain of Responsibility):为请求创建一个接收者对象的链。
  • 观察者(Observer):定义对象间一对多的依赖关系,当一个对象变更状态时,其所有依赖着都被通知到并自动更新。
  • 中介者(Mediator):提供中介类处理不同类之间的通信,支持松耦合。

程序设计(详细设计):每次只关注一个应用程序,扩展GUI和DB设计。

  • 程序设计的目标:将分析模型转换成详细设计文档。
  • 类内聚与类耦合:
    类内聚(Class cohesion):类的内部自确定的程度,度量类的独立性。
    类耦合(Class coupling):类之间联系的程度,度量类的相互依赖性。
  • Demeter法则:限制类间任意通信。
    消息的目标只能是:对象本身、方法参数引用的对象、属性引用的对象、方法创建的对象、全局变量引用的对象。
    应用:外观模式、中介者模式。
    问题:在系统里造出大量的小方法、不同模块之间的通信效率降低。
  • 存取方法与机械类:
    存取方法定义观察者(get)或改变者(set)操作,限制其它类访问自身的状态。
    具有许多存取方法的类会有变成机械类的风险。
  • 动态分类与混合实例内聚:
    动态分类:对象在不同时刻属于不同类。
    混合实例内聚:一部分属性仅对一部分对象有意义。
  • 复用策略:
    复用技术:继承、委托、代码拷贝。
    复用粒度:类、构件、解决方案。
    复用策略:工具包 (类)、框架(构件)、模式(开发方法过程)。

协作建模:不同实体相互协作完成共同工作。

  • 协作:用虚线椭圆表示。
  • 实体:用矩形表示,由连接器连接。

用户界面设计

图形用户界面GUI:采用图形方式显示的计算机操作用户界面。

  • GUI设计原则:方便用户控制、美观与实用、减少用户记忆负担、界面一致性、个性化。
  • GUI原型设计方法:
    复习笔记:系统分析与设计_第22张图片

桌面GUI设计方法:

  • 主窗口设计:列表窗口、多窗口、树型列表窗口;
  • 子窗口设计:对话框、标签页、下拉列表、消息框;
  • 菜单与工具栏设计;
  • 按钮与其它控件设计。

Web GUI设计方法:

  • WEB应用:供浏览器访问的Web程序,可访问静态页面和动态页面及数据库。
  • 页面布局设计、页面交互设计、页面内容设计。
  • Web标准化布局:结构(HTML)、样式(CSS)、行为(JavaScript)。

你可能感兴趣的:(软件工程)