任务7. 1 网上书店项目的需求分析

任务7. 1 网上书店项目的需求分析

【任务描述】

需求分析的任务就是确定软件系统必须完成哪些工作,即是对目标系统提出完整、准确、清晰、具体的要求。需求分析是软件工程的一个关键阶段。在此过程中,开发方必须同顾客(委托方)进行充分、细致的沟通和交流,以便能够完全了解顾客对软件系统的各种需要。

需求分析是软件开发的起点,只有在明确顾客需要后,才能够有的放矢的对需求进行分析、寻求解决方案,并最终实现软件系统。在需求不明确的情况下盲目进入后继的开发会造成大量资源的浪费,甚至可能导致软件系统由于完全不能用而只能重新开发。

需求分析阶段的前期是计划阶段,此时应对软件系统开发的费用、技术等各方面的可行性进行评估,然后定义软件系统的边界,确定软件的开发目标。由于本书的案例“网上书店”是一个模拟项目,所实现的功能比较基础,没有像真实的商用软件系统那样在细节上做到面面俱到,并在不断地扩展新功能。因此,在进行需求分析时,本任务将直接给出需求。下面,首先了解一些软件开发的基本知识和工具。

【知识准备】

(1)软件开发过程简介

软件开发过程是一个包括需求捕捉、分析、设计、实现和测试等环节的系统性过程。下面对软件开发过程中的一些关键阶段进行描述。

1)需求分析

需求分析是对开发什么样的软件的一个系统的分析与设想,是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用需求规格说明书表达出来的过程。本阶段的基本任务是和用户一起确定要解决的问题,建立软件的外部功能模型,编写需求规格说明书文档并最终得到用户的认可。

需求分析可以采用结构化分析方法(数据流程图和数据字典)、面向对象分析方法(Use Case)或将两者结合的分析方法。

2)系统设计

系统设计可分为概要设计和详细设计两个子阶段,概要设计的主要任务就是按自顶向下和面向对象的设计方法将软件分解成模块,然后进行模块设计。详细设计的首要任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库。

①概要设计

概要设计就是结构设计,其主要任务就是给出软件的模块结构,包括系统的基本处理流程、系统的组织结构、功能分配、模块划分、数据库设计、接口设计、出错处理设计等,以为软件的详细设计提供基础。

②详细设计

详细设计的主要任务就是设计模块的程序流程、算法和数据结构,应当保证软件的需求完全分配给整个软件。详细设计应当足够详细,能够根据详细设计报告进行编码。

3)软件编码

编码就是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的源程序清单。其主要任务是根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。

编码时值得注意的是:好的设计能使编码效率极大提高;程序员的分工协作和相互沟通十分重要;充分了解开发语言、开发工具的特性和编程风格,有助于提高软件的编码质量。

4)软件测试

软件测试的目标是以较小的代价发现尽可能多的错误。软件错误发现越早则修正的成本越低。软件测试按测试阶段可以分为单元测试、组装测试、系统测试;按测试方法可以分为白盒测试和黑盒测试。测试的关键在于设计一套好的测试用例,对于不同的测试阶段和测试方法,测试用例的设计方法也需要有所不同。

5)软件维护

软件维护指在完成对软件的研发(分析、设计、编码和测试)工作并交付使用以后,根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误,直到最后编写软件问题报告、软件修改报告。开发者一般容易忽视软件维护工作,实际上,与软件研发相比,软件维护的工作量和成本往往更高。

说明:实际的软件开发并不一定会按以上的顺序进行,在软件开发过程中通常会存在对前面阶段的回溯。例如,在测试过程中的问题可能导致修改设计,随着对软件的逐渐了解,用户可能会提出一些局部的新需求。在这种情况下,“原型法”被提出并得到广泛应用。“原型法”指在获取一组基本的用户需求定义后,快速实现一个目标系统的初期版本(原型),并交付给用户进行试用,然后在原型的基础上进行补充和修改,开发新的版本,这个过程会反复进行直到得出用户满意的系统为止。“原型法”特别适合能使用工具快速开发的,且业务逻辑经常发生变化的软件系统,例如信息管理系统。

(2)用例图简介(Use Case Diagram)

1)基本概念

用例图是用于描述系统功能的静态视图,它从系统外部看待系统功能,并不描述系统内部对功能的具体实现。用例图由参与者(Actor)、用例(Use Case)以及它们之间的关系构成,展示了用例之间以及同用例参与者之间的相互联系。用例图还能为系统中的用户划分其工作状态和工作内容,防止功能的重复建模。

2)用例图构成

用例图由参与者(Actor)、用例(Use Case)、子系统以及关系构成。

①参与者

参与者指系统以外的使用系统或与系统交互的角色。例如,同一个人既可以作为管理员与图书馆管理系统进行交互,也可以作为一般的借书用户与图书馆管理系统进行交互。在这里,同一个人扮演了两个不同的参与者角色。参与者除了可以是人,也可以是事物和其他系统。参与者用一个人形图案来表示,人形图案下面的文字指定参与者的角色名称,如图7.1所示。

图7.1