1. 功能规格说明书
请阅读书本中有关规格说明书的部分,并在PM组织团队的所有成员一起分析你们团队项目的典型用户和场景,并写一个团队博客发布你们团队项目的功能规格说明书。
模板问题:
- 功能规格说明书的目标是什么?具体来说,在本说明书中
- 需要说明哪些问题?
- 叙述和讨论的范畴是什么,界限在哪里?
- 功能规格说明书的用户和典型场景是什么?具体来说
- 该产品的用户是什么样的?
- 用户分为哪几类?
- 每一类用户
- 分别具备什么样的特征(注意是用户本身的特征)?例如年龄、性别、职业、目标或其他特征等
- 潜在总量(即确有需求使用本产品的用户总量,但请注意,潜在用户未必实际上使用本产品)分别有多少?占总潜在用户量的多大比例?
- 使用习惯是怎样的?例如会在什么时间,什么地点,什么样的方式,什么样的频率,使用哪些功能等
- 对产品的期望是怎样的?希望本产品可以帮助用户达到怎样的效果?
- 愿意为产品付出多少代价?例如是否愿意为一些功能付钱,可以接受以什么样的方式(买断、月付、年付、按量付等)付多少钱等
- 该产品的典型应用场景是什么?
- 应用场景分为哪几类?
- 每一类应用场景下
- 分别会包含哪一类或几类用户?
- 系统以什么样的方式为各类用户提供服务?
- 系统所提供的业务会让用户与用户之间产生什么样的关系?
- 可以给置身其中的各类用户带来什么样的好处?产生什么样的感受?
- 为了更加直观,在详细阐述应用场景细节的基础上,可以考虑用类似“讲故事”的方式进行应用场景的叙述
- 功能规格说明书用到了哪些术语,它们的定义是什么?定义的时候需要
- 说明术语的用词、别名、英文缩写等
- 尽可能用专业词汇,精确地描述术语的含义,以避免不必要的误解
- 对于在本计划书中进行了特殊定义,且与一般意义上的定义略有差别或讨论范畴不同的,需要进行特别说明,并高亮或加粗,以确保可见性
- 对于文字上较为类似、较容易“望文生义”或其他可能引起误解混淆的术语,需要结合其他类似术语,说明其区别
- 各种边界条件是什么,软件功能应该怎样随之变化?包括但不限于
- 用户数量的最大限制,如果超过最大限制则系统如何应对?
- 各类用户使用该产品的最大集中度限制,能承受什么样的业务高峰,如果超过则如何应对
- 相关业务输入输出内容的上限与下限,对于越界的情况应当如何进行响应
- 对于web页面来说,需要支持的浏览器类型及版本,对于不支持的浏览器该如何进行响应并进行必要的警示
- 其他需要在系统和业务层面上的边界条件或限制,并需要声明在触发的时候应当怎样进行响应。
- 系统的各种功能是什么?具体来说
- 能实现什么样的事情?对应上述的哪种应用场景?
- 对于其他功能或数据等,有什么显性或隐性的依赖关系?
- 可能存在什么样的问题或副作用?打算用什么样的方式去应对或者解决?
- 本项目在本学期课程中期望达成的的产品目标是什么样的?包括但不限于
- 产品应当可以实现哪些功能和效果?请精确详细地进行描述。
- 需要积累多少真实用户?注意请不要使用fake data。
- 需要达成日活跃用户多少的目标?日活跃用户数量通常统计平均每日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户)。
- 需要在系统内部积累多少数据资源?例如题目、做题记录、讨论数据等。
- 对于移动App,需要在哪些应用商店或平台上架,并达成下载量多少的目标?
- 对于需要发布的包应用(例如pip包、gem包、maven包),需要打包成到什么样的程度?是否在一些官方平台(例如Github、Python的Pypi、Ruby的RubyGem)上正式部署发布?并达成下载安装量多少的目标?
- 软件发布出去之后
- 有哪些数据可以进行收集?有哪些数据需要进行收集?
- 上述目标相关的数据分别代表了哪些现实意义?与之前定义的项目目标数据存在怎样的关系?如有必要可以使用数学公式进行准确定义。
- 为了支持上述的数据收集工作,需要做哪些准备工作?
以上模板仅供参考,请各组根据实际情况进行最为合适的规格描述。
要求功能规格说明书中至少有下列内容:
- 定义相关概念,如缩写、专有名词等
- 定义典型用户,以及用户所对应的应用场景,
- 定义典型应用场景,描述主流的用户/软件交互步骤
- 给出界面原型设计(建议使用原型设计工具)
- 系统功能描述及验收验证标准,明确哪些功能是在Alpha阶段完成,哪些在Beta阶段完成,并尽可能精准地描述完成的标准是什么
- 写出产品可能存在的问题和副作用,以及对此类问题或副作用打算如何应对或解决
示例:
2. 技术规格说明书
写一个你们项目的设计文档(技术规格说明书),并放入Git仓库的doc目录。设计文档应在实现阶段与代码实现同步更新,对于设计文档的修改应当通知到团队的每一位成员。
- 所选择的技术栈,包括但不限于
- 所选用的程序设计语言
- 基于上述语言,所选择的应用开发框架
- 为了支持上述程序设计语言的开发、测试与部署,所必须的运行环境
- 软件的总体架构,包括但不限于
- 包含的子系统
- 分别是什么?例如服务端、客户端、爬虫等
- 分别承担哪些功能任务?
- 之间的关系及工作模式是怎样的?请使用UML图进行表述
- 各个子系统内部
- 包含哪几个模块?
- 分别承担哪些功能任务?
- 之间的关系及工作模式是怎样的?请使用UML图进行表述
- 功能的详细设计(暂不做要求,请在实现阶段补充完善)
- 数据库和API接口设计(暂不做要求,请在实现阶段补充完善)
- 系统的开发目标,包括但不限于
- 需要完成哪些代码编写?
- 需要完成哪些单元测试?
- 需要完成哪些系统压力测试?具体压力指标是多少?
- 需要完成那些真实测试?具体测试细节是怎样的?
- 需要完成哪些系统文档的编写?需要详细到什么程度?
请在编写设计文档时考虑包括但不限于下列设计原则:
- 系统层面
- 运行环境
- 服务端运行环境,例如需要操作系统Ubuntu、ruby 2.5.2或更高版本、rails 6框架等
- (如果有的话)应用端运行环境,例如需要安卓10或更高版本、哪些系统组件、ROOT权限等
- 系统设计
- 代码设计
- 架构设计
- 界面和实现的分离
- 系统错误记录机制
- 应对需求变化的灵活性
- 系统性能
- 业务流程层面
- 程序对于相关输入数据有什么样的假设
- 对于不满足上述假设的情况,如何进行异常处理
示例:
以上例子仅供参考,各组请根据实际情况进行适合的技术规格描述,不要局限于上述结构。
3. Alpha阶段初始任务分配
根据功能规格说明书中明确要在Alpha阶段实现的功能,以及技术规格说明书中团队提出的软件架构设计,使用课程中所讲WBS方法等,将Alpha阶段目标分解成一系列子任务。在分解过程中,请大家注意下述要求:
- 使用各种估计方法([1],[2]),估计每个任务的预期完成时间。
- 单个子任务的粒度控制在预期完成时间不能超过8小时。
- 将所有子任务创建为Issue,并将第一批任务分配给个人,后续的任务也可以先进行预分配,并根据开发过程的实际情况来动态调整(PM负责协调)。
- 创建完所有任务之后,截屏、统计你们项目到底需要多少时间做完。
示例: