0. 前言
本文主要基于高软课程中的《从需求分析到软件设计》课件[1],结合学院安排的工程实践项目,体会如何在项目中进行需求分析,在头脑风暴中提取有用信息(如需求分析、用例建模、业务类图等),从而为最终的软件设计打下基础。
本项目为学生选课管理系统[2],可以为不同用户提供不同的功能,如学生用户的选课、退课、查看成绩等服务,教师用户查看课表、添加成绩等服务,管理员可以总体的管理课程、成绩,统筹维护系统。
1. 需求分析
1.1 需求分析概述
需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程[3]。下面我们将就本项目提取需求,分析该选课系统应该具备的功能。
1.2 学生用户功能需求
学生用户可以输入学号、密码登录系统,查看选课信息,并在相应的选课时间段进行课程选择。对于已经选上的课程,可以进行课表查看和退课。学生的个人信息可以在信息中心进行修改。教师将课程成绩发布后,学生可以在系统上查看成绩。
1.3 教师用户功能需求
教师用户可以输入账号、密码登录系统,查看自己的课程安排。教师能够登录成绩。
1.4 管理员用户功能需求
管理员用户可以输入账号、密码登录系统。管理员可以对选课系统的使用用户进行管理(添加、删除、更改权限),也可以对当前的课程、成绩进行管理。
2. 项目用例建模
2.1 用例建模简介
用例的核心概念中首先它是一个业务过程,经过逻辑整理抽象出来的一个业务过程,这是用例的实质。在待开发软件所处的业务领域内完成特定业务任务的一系列活动就是业务过程。
在需求中提取一个用例的通用方法如下:
①从需求表述中找出用例。
②描述用例的开始和结束的状态。
③对用例按照子系统或者不同方面进行分类。
④进一步逐一分析用例和参与者的交互过程。
用例的准确提取是至关重要的,业务任务的动名词短语往往可以非常精简的指明一个用例。判断一个动名词和动名词短语是不是用例的标准是需要满足以下四个必要条件:
必要条件1:它是不是一个业务过程?
必要条件2:它是不是由某个参与者触发开始?
必要条件3:它是不是显式或者隐式地终止于某个参与者?
必要条件4:它是不是为某个参与者完成了有用的业务工作?
下面我们以本管理系统中的部分学生需求提取用例:学生用户可以登录系统,查看选课信息,并在相应的选课时间段选择课程。在这里我们可以看到,这段话中我们可以提取出三个动名词短语:
登录系统、查看选课信息、选择课程
这三个动名词短语都是系统的业务过程,均由学生这个参与者触发,并且显式地终止于学生这个参与者。登录系统,查看选课信息,选择课程,这些都为参与者提供了信息和服务,完成了有用的业务工作,所以他们都是用例。
2.2 项目中的用例建模
根据上述分析,我们不难得到如下用例建模:
(1)学生用例图
(2)教师用例图
(3)管理员用例图
3. 项目业务类图
3.1 业务领域建模简介与方法
业务建模是以软件模型方式描述企业管理和业务所涉及的对象和要素、以及它们的属性、行为和彼此关系,业务建模强调以体系的方式来理解、设计和构架企业信息系统[3]。业务领域建模是开发团队用于获取业务领域知识的过程。
业务领域建模的基本步骤如下:
①收集业务领域的信息。
②头脑风暴。列出业务领域概念、属性、关系。
③将这些业务领域概念分类为类、属性和关系。
④用UML图绘制上属关系。
3.2 项目中的业务建模
根据我们在需求分析和用例分析中得到的结果,我们不难可以提出下面五个类:学生、教师、管理员和课程。列出他们的属性如下:
类名 |
属性 |
学生 |
学号,密码,姓名,学院,专业等 |
教师 |
账号,密码,姓名,学院,任课课程等 |
管理员 |
账号,密码,姓名,权限,课程管理、用户管理、成绩管理等 |
课程 |
课程ID,课程名,任课教师,学分等 |
成绩 |
课程ID,学生名单,成绩名单等 |
3.3 UML图实现业务类图
根据上述分析,我们可以绘制出如下五个类的业务类图。
4. 项目数据模型
4.1 数据模型简介
数据模型是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。数据模型所描述的内容有三部分,分别是数据结构、数据操作和数据约束[5]。
4.2 教学管理系统中的数据模型
根据上述对于用例图、业务类图的分析,我们不难可以提取出各个类中的数据模型,具体如下所示:
(1) 学生表
数据名 |
数据类型 |
数据长度 |
能否NULL |
是否为主键 |
备注 |
student_id |
bigint |
16 |
N |
Y |
学生id |
account |
varchar |
20 |
N |
N |
账号 |
password |
varchar |
20 |
N |
N |
密码 |
name |
varchar |
20 |
N |
N |
姓名 |
college |
varchar |
20 |
N |
N |
所属学院 |
major |
varchar |
20 |
N |
N |
专业 |
phonenumber |
bigint |
16 |
Y |
N |
电话 |
|
varchar |
20 |
Y |
N |
邮箱地址 |
lesson |
set |
1000 |
Y |
N |
所选课程 |
(2) 教师表
数据名 |
数据类型 |
数据长度 |
能否NULL |
是否为主键 |
备注 |
Teacher_id |
bigint |
16 |
N |
Y |
教师id |
account |
varchar |
20 |
N |
N |
账号 |
password |
varchar |
20 |
N |
N |
密码 |
name |
varchar |
20 |
N |
N |
姓名 |
phonenumber |
bigint |
16 |
Y |
N |
电话 |
|
varchar |
20 |
Y |
N |
邮箱地址 |
college |
varchar |
20 |
Y |
N |
所属学院 |
lesson |
set |
1000 |
Y |
N |
教学课程 |
(3) 管理员表
数据名 |
数据类型 |
数据长度 |
能否为NULL |
是否为主键 |
备注 |
account_id |
bigint |
16 |
N |
Y |
管理员id |
account |
varchar |
20 |
N |
N |
账号 |
password |
varchar |
20 |
N |
N |
密码 |
name |
varchar |
20 |
N |
N |
姓名 |
jurisdiction |
int |
16 |
N |
N |
权限等级 |
phonenumber |
bigint |
16 |
Y |
N |
电话 |
|
varchar |
20 |
Y |
N |
邮箱地址 |
(4) 课程表
数据名 |
数据类型 |
数据长度 |
能否为NULL |
是否为主键 |
备注 |
lesson_id |
bigint |
16 |
N |
Y |
课程id |
lesson_time |
varchar |
20 |
N |
N |
课程时间 |
lesson_name |
varchar |
20 |
N |
N |
课程名 |
teacher_id |
bigint |
16 |
N |
N |
教师id |
credit |
bigint |
16 |
N |
N |
学分 |
(5) 成绩表
数据名 |
数据类型 |
数据长度 |
能否为NULL |
是否为主键 |
备注 |
lesson_id |
bigint |
16 |
N |
Y |
课程id |
student_set |
set |
1000 |
N |
N |
学生列表 |
grade_set |
set |
1000 |
N |
N |
成绩列表 |
5. 概念原型
5.1 概念原型简介
概念是人对能代表某种事物或者发展过程的特点及其意义所形成的思维结论,而概念原型是一种虚拟化的、理想化的软件产品形式。我们可以得到这样的公式:概念原型=用例+数据模型。
5.2 项目中的概念原型
概念原型需要结合具体的用例与数据模型去分析,就好像程序是由算法和数据结构两部分组成的。
本项目中运用到了学生用例、教师用例和管理员用例。涉及的数据模型为学生、教师、管理员、课程和成绩表。
学生用户输入学号和密码,登录系统,可以点击个人中心修改个人信息(登录密码、邮箱、出生年月、联系方式等);在选课允许的时间内,选择和退选课程,查看课表和成绩,这些都是业务操作的结果。在教师用例下,教师用户登录后,可以查看自己的课程安排,在期末的时候也能对学生的课程进行成绩评定。而对于管理员用例来说,具有最高的权限,统筹课程、用户和成绩的管理,对于这些信息进行全局的维护与增删改查,完成相关业务工作后,管理员即可退出系统。
6. 总结
本文结合了课堂上的高软课程和工程实践项目,具体的分析了基于学生选课系统,如何从需求分析,到最后实现了一个软件系统的工作过程。由于项目还在初级阶段,本人理解也不是很到位,难免存在纰漏,若是能抛砖引玉就不甚荣幸。
7. 参考文献
[1] https://gitee.com/mengning997/se/tree/master/ppt,从需求分析到软件设计
[2] https://github.com/fuzui/StudentInfo,基于SSM的学生信息管理系统
[3]https://baike.baidu.com/item/%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/2012709?fr=aladdin,需求分析
[4]https://baike.baidu.com/item/%E4%B8%9A%E5%8A%A1%E5%BB%BA%E6%A8%A1/6812236?fr=aladdin,业务建模
[5]https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B/1305623?fr=aladdin,数据模型