需求类型分类
上课也讲过了,对于需求类型,课件上分为如下几种:
- 功能需求
- 质量需求
- 设计约束
- 过程约束
但是在其他的软件工程著作中$^{[1]}$,我们可以有其他的划分,比如把设计约束和过程约束合并为约束,添加对外接口需求和数据需求等等。在这个例子中我决定把设计约束和过程约束合并起来,方便我们的分析。
功能需求(分为读者端和作者端)
作者端
- 作者可以编排图书的目录结构、章节内容,章节内容中包括图片、视频、文字、和集成第三方软件边学边练,能定义常见练习题比如问答题、选择题
- 作者编辑时可以预览读者端的效果,手机效果、Web和桌面软件效果,作者可以限制只在某一种或几种终端上使用。
- 作者可设定自己的图书章节的阅读顺序,有顺序解锁阅读,随意跳跃阅读,部分章节内部必须顺序阅读等几种不同的模式。
- 软件在打开时要有功能导航提示,带用户了解作者端的主要功能
- 作者编辑完书籍后可以将书籍上传到Master服务器的数据库中,供读者下载,上传失败时,作者端要给出用户提示,并且实现与Master服务器的断点传输
读者端
- 读者端可以通过手机、浏览器或桌面软件使用交互式多媒体图书,可以搜索图书,查看图书目录,根据作者设定可以顺序解锁阅读,或随意跳跃阅读,或部分章节内部必须顺序阅读
- 软件能集成或调用第三方软件,通过统一的插件模型调用,插件在master服务器上下载,第三方软件与图书之间的交互要自动完成,只给读者暴露简单的接口。(个人感觉作业需求中的例子不好,重新举一个,比如有一个插件开发者开发了翻译插件,发布到软件的读者端上,读者安装这个插件并且用鼠标选中相应文本后点击翻译按钮,该插件就可以自动作其他语言到汉语的翻译。如果例子不恰当还请老师/助教指正)
- 软件在打开时要有功能导航提示,带用户了解读者端的主要功能
- 读者可以访问图书商城,从Master服务器上下载新图书,下载失败时,读者端要给出用户提示,并且实现下载断点传输功能
- 读者可以访问插件商城,从Master服务器上下载插件,下载失败时,读者端要给出用户提示,并且实现下载断点传输功能
运营商端
- 能够对图书商城的上架书籍进行管理,提供下架功能
- 能够上架各种读者端使用的使用插件
服务器端
- 当下载或上传操作发生时,能够根据读者或作者提供的密钥来判断是否为合法用户
质量需求(个人补充一些)
- 插件的运行要在0.5秒之内返回给用户结果
- 易用性方面,界面设计要精简,让各类用户在试用一天后即能掌握该软件的核心功能(功能需求部分)
- 访问图书商城的时间不能超过5秒,如果超过五秒仍然访问失败,则在读者端给出提示
约束
- 读者端的手机App、Web或桌面软件使用统一的代码实现
- 对于读者端,前后端为js+nodejs+mongodb
- 作者端独立部署
- Master服务器的数据库采取mongodb
用例
作者端用例图
读者端用例图
运营商端用例图
Master服务器端用例图
数据模型
深入分析和设计
接下来就读者在书城浏览并且下载一本书这个用例进行详细分析
剧情描述
- 读者点击图书商城。
- 图书商城显示自己所用拥有的书籍。
- 读者选中某本书
- 服务器返回该书给读者。(接下来陷入阅读循环)
- 读者选中想阅读的章节/页数。(可选)
- 书籍返回对应的文本。(可选)
- 读者进行文本的阅读(可选)
- 期间读者可能点击翻页。(可选)
- 这时书籍应当实时返回相应数据。(可选)
- 读者拿到数据后阅读(可选)
- 读者返回书籍章节目录(可选)
- 书籍返回书的章节(可选)
- 在阅读过程中读者使用本地翻译插件进行个别单词的翻译。(可选)
- 翻译插件返回相应的结果。(可选)
- 读者决定缓存某本书到数据库。(可选)
- 读者点击退出阅读该书
- 服务器重新返回图书商城拥有的书籍给读者
剧情描述表
phase | subject | Action of Subject | Other Data/Object | Object Acted Upon |
---|---|---|---|---|
1 | 读者 | 进入图书商城 | Master服务器 | |
1.1 | Master服务器 | 返回现有书籍列表 | 书籍列表 | 读者 |
1.2 | 读者 | 选中某本书 | 书名 | Master服务器 |
1.2.1 | Master服务器 | 返回该书 | 书籍 | 读者 |
1.3 | while 读者不点击退出该书 | |||
1.3.2 | 读者 | 选择章节 | 章节名称 | 书籍 |
1.3.3 | 书籍 | 返回对应的文本 | 章节文本 | 读者 |
1.3.4.1 | if 读者点击了返回目录 | |||
1.3.4.1.2 | 读者 | 点击返回该书该书目录 | 书籍 | |
1.3.4.1.3 | 书籍 | 返回该书目录 | 书籍目录 | 读者 |
1.3.4.2 | if 读者点击了下一页 | |||
1.3.4.2.1 | 读者 | 点击下一页 | 页数 | 书籍 |
1.3.4.2.2 | 书籍 | 返回下一页书籍的内容 | 书籍文本 | 读者 |
1.3.4.3 | if 读者使用某些插件 | |||
1.3.4.3.1 | 读者 | 使用插件功能 | 待处理参数 | 插件 |
1.3.4.3.2 | 插件 | 计算结果 | 结果 | 插件 |
1.3.4.4 | if 读者缓存该书 | |||
1.3.4.4.1 | 读者 | 缓存该书 | 书籍 | 本地数据库 |
1.3.4.4.2 | 本地数据库 | 存储 | success/false | 读者 |
1.3.5 | 读者 | 退出阅读 | Master服务器 | |
1.3.6 | Master服务器 | 返回书籍列表 | 书籍列表 | 读者 |