需求分析的任务是借助于当前系统的物理模型(待开发系统的系统元素)导出目标系统的逻辑模型(只描述系统要完成的功能和要处理的数据),解决目标系统“做什么”的问题,所要做的工作是深入描述软件的功能和性能,确定软件设计的限制和软件同其他系统元素的接口细节,定义软件的其他有效性需求,通过逐步细化对软件的要求描述软件要处理的数据,并给软件开发提供一种可以转化为数据设计、结构设计和过程设计的数据与功能表示。必须全面理解用户的各项要求,但不能全盘接受,只能接受合理的要求;对其中模糊的要求要进一步澄清,然后决定是否采纳;对于无法实现的要求要向用户作充分的解释。最后将软件的需求准确地表达出来,形成软件需求说明书SRS。其实现步骤如下(如图 2.1):
图 2.1需求分析流程图
获得当前系统的物理模型:首先分析、理解当前系统是如何运行的,了解当前系统的组织机构、输入输出、资源利用情况和日常数据处理过程,并用一个具体的模型来反映自己对当前系统的理解。此步骤也可以称为“业务建模”,建立一个业务USECASE模型和业务对象模型。
2.1.3需求分析的要求
必须能够表达和理解问题的数据域和功能域:系统的目的都是为了解决数据处理问题,就是将一种形式的数据转换(输入、处理、输出)为另一种形式的数据。数据域应包括数据流、数据内容和数据结构。数据流式数据通过系统时的变化方式。对数据进行转换就是程序的功能或子功能,两个转换之间的数据传递确定了功能间的接口。数据内容就是数据项,如人的数据项包括姓名、性别、出生日期等等。数据结构即各种数据项的逻辑组织,如是表格结构还是树形结构、数据项间的相互关系。必须按自顶向下、逐层分解的方式对问题进行分解和不断细化:软件的功能域和信息与都能做进一步的分解,可以是同一层次上的横向分解,也可以是多层次上的纵向分解。给出系统的逻辑模型和物理模型:逻辑模型给出软件要达到的功能和要处理的数据之间的关系;物理模型给出处理功能和数据结构的实际表示形式。
抽象出当前系统的逻辑模型,即在理解当前系统“怎样做”的基础上,取出非本质因素,抽取出“做什么”的本质。
建立目标系统的逻辑模型:明确目标系统要“做什么”。
对逻辑模型的补充,如用户界面、启动和结束、出错处理、系统输入输出、系统性能、其他限制等等。
在需求分析过程中,应从数据流和数据结构出发,逐步细化所有的软件功能,找出各元素之间的联系、接口特性和设计上的限制,分析它们是否满足功能要求并剔除不合理部分,综合成系统解决方案,给出目标系统的详细逻辑模型。常用的分析方法有面向数据流的结构化分析方法SA(数据流图DFD、数据词典DD、加工逻辑说明)、描绘系统数据关系的实体关系图ERD、面向数据结构的Jackson方法JSD、面向对象分析方法OOA(主要用UML)、对于有动态时序问题的软件可以用形式化技术,包括有穷状态机FSM的状态迁移(转换)图STD、时序图、Petri网或Z。1.尽量减少数据的冗余性和重复。
合理的数据库表的设计应该是在满足需求的前提下,使数据的重复量小,应尽量按照关系数据库系统理论方法设计一个数据库,减少数据的冗余。
2.数据结构具有相对的稳定性。
数据结构的相对稳定性,可以作为新,旧信息系统转换的依据。
根据系统功能设计的要求及功能模块的划分,对于系统信息数据库,可列出以下数据项和数据结构:
3.结构设计与操作设计相结合。
在设计数据库时,有时为了编程实现的简洁和思路的清晰,往往故意增加一些数据的冗余。这虽然有悖于传统的关系数据库理论,但是考虑到查询与统计的方便,对编程的实现有很大的好处,往往采用这种方法。