概要设计规约 - XLab-Tongji/KAOSer GitHub Wiki

概要设计规约


原型设计

登陆界面UI主要由左边的系统简要介绍以及右边的用户输入组成
登录UI原型如下图所示

LoginUI

文档管理界面主要由操作按钮、项目展示模块和文档展示模块组成
文档管理UI原型如下图所示

documentUI

画图界面UI主要由四个模块组成:

  • 上方的文件编辑和绘图操作菜单栏
  • 左侧的KAOS图形栏
  • 右侧的KAOS图形外观编辑栏
  • 中间的KAOS画板

画图UI原型如下图所示:

mockup


业务架构

系统业务主要可分为两大部分:

  • KAOS模型绘制

该部分主要负责图形性绘制相关功能。

(1)在用户层,用户可以通过系统实现KAOS图形的创建、删除、修改和拖动,同时能够连接不同的图形,并对图形文本内容进行修改。

(2)在控制层,实现了一个绘图控制器,其中包括KAOS语法检测算法。期望在用户连接图形时,能达到根据KAOS语法规则自动检测错误并发出警示的功能。

(3)在模型层,对不同类型的KAOS图形分别存储。

  • 文件管理

该部分主要负责模型文件和需求文档的管理。

(1)在用户层,用户可以通过系统实现创建、删除和重命名KAOS模型文件,同时用户可以导出选定的文件到本地,并且为现有的KAOS模型生成需求文档模型。

(2)在控制层,实现了一个文件资源管理器,以及需求模板生成算法。

(3)在模型层,存储了用户创建的文件及文档模板。

business architecture


技术架构

  • UI层

构建了一个Web端的应用,用户通过浏览器进入并使用系统。前端以Draw.io为基础进行改造。

  • 应用层

后端使用Spring Cloud框架和java语言,并使用spring-data-mongodb来实现对MongoDB数据库的访问。

  • 持久层

主要构建了自己的MongoDB数据库

technology architecture


部署结构

系统采用前后端分离的方式开发,前端基于drawio框架,后端使用springboot,均可通过docker部署到服务器上。数据库使用Mongodb来存储KAOS文件。

系统部署图如下所示:

deployment topology


数据建模

实体关系设计

根据KAOS方法的语法规则,建立不同的KAOS概念之间对应的实体关系图如下: ER diagram

数据库设计

下面列出KAOS基本图形实体的各个字段名称,类型及简要描述

Shapes

图形基类,包括所有KAOS图形共有的字段

Column Type Description
-id String 图形标号
-style String 图形样式
-parent String 当前图形父图形的id
-mxGeometry String 图形位置及大小

Goal

Column Type Description
-flag String 图形类型
-value String 目标名
-usecaseDiscription String 用例简要描述
-participant String 用例涉众
-preCondition String 用例前置条件
-aftCondition String 用例后置条件

Requirement

Column Type Description
-flag String 图形类型
-value String 需求名
-basicEventFlow String 用例基本事件流
-additionEventFlow String 用例附加事件流
-businessRule String 用例业务规则
-nonFunctionalRule String 用例非公能性需求
-refinesTo String 提炼的目标
-agents String 被实现的代理

Agent

Column Type Description
-flag String 图形类型
-value String 代理名
-agentType String 代理类型

Event

Column Type Description
-flag String 图形类型
-value String 事件名
-detail String 对该事件的描述

Operation

Column Type Description
-flag String 图形类型
-value String 操作名
-detail String 对该操作的描述

Domain Property

Column Type Description
-flag String 图形类型
-value String 名称
-description String 描述
-domainPropertyRef String 参考

Resource

Column Type Description
-flag String 图形类型
-value String 资源名
-reourceType String 资源类型
-Calls String 关联资源

其余图形暂时未进行修改设计


接口规约

/template

接口描述

在后端为当前KAOS模型生成需求文档模板

Request Method Post

参数

Data Located in Description Required Schema
usecaseName json 用例名 Yes String
usecaseDiscription json 用例描述 Yes String
participant json 用例涉众 Yes String
preCondition json 前置条件 Yes String
aftCondition json 后置条件 Yes String
basicEventFlow json 基本事件流 Yes String
addtionEventFlow json 附加事件流 Yes String
businessRule json 业务规则 Yes String
nonFunctionalRule json 非功能需求 Yes String

返回结果

Code Description Schema
200 Successful response document : string

示例请求

POST /template

{

​ "usecaseName":"登录", ​ "usecaseDiscription":"用户利用该用例登录系统,通过身份认证后获得相应的操作权限", ​ "participant": "用户", ​ "preCondition":"无", ​ "aftCondition":"如果登录成功,则显示相应的操作界面", ​ "basicEventFlow":"1. 用例起始于用户需要登录到该系统 2. 系统显示欢迎界面,并要求用户输入用户名和密码 3. 用户输入用户名和密码 4. 系统验证用户名和密码,允许用户登录系统(A-1)", ​ "addtionEventFlow":"A-1 用户名错误或者密码错误 (1) 系统提醒用户目前输入用户名或密码错误,并进入第(2)步 (2) 用户可以重新输入用户名和密码(B-1),或选择结束该用例", ​ "businessRule":"B-1 系统允许用户重复尝试三次登录操作,失败超过三次系统会自动结束,不允许用户重试", ​ "nonFunctionalRule":"安全性:密码应采用加密方式进行存储,具体加密算法待定", }

示例结果

Goal value: 登陆

usecaseDiscription: 用户利用该用例登录系统,通过身份认证后获得相应的操作权限

participant: 用户

preCondition: 无

aftCondition: 如果登录成功,则显示相应的操作界面

/ServletDownload

接口描述

从后端下载已经生成的当前模型的需求文档模板

Request Method Post

参数

返回结果

Code Description Schema
200 Successful response document : md

示例请求

POST /download

示例结果

将已经生成的markdown格式的需求规约文档保存到本地

/ServletDownloadJson

接口描述

从后端下载已经生成的当前模型的Json格式文档模板

Request Method Post

参数

返回结果

Code Description Schema
200 Successful response document : md

示例请求

POST /downloadJson

示例结果

将已经生成的json格式的需求规约文档保存到本地

/save

接口描述

将KAOS文件保存到mongodb数据库中

Request Method Post

参数

返回结果

Code Description Schema
200 Successful response file : xml

示例请求

POST /save

示例结果

     [ {
     ​     "-id": "2",
     ​     "-value": "创建图形",
     ​     "-style": "shape=requirement;strokeWidth=3;whiteSpace=wrap;html=1;right=0;top=0;bottom=0;fillColor=#F5F5F5;routingCenterX=-0.5;strokeColor=#000000",
     ​     "-vertex": "1",
     ​     "-parent": "1",
     ​     "-flag": "requirement",
     ​     "-basicEventFlow": "1. 用户点击图形 2. 用户拖动图形到画板 3. 用户松开鼠标",
     ​     "-addtionEventFlow": "暂无",
     ​     "-businessRule": "暂无",
     ​     "-nonFunctionalRule": "暂无",
     ​     "mxGeometry": {
     ​       "-x": "150",
     ​       "-y": "500",
     ​       "-width": "120",
     ​       "-height": "40",
     ​       "-as": "geometry"
     ​     }
        }  ]