hylerrix / university

:mortar_board: my university code & article collection: create & share, thought & works
Creative Commons Attribution Share Alike 4.0 International
45 stars 10 forks source link

[B07]小全栈任务“番茄post”【1】拆分里程碑 #39

Open hylerrix opened 7 years ago

hylerrix commented 7 years ago

据说全栈路线图是这样的,详细地连 DevOps 都不得不被掩盖住一截。

[github@bmorelli25/Become-A-Full-Stack-Web-Developer](https://github.com/kamranahmedse/developer-roadmap)

全栈工程师,Full Stack Developer,常是一个较为敏感的话题,一如深度还是广度好,一如精读还是粗读好一样。你可以说,接下来步入的整个项目是一个实为 Node.JS 的伪全栈项目,但作为有志青年来讲,“全栈”足以时刻提醒自己是面向软件工程专业和互联网行业学习,找的是不去惯性局限自己视野的一股劲。毕竟:

「任何一个 Facebook 的问题,都不是别人的问题」

这次,利用 ThoughtWorks 校企实验室的团队项目机会,带来一个 React.js + Node.js 技术栈的全栈实战项目:基于番茄工作法的番茄时钟:“番茄post”。该项目将作为自己和团队的练手项目,并及时更新进度。同时,这一路走下去,也将是一场软件工程的项目实战,对理解软件开发流程模型很有帮助。

暂时以这个为 logo,找点感觉

有了小产品理想,画大饼很简单,但要能够搭建一个足以依靠敏捷开发稳步推进的软件开发流程,以大学生的能力还不足以直接上手。这次,多亏了 ThoughtWorks IT 咨询师,同任我们实验室老师的 @TW李鹏 老师对功能分析的指导,让我们理解了项目前期对功能分析和设立多个目标里程碑的重要性并能予落实。引用老师的话来说,拆分项目里程碑,有如下优缺点。

这样带来的好处是:
* 我们每个里程碑所需要考虑的问题变小,易于分析、思考和掌控
* 每个里程碑要学习的东西比较集中,不会迷失
* 每个里程碑结束,有一个完整可用的产品,能够产生价值,也能够给自己带来成就感
* 如果在假期中时间或者精力不够了,可以放弃后面的里程碑,至少可以做出功能较少但是可用的东西出来,而不是一个很大但是没法使用的半成品
带来的问题是:
* 为了保证每个里程碑功能的完整,有时候需要在过程中添加一些额外的功能,而这些功能在最后可能会被丢弃,有额外的工作量
* 新的里程碑的功能可能会在之前的功能上修改,如何保证之前的功能不被破坏,需要一定的技巧

随着我们接下来对“番茄post”全栈项目的推进和文章总结,这将是一场程序员的技术战,也将是一场工程师的身心战,智慧与勇毅将带来最终的成果。

程序功能分析

“番茄post” 基于番茄工作法,旨在向用户提供个性化、社区化的时间管理环境,提高工作效率,改善生活品质,经过功能拆解历程,它的前期版本将具有以下功能:

  1. 发布番茄:每发布一个番茄,记录刚刚发布的一个番茄工作内容。
  2. 展示番茄:将发布的所有番茄内容能够展示出来。
  3. 登录/注册:可以向多个用户提供服务。
  4. 关注他人:增加用户多维链接,促进双向激励。
  5. 评论番茄:促进用户交流、鼓励。
  6. 番茄排行:展示热门番茄,让用户有所榜样。

功能拆解历程

根据“有社区的番茄工作法软件”为目标同时列出的有添加番茄、暂停番茄等与前端视觉效果有关的功能并以为然作为重点,经过老师带领我们对产品需求进行的细细挖掘下发现,“番茄post”需要解决的核心需求点在于:

以上大部分强调的是,“番茄post”更偏向社交化时间管理,前期应削弱对番茄的前端功能效果实现而重在搭建能够发布番茄、社交激励的社区平台。


以下里程碑结合功能复杂度和技术难点进行前期划分。


第一个里程碑:搭架子


平台开发环境第一性,提前了解将要使用的技术将决定架子的内在。考虑到平台多样性和团队精力的有限性,以下列出的开发环境将作为第一版出现。

最终,只需要能够运行出一个简单的 Hello World 页面即可。

验收条件

  1. 其他人可以方便的获取你的代码(Github)。
  2. 其他人可以通过你的说明文件,在本地将服务器快速的运行起来,看到页面(README.md)。
  3. 通过简单的页面可以证明你使用的技术栈和主要的库等已经配置正确;
  4. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述;
  5. 若干篇博客用来记录你的学习收获和疑问。

第二个里程碑:数据库搭建和番茄的发布及其页面


最基本的功能是对番茄的“增删改查”,在这个里程碑中,我们先实现对番茄的发布,即增加到数据库中。制作番茄发布页面。

验收条件

  1. 任何人可以在账号密码正确的情况下访问数据库;
  2. 数据库中的相关番茄表单结构确立并能够看到;
  3. 任何人都可以看到番茄发布页面里有一个输入框和发布番茄按钮;
  4. 任何人都可以通过输入框填补番茄内容并点击发布按钮发布一个番茄;
  5. 点击发布番茄按钮后的相关错误提示信息能够得到展示;
  6. 发布番茄后,数据库里要能够看到该番茄及其内容和发布时间;
  7. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述;
  8. 若干篇博客用来记录你的学习收获和疑问。

第三个里程碑:番茄的展示与删除及其页面


这一步,在我们将番茄及其相关信息更新到数据库后,要能够将数据读取出来并在前台展示,提供删除按钮并能删除成功。番茄的展示与删除的页面和番茄发布页面同为一个页面之下,名为用户个人主页页面。

验收条件

  1. 任何人都可以看到所有已经发布了的番茄;
  2. 任何人都可以删除所有已经发布了的番茄;
  3. 删除番茄后,该番茄将从数据库中删除并不会再展示到前台;
  4. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述;
  5. 若干篇博客用来记录你的学习收获和疑问。

第四个里程碑:登录/注册功能及相关页面


之前的里程碑都在于搭建针对单独用户的核心功能,这一步来搭建用户平台。

验收条件

  1. 任何人都可以访问登录、注册页面;
  2. 任何人都可以注册一个没有被注册的账号;
  3. 任何人在某账号和密码匹配的情况下都可以登录该账号;
  4. 登录、注册过程中的相关错误信息能够得到展示;
  5. 登录成功后,可以访问自己的番茄发布与展示页面;
  6. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述;
  7. 若干篇博客用来记录你的学习收获和疑问。

第五个里程碑:番茄首页


这时,每一位用户都有自己的个人主页页面并能通过发布、删除番茄来更新自己的时间管理记录。番茄首页将着手打造番茄社交环境,用来展示所有已注册过的用户,提供社交链接。

验收条件

  1. 任何人都可以访问番茄主页;
  2. 任何人都能看到番茄主页下展示的所有已注册过番茄平台的用户;
  3. 任何人都能看到番茄主页下提示的登录、注册按钮并可以点击;
  4. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述;
  5. 若干篇博客用来记录你的学习收获和疑问。

第六个里程碑:关注他人与被他人关注


这一步:关注他人。

验收条件

  1. 任何人都可以访问某位用户的个人主页;
  2. 任何人都可以看到某位用户的个人主页的他关注的人和关注他的人;
  3. 任何人都可以看到某位用户的个人主页下有关注该用户按钮;
  4. 任何人在点击关注该用户按钮后判断是否登录;
  5. 任何人在关注、登录过程中的相关错误信息能够得以展示;
  6. 任何人在成功关注某位用户后可以在该用户个人主页的关注他的人下看到自己;
  7. 任何人在成功关注某位用户后可以在自己的个人主页的我关注的人下看到该用户;
  8. 任何人在成功关注某位用户后再次访问该用户主页时,关注按钮变成已经关注的提示。
  9. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述;
  10. 若干篇博客用来记录你的学习收获和疑问。

第七个里程碑:番茄评论


验收条件

  1. 任何人可以看到每个已经发布的番茄旁有评论框和评论按钮;
  2. 任何人在没有登录情况下可以看到评论框和按钮无法编辑和点击并有登录提示;
  3. 任何人在登录的情况下可以评论某个番茄;
  4. 评论成功后能看到该番茄下的最新评论;
  5. 每个番茄下的评论按最新时间由上到下排列;
  6. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述;
  7. 若干篇博客用来记录你的学习收获和疑问。

第八个里程碑:番茄网站上线


正式上线至某 IP 地址或某域名下。

验收条件

  1. 将数据库部署至线上;
  2. 番茄平台所有功能在线上调试成功;
  3. 任何人能够通过互联网访问番茄首页并进行深入操作;
  4. 代码以“小步”方式提交到github上,并且每个commit都有清楚的描述;
  5. 若干篇博客用来记录你的学习收获和疑问。

更多内容,尽请期待

“番茄post”的里程碑写到这里,可以看到,还有很多细节没有深入讨论。在敏捷的软件开发流程下,鉴于我们开发者也一直在梳理需求且需求会随时回炉重塑,先开发出一个可用可见的真实产品出来再看进一步发展。

软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架,其中就包括增量模型这一软件开发模型,很符合这一次任务的开发流程,图例如下。

更多内容,持续更新中~。