• 软件工程与计算总结(六)需求分析方法


    本贴介绍需求分析方法,涉及到诸多实践性的东西,掌握各种图表的绘制是重中之重~ 

    一.需求分析基础

    1.原因

    需求获取中得到的信息仅仅解释了用户对软件系统的理解与期待,使用的是实际业务的表达方式,还不是开发者能够立即加以实现的解决方案~

    需求分析的任务:

    • 建立分析模型,达成开发者和用户对需求信息的共同理解~
    • 依据共同的理解,发挥创造性,创建软件系统解决方案

    2.模型

    (1)定义

    模型是对事物的抽象,帮助人们在创建一个事物之前有更好的理解~

    (2)建模

    建立系统的一个表示,这个表示以精确统一的方式描述系统,使得系统的使用更加容易~

    • 抽象:一方面要求人们只关注重要的信息,忽略次要的内容;另一方面要求认知保留在适当的层次,屏蔽更深层次的细节~
    • 分解:将单个复杂和难以理解的问题分解为多个相对容易得子问题
    (3)特点及其常见需求分析模型

    需求分析模型是专门用来描述软件解决方案的模型技术。

    定位:

    常见模型:

    二.结构化分析

    1.方法

    把现实世界描绘为数据在信息系统中的流动,以及在数据流动过程中数据向信息的转化。他帮助开发人员定义系统需要做什么(处理需求),系统需要存储和使用哪些数据需求(数据需求),需要什么样的输入和输出,以及如何把这些功能结合在一起来完成任务。

    (常见模型:数据流图、实体关系图、状态转移图、数据字典等)

    2.数据流图(DFD图)

    将系统看为过程的集合,过程的执行就是对数据的处理,接受数据输入,并进行数据转换,输出数据结果;执行过程中可能涉及到人机交互等外界输入的数值~

    (1)基本元素

    • 外部实体:处于待构建软件系统之外的人、组织、设备或者其他软件系统
    • 过程:施加于数据的动作或者行为
    • 数据流:数据的运动(动态)
    • 数据存储:软件内部手机的数据集合(静态)

    如下是一个DFD图的样例:

    (2)语法规则
    • 过程是对数据的处理,必须有输入,也必须有输出,而且输入数据集和输出数据集应该存在差异
    • 数据流是必须和过程产生关联的,他要么是过程的数据输入,要么是过程的数据输出
    • 所有对象都应该有一个可以唯一标识自己的名称,过程使用动词,外部实体、数据流和数据存储使用名词

    (3)分层结构

    对于复杂的系统,解决的方式是分而治之:即利用过程具有不同抽象层次表达能力的特点,依据过程的功能分解结构,建立层次式的DFD描述:

    • 上下文图:最高层次的图,是系统功能的最高抽象,将整个系统看做一个过程,这个过程是实现系统的所有功能,所以上下文图中仅存在一个过程,表示整个系统

    • 0层图:上下文图的下面一层,被认为是上下文图中单一过程的细节描述,是对单一过程的第一次分解
    • N层图:0层图中的每一个过程都可以进行分解,以展示更多的细节~被分解的过程成为父过程,分解后产生的揭示更多细节的图成为子图(可以持续分解到无法再分解

    (分解过程中要保证平衡性,即不会出现需求偏差的方法,要求DFD子图的输入流、输出流必须和父过程的输入流、输出流保持一致

    3.实体关系图(E-R图)

    能够弥补过程建模在数据说明方面的缺陷,描述数据的定义、结构和关系等特性的技术~

    3个基本元素:实体、属性、关系

    • 实体:需要在系统中收集和存储的显示世界的类别描述
    • 关系:实体之间并不是孤立存在的,他们之间相互交互、相互影响
    • 属性:可对实体进行描述的特征

    标识符/键:可以唯一确定一个实例的一个或者多个属性~

    三.面向对象分析

    1.方法

    认为系统是对象的集合,对象之间相互协作,共同完成系统的任务。(与结构化完全不同,面向对象以对象为基础,而结构化分析以功能和数据为基础)

    主要优点:

    • 自然性:对人类而言更加自然和直观
    • 可复用性

    UML(统一建模语言):多种技术的综合体,并非单一的技术——用例图、类图等

    2.用例

    需求获取和组织的主要手段~

    定义:在系统和外部对象的交互中所执行的行为序列的描述——换句话说,用例是对相关场景的集合

    一种理解:关于x+y=z的程序,x=1 y=2 z=3即为一个用例 

    3.用例图

    (1)基本元素

    • 用例:最重要的元素(椭圆)
    • 参与者:发起或者参与一个用例的外部用户及其他软件系统等角色
    • 关系
    • 系统边界:一个系统所包含的系统成分与系统外界事物的分界线

    (2)建立

    步骤大致如下:

    • 进行目标分析与确定解决方向:进行目标的分析,确定项目的目标,定义高层次解决方案的系统特性。
    • 寻找参与者:根据上一步确定的目标系统与系统特性,发现系统功能相关的参与者
    • 寻找用例:根据参与者寻找用例
    • 细化用例:将用例的粒度调整为更加适宜的存在

    用例粒度的判断标准——对应一个业务事件,由一个用户发起,并在一个连续时间段内完成,可以增加业务价值的任务~

     

    4.用例描述

    5.概念类图(领域模型)

    (1)基本元素
    • 对象:分析方法的基础,包含标识符、状态、行为3个方面的内容 
    • 类:对象分类思想的结果,是共享共同属性的对象的集合
    • 链接:对象之间的相互协作的关系
    • 关联:类之间的关系

    (部分与整体之间的关系被称为聚合,如果整体还拥有对整体的管理职责,则这种聚合称为组合

    • 继承:某类拥有另一类的全部属性和服务~子类也可以认为是父类的特化
    (2)建立概念类图

    步骤如下:

    • 对每个用例文本描述,建立局部概念类图
    • 将所有用例产生的局部概念类图进行合并,建立软件系统的整体概念类图
    • 识别关联
    • 识别重要属性

     

    6.交互图(顺序图)

    描述对象协作的技术,描述特定上下文环境中一组对象的交互行为

    (1)顺序图

    (2)系统顺序图——常用于系统分析阶段

    7.状态图

    系统总是存在于一定状态之中,有限状态机理论是状态图的基础~

    四.使用需求分析方法细化和明确需求 

    1.细化和明确需求内容

    需要强调的是需求分析模型不是简单机械的对已有内容进行转述,而是要细化和明确具体的需求内容~

    2.建立系统级需求

    基于最后建立的需求分析模型,还可以顺利的将用户需求转换为系统级需求~

    tips:理论部分非常枯燥乏味,重点在于掌握图表的绘制,敬请期待专题~

  • 相关阅读:
    人人都会Kubernetes(一):告别手写K8s yaml,运维效率提升500%
    ATF启动(三):BL2
    SpringBoot整合shiro-spring-boot-starterqi
    CTO强烈禁止使用Calendar,那用啥?
    c++ 获取当前时间(精确至秒、毫秒和微妙)
    MyCat2之MOD_HASH算法
    ARM GNU汇编代码分析
    正则表达式基本概念及常用匹配模式代码
    Ai绘画行业又叒翻天了!Stable Diffusion 3.0开源!多图实测附安装包!
    金和OA C6任意文件读取漏洞 复现[附POC]
  • 原文地址:https://blog.csdn.net/jsl123x/article/details/133658686