软件工程之需求分析
2015-10-03 17:31
309 查看
前言:
软件需求分析是软件生存期非常重要的一部分。它是介于软件计划和软件设计之间的桥梁。一方面,需求分析以系统规格说明和项目规划为分析活动的出发点,并从软件角度对它们进行检查与调整:另一方面,需求规格说明又是软件设计、编码、测试、乃至维护的重要基础。良好的分析有助于避免或尽量减少早期错误。从而提高软件生产率,降低软件的开发成本,改进软件的质量。需求分析的过程:
需求分析的过程包括以下四个部分,分别为问题定义、分析与综合、编写需求分析阶段文档、需求分析评审。下面分别从上述四部分进行阐述。
问题定义:即明确对目标系统的综合要求和需求应该达到什么样的标准。
分析与综合:则要求总信息流和信息结构出发,逐步细化软件功能,找出系统内部每个元素之间的联系,接口特征和设计上的约束条件。根据上述方法最终确定采用哪种需求分析方法。
编写需求分析阶段文档:此阶段需要编写四个文档,软件需求说明书、数据要求说明书、初步的用户手册、修改完善与确定软件开发实施计划。
需求分析评审:是要对需求阶段所做的工作进行评估。检测需求分析阶段所做的工作是否符合要求。
需求分析的指导性原则:
首先要在建立分析模块之前明确“问题是什么”,能够清楚地表达问题的信息域和功能域。然后还要能以层次化的方法对问题进行分解和不断细化。最后要能分析系统的逻辑视图和物理视图。常用的需求分析方法:
导图如下不同的需求分析方法适用于不同的类型。具体开发过程中采用什么样的需求分析方法还要灵活使用。下面以面向数据流的结构化分析方法(SA)为例,它适用于数据处理类型软件的需求分析。具体来说,结构化分析方法就是用抽象模型的概念,按照软件内部数据传递变换的关系,自行向下,逐层分解,直至找到满足功能要求的所有可实现软件的软件为止。
结构化分析方法常用的工具:
下面重点讲解数据流图,下图中是数据流图中图形元素所代表的含义。以及数据流与数据加工两者之间的关系。
分层数据流图的设计方法:
第一步,画出子系统的输入输出
把整个系统看成一个大的加工,然后根据数据实体从哪些外部实体接收数据流,以及系统发送哪些数据流到外部实体,就可以画出输入输出图。这张图称为顶层图第二步,画子系统的内部
把顶层图的加工分解成若干个加工,并用数据流将这些加工连接起来,使得顶层图的输入数据经过加工处理后,变成顶层图的输出数据流。这张图称为0层图。(从一个加工画出一张数据流图的过程就是对加工的分解。)第三步,画加工的内部
把每个加工看成一个小系统,把加工的输入输出数据流看成小系统的输入输出流。向0层图那样画出每个小系统的加工DFD图。第四步,画子自加工的分解图
对DFD图中的每个加工,重复第三步的分解过程。直到不可再分解。现在得到一套分层数据流图。第五步,对数据流图和加工编号
对于一个软件系统,其数据流图可能有许多曾,每一层又有许多张图。为了区分不同的加工和不同的DFD子图,应该对每张图进行编号,以便于管理。检查和修改数据流图的原则:
数据流图上所有图形符号只限于以上四种基本图形元素数据流图的主图必须包括上述四种基本元素,缺一不可
每个加工至少有一个输入数据流和一个输出数据流
在数据流图中,按层给加工框编号。编号表明该加工所处层次,以及上下层的亲子关系
对顶任何一个数据流子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致。
图上每个元素都必须有名字
数据流图中不可夹带控制流
初画时可以忽略琐碎的细节,以集中精力于主要数据流。
总结:
在很长的一段时间里大家一致认为需求分析是整个软件工程中最简单的一步。但是最近十年大家发现需求分析是整个软件工程中最关键的一个环节。假如在需求分析时,没有能够正确认识到顾客需求的话,那么最后的软件实际上不可能达到顾客的要求,或者在规定时间内不能按时完成项目。相关文章推荐
- POJ 2446 Chessboard(二分图匹配)
- Hive+mySql遇到的问题和解决办法
- backbone.js之Model篇 简单总结和深入(2)
- c++11 右值引用
- 144. Binary Tree Preorder Traversal (Tree, Stack)
- 安卓控件使用系列27:GridView网格控件的使用方法
- jquery 事件总结
- 1010. Radix (25)
- cmd介面,进adb命令提示符error
- Sublime Text 3中SublimeLinter的使用
- 思想&观点&人生
- java模拟生产者消费者
- 插入排序
- Linux Shell学习笔记4:使用Linux环境变量
- 插入排序
- 114. Flatten Binary Tree to Linked List (Stack, Tree; DFS)
- 【Python之旅】第五篇(三):Python Socket多线程并发
- [Cpp]去掉字符串空白2
- 网络方面的面试题
- 大端对齐和小段对齐