1.项目简介
在对工程实践项目进行建模分析前,我先简述一下我的工程实践项目:CTF(Capture The Flag)在线答题平台的搭建。
CTF起源于1996年DEFCON全球黑客大会,是Capture The Flag的简称。CTF的题型主要包括MISC、CRYPTO、PWN、REVERSE、WEB、APK、IoT等,该工程实践的目的是设计和实现CTF学习平台,搭建一个网络安全相关题目在线答题平台,用户可以在该平台获取题目的相关环境,并由提供的环境找寻到最终的正确的FLAG进行验证。
注:在CTF比赛中,题解被叫做WriteUp(WP)
2.用例建模
2.1项目用例与参与者分析
用例图主要回答了两个问题:1、是谁用软件。2、软件的功能。从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。
本项目有两种参与者(Actor):正常用户与管理员用户。
正常用户可以触发的用例如下所示:(注:->表示扩展用例,: 表示应包含用例)
- 注册系统
- 登陆系统->找回密码
- 答题:查看题目
- 收藏题目
- 上传(题目/题解)
- 点赞(题目/题解)
- 访问商城:查看个人积分 ->积分兑换商品
- 查看排行榜
- 个人中心:查看答题统计,查看收藏题目,查看收到的赞个数
- 评论
- 查看题解
管理员用户可以触发的用例如下所示:
- 题目管理:增加题目,删除题目,修改题目
- 审查题目和题解
- 题解管理:发布题解,删除题解
- 查看用户
- 删除评论
- 发布公告
- 上架商品
2.2完整用例图
3.业务领域建模
业务领域建模是开发团队用于获取业务领域知识的过程。因为软件工程师往往需要工作在不同的业务领域或者不同项目中,他们需要业务领域知识来开发软件系统。软件工程师往往来自不同的专业背景,这可能会影响他们对业务领域的认知。因此业务领域建模有助于开发团队获取业务领域知识形成统一的业务认知。
3.1业务领域建模的过程
• 第一步,收集应用业务领域的信息。聚焦在功能需求层面,也考虑其他类型的需求和资料;
• 第二步,头脑风暴。列出重要的应用业务领域概念,给出这些概念的属性,以及这些概念之间的关系;
• 第三步,给这些应用业务领域概念分类。分别列出哪些是类、哪些属性和属性值、以及列出类之间的继承关系、聚合关系和关联关系。
• 第四步,将结果用 UML 类图画出来。
3.2业务分析
本例中,有两种用户:普通用户和管理员,两者自用户类派生而来。()内表示该类包含的属性和方法。
-
-
- 用户类(用户ID,用户名称,密码)
- 普通用户(积分,获得题目,获得题解,评论,点赞,收藏题目,答题....)
- 管理员(增加题目,删除题目,修改题目,增加题解,删除题解,修改题解,获得用户信息,删除评论....)
-
本例中,还包含问题Question类,并由此衍生出相关的题目解答与评论
-
-
- 问题类(序号,内容,分值,点赞数目....)
- 题解(作者,点赞数目,所属问题,内容....)
- 评论(作者,内容,序号....)
-
在线答题平台增设了商城,用户可以通过积分兑换奖品。
-
-
- 商城类(商城名称,包含商品)
- 商品类(商品名称,图片,价格,余量)
-
3.3 UML图
我们将上述业务分析中的类通过UML图的方式进行表示,如下图所示:
4.数据模型
4.1物理数据模型
User表
列名 | 数据类型 | 数据长度 | 是否可能为NULL | 是否唯一 | 是否为主键 | 注释 |
User_ID | bigint | 16 | N | Y | Y | 用户注册ID |
User_Name | varchar | 16 | N | Y | N | 用户账号名称 |
Passwd | varchar | 20 | N | N | N | 登录密码 |
Forks | set | 1000 | Y | N | N | 收藏的题目 |
Answer_Question | set | 1000 | Y | N | N | 已解答题目 |
Score | bigint | 16 | N | N | N | 积分 |
Admin表
列名 | 数据类型 | 数据长度 | 是否可能为NULL | 是否唯一 | 是否为主键 | 注释 |
Admin_ID | bigint | 16 | N | Y | Y | 管理员ID |
Admin_Name | varchar | 16 | N | Y | N | 管理员账户名称 |
Passwd | varchar | 20 | N | N | N | 登陆密码 |
Daily_Record | varchar | 2000 | Y | N | N | 工作日志 |
Question表
列名 | 数据类型 | 数据长度 | 是否可能为NULL | 是否唯一 | 是否为主键 | 注释 |
Question_ID | bigint | 16 | N | Y | Y | 问题号码 |
Content | varchar | 1000 | N | Y | N | 问题内容 |
Author | varchar | 16 | N | N | N | 提供问题作者 |
Score | bigint | 16 | N | N | N | 答对问题积分 |
WP_List | set | 2000 | Y | N | N | 该问题的题解集合 |
Comment | text | 1000 | Y | N | N | 问题的评论集合 |
Like_Number | bigint | 16 | N | N | N | 问题的点赞数目 |
Type | varchar | 16 | N | N | N | 问题种类 |
Comment表
列名 | 数据类型 | 数据长度 | 是否可能为NULL | 是否唯一 | 是否为主键 | 注释 |
Comment_ID | bigint | 16 | N | Y | Y | 评论ID |
Question_ID | bigint | 16 | N | N | N | 该评论所归属的问题ID |
Author | varchar | 16 | N | N | N | 评论发表者 |
Content | text | 500 | N | N | N | 评论内容 |
WP表
列名 | 数据类型 | 数据长度 | 是否可能为NULL | 是否唯一 | 是否为主键 | 注释 |
WP_ID | bigint | 16 | N | Y | Y | 题解ID |
Question_ID | bigint | 16 | N | N | N | 题解所归属的问题ID |
Author | varchar | 16 | N | N | N | 题解发表者ID |
Content | text | 3000 | N | Y | N | 题解内容 |
Like_Number | bigint | 16 | N | N | N | 题解点赞数目 |
Store表
列名 | 数据类型 | 数据长度 | 是否可能为NULL | 是否唯一 | 是否为主键 | 注释 |
StoreName | varchar | 16 | N | Y | Y | 商城名称 |
Commodity | set | 5000 | N | N | N | 商品列表 |
Commodity表
列名 | 数据类型 | 数据长度 | 是否可能为NULL | 是否唯一 | 是否为主键 | 注释 |
Commodity_ID | bigint | 16 | N | Y | Y | 商品ID |
Commodity_Name | varchar | 16 | N | Y | N | 商品名称 |
Picture | varchar | 50 | N | Y | N | 商品的图片链接 |
Price | bigint | 16 | N | N | N | 兑换商品所需积分 |
Number | bigint | 16 | N | N | N | 商品余量 |
4.2概念数据模型
本文中概念数据模型使用E-R图进行表示,E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一种方式。用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”或圆角矩形表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。
E-R图表示的主要逻辑关系://因为所有逻辑全部列出太过复杂,故本例只列出主要脉络上的逻辑结构
- 普通用户可以进行答题
- 普通用户可以发表评论
- 普通用户可以发表题解
- 管理员可以对题目进行管理,增删改查
- 管理员可以删除不恰当评论
- 管理员可以管理题解,发布正确题解
- 用户可以使用积分去商城购买商品
E-R图如下图所示:
5.概念原型及工作流程
5.1概念原型
概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。
概念原型是一种虚拟的、理想化的软件产品形式。
概念原型=用例+数据模型
5.2概念原型工作流程
普通用户可以注册账号,注册成功后进行登录;用户可以查看题库的题目,根据兴趣选择某个题目进行答题,输入最终的结果查看正确与否。用户可以进一步的查看该题目的相关题解或者在题目下方评论区发表自己的意见。若用户有更好的题解,用户可以发布自己的题解。当然,若用户欣赏某个题目或者题解,可以进行收藏与点赞。用户回答对了题目可以获得题目对应的积分,用户可以去商城中利用积分兑换商品,用户可以查看自己的收藏列表,查看自己收藏的题目。用户还有自己的个人中心,其中可以查看答题记录,已答的题目数目,个人积分等,用户也可以上传题目,管理员审核通过后,便可以上线题目。另外本平台提供Rank榜单,根据答题数目与积分进行排序,用户可以查看排行榜。
管理员用户主要对一些东西进行审核,管理员可以进行题目的管理,进行增删改查,对题解进行管理,发布正确的题解;还可以审核评论区,删除不正当发言。管理员也可以发布公告,告知一些重要的事情。商品若有更新,管理员也可以对商城进行更新;管理员也可查看注册用户信息。
总结
之前项目的搭建都是搭建一个基础模型,勾画一个大体轮廓便开始动工,经常半途发现漏掉某种功能而返回去修改某些代码,造成很多不便。经过本节课后,学会了如何系统的进行项目的搭建,更加科学的对项目进行架构,消除了之前的种种弊端,总结为一句话便是:谋定而后动!