zoukankan      html  css  js  c++  java
  • 软件工程需求分析

    一、软件需求简介

    在开发周期中发现需求理解错误的时间越早越好,修正错误的代价按发现错误时间的指数增加。

    需求分析的位置(位于软件定义时期末尾):

    软件需求的特性:

    • 可验证的:需求是测试的依据,尽可能量化表述
    • 除了行为属性,还可能有其它属性,如:优先级
    • 产品需求
    • 过程需求:对开发过程的要求,如:使用某种语言或者工具
    • 功能性需求(Functional Requirements, FR)
    • 非功能性需求(Non-Functional Requirements, NFR):可进一步分为:性能要求,可维护性要求,安全要求等

    注意FR和NFR的区分。

    二、需求分析

     需求分析的四个步骤:

    1. 需求获取:从用户处得到N(Needs)
    2. 需求分析:从多方面考虑获取到的需求:
      • 完整性:包括全部必要信息
      • 正确性:各项需求准确无误,无歧义
      • 合理性:各项需求之间,需求与系统之间无矛盾
      • 可行性:技术,经济,社会等方面可行
      • 充分性:需求是否全面,周到,是否还需添加需求
    3. 需求定义:编写《需求规格说明》SRS: Software Requirement Specification
    4. 需求验证:检验需求的完整性,非二义性,内外连贯性,需要用户参与

    需求获取:

    • 采访(传统方式)
    • 设定情景:给出用例图
    • 原型:获取不明确的用户需求
    • 会议
    • 观察(开发者以用户的身份)

    需求分析:

    1. 结构化分析模型
    2. 面向对象分析模型

    需求验证:通常以需求审查会议的形式进行。

    SRS通过需求验证后,就成为基线(Baseline)被冻结起来。实际的需求是迭代的,是随着开发的过程不断演变的。

    得到了基线后,开发过程中原需求进行了变更。这就是需求管理要解决的问题:

    • 需求跟踪
    • 需求变更控制:

    三、结构化分析方法SA(Structured Analysis)

    基本策略:自顶向下,逐步细化

    核心:数据字典

    围绕这个核心,有三种图:

    1. 数据流图(Data Flow Diagram, DFD)用于功能建模
    2. 实体-关系图(Entity-Relationship, E-R图)用于数据建模
    3. 状态转换图 (State Transition Diagram, STD)用于行为建模

    功能建模:

    数据流图:

    环境图,又称顶层(0层)数据流图:仅包括一个【数据处理过程】,目的是确定系统在其环境中的位置。

    数据建模:

    与面向对象(OO)不同的是,SA只封装数据,不包含对数据的操作。

    E-R图:

    其中,圆角矩形表示属性,矩形表示实体,菱形表示关系名。关系也可以有属性

    行为建模:

    一个状态图STD里,只能有一个初态,可以有0个或多个终态。

     

    将功能建模,数据建模和行为建模黏合在一起的:数据字典

    • 定义式
    • Warnier图

    定义式中的符号:

    加工规格说明:可以用文字, 数学公式,决策图,决策树等表示。说明每一个基本加工的规则。

    决策表:                           条件茬                                                                   条件项

                                             动作茬                                                                   动作项

    决策表可以合并(例如上表,2和4)。

    决策树:

    四、面向对象的分析方法OOA(Object-Oriented Analysis)

    面向对象分析的模型有三个:

    • 用例模型:用例图,是功能模型
    • 对象模型:类图,用类和对象表示的静态模型
    • 动态模型:状态图和交互图,表示的交互模型

    面向对象分析使用最广泛的是UML(Unified Modeling Language)统一建模语言。由事物,关系和图组成。

    普遍的做法是从建立用例模型开始:

    用例图:

    用例之间的关系有:泛化,包含,扩展。

    泛化:查找书籍是父用例,精确查找和模糊查找是子用例。

    包含:一个用例所执行的功能总是包括另一个用例的功能。箭头指向被包含的用例。

    扩展:一个用例的执行需要由其它基础用例的功能来扩展。箭头指向基础用例。

    其中,基础用例并不知道扩展用例的细节,仅为扩展用例提供扩展点。

    include和extend的区别:

    • 用例模型是从用户的角度描述对系统的需求。
    • 用例的主要内容是书写用例规格说明,而不是画图。

    对象模型:

    1. 划分主题:对于很小的系统,无需划分主题
    2. 确定类与对象:
      • 实体类:系统将跟踪的持久信息
      • 边界类:参与者与系统之间的交互
      • 控制类:负责用例的实现
    3. 确定关联
      • 关联的多重性:
      • 关联类:当关联较简单时,关联关系的语义用名字来概括。关联较复杂时,可以建立关联类,用虚线连接关联类。
      • 聚合:(特殊的关联),描述部分和整体的关系。用菱形表示,菱形在整体一边。
      • 泛化:泛化类和特化类的关系,用空心三角形表示,三角形在泛化类一边。(泛化关系没有多重性,而关联关系有多重性)
    4. 确定属性
    5. 确定服务

    类图示例:

    动态模型:

    交互图(包括顺序图,协作图):

    顺序图:

     

    协作图:

    顺序图的另一种表示形式。更适合涉及很多对象的情况。

     

    状态图:

     

  • 相关阅读:
    自定义 mapper
    solr 服务搭建
    jedis 连接redis
    jedis 整合 Spring
    Redis 安装
    HttpClient 工具类
    springMvc 中返回字符串 乱码解决
    linux常用命令解析
    压缩jar包
    控制反转
  • 原文地址:https://www.cnblogs.com/justKidrauhl/p/10099865.html
Copyright © 2011-2022 走看看