设想和目标

1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?

要解决的问题:目前外卖网站比较多,用户很难快速找到合适的外卖,我们集合各个网站的外卖信息,为用户提供便利。在M1阶段我们基本实现了餐站app的基本功能。在M2阶段我们主要是修复M1阶段的BUG,

完善、拓展软件功能、优化网络爬虫

2. 是否有充足的时间来做计划?

用于计划的时间还算比较充足。

3. 团队在计划阶段是如何解决同事们对于计划的不同意见的?

我们会用专门的时间开展组会,组会时全员到齐,大家各抒己见,经过讨论后得到一个大家都认可的计划。

对于用户量

用户量比较少,与我们事先设想的很不符。活跃用户基本都是我们的测试人员。

我们认为原因如下:我们本来打算做一个涵盖各大外卖网站的信息汇总以及区功分能的app,但是由于爬虫问题,导致我们只能成功获取了一个网站的信息,无法实现横向比较功能。

计划

1. 你原计划的工作是否最后都做完了? 如果有没做完的,为什么?

  没有都做完,我们计划爬取美团等网站的内容,但是由于他们的反爬虫机制,导致我们没能成功爬取信息。

2. 有没有发现你做了一些事后看来没必要或没多大价值的事?

  没有,我们做的事情不是为了查找、修复BUG就是为了实现新功能。就算有所失败也算是宝贵的经验。

3. 是否每一项任务都有清楚定义和衡量的交付件?

  不是每一项任务都有清楚地定义。比方说改进UI,这种任务依靠感觉以及一些网上的资料,但是网上的资料各种各样,我们没有类似的知识。

4. 是否项目的整个过程都按照计划进行,有什么风险是当时没有估计到的,为什么没有估计到?

  爬虫模块并没有按照计划进行。风险,应该就是爬虫没能成功实现导致我们的应用丧失了一个最主要的卖点:相同菜品不同餐站价格比较。

5. 在计划中有没有留下缓冲区,缓冲区有作用么?

  有留下缓冲区。缓冲区是一个余量。有时我们的工作不会像认为的那样顺利进行。缓冲区的存在让我们有了一道保险。

6. 将来的计划会做什么修改?(例如:缓冲区的定义,加班)

我们将来的计划将更加精准地考虑大家的能力区别,尽量平衡大家的工作时间。

我们学到了什么? 如果历史重来一遍我们会做什么改进?

  在爬虫问题中,我们深刻了解了对风险预计不足的结果。如果历史重来一遍,我们将考虑每个功能无法实现所带来的后果,即风险评估。

多考虑一些功能,根据风险评估以及预期效果来选择实现一些功能。同时在某些功能无法实现时也能够找到一些其他功能实现,使我们的应用能够保证竞争力。

资源

1. 我们有足够的资源来完成各项任务么?

  我们的资源比较充足。

2. 各项任务所需的时间和其他资源是如何估计的,精度如何?

  各项任务所需的时间都是根据M1的经验估计的,经历了M1阶段,大家对任务所需时间都有了一定了解,所需时间和估计的基本一致,相差一般在1个小时以内。

3. 测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度?

  我们使用了开源平台来进行app的兼容和运行测试,没有大问题,对于用户测试,我们团队内部和周边的朋友也投入了一些时间进行使用。

对于不需要编程的资源没有低估难度。

4. 你有没有感到你做的事情可以让别人来做(更有效率)?

基本而言是不会的,因为具体模块一般是分配给固定的同学。因此对于那些模块来讲,其他同学的熟悉程度比不上接受那些模块任务的同学。

 

设计/实现

1. 设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?

  由张明培育在项目开始阶段。是。

2. 设计工作有没有碰到模棱两可的情况,团队是如何解决的?

  没有。

3. 团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML,或者其他工具来帮助设计和实现?这些工具有效么?

我们用了单元测试功能。单元测试可以提升反馈速度,减少重复工作,提高开发效率,很有效。

4. 什么功能产生的Bug最多,为什么?在发布之后发现了什么重要的bug? 为什么我们在设计/开发的时候没有想到这些情况?

  下拉刷新功能导致的BUG最多。

  发布之后的BUG如下(在客户端测试中更详细):

BUG1:出现在主界面的下拉刷新控件。当下拉刷新时,会默认选定手指划过屏幕时经过的某一商品,但是并不会进入其详细页,即使切换筛选方式仍然会选定相应的商品栏,如下左图所示;有时会发生刷新之后在筛选条件和商品目录之间出现空白的意外情况,如下中图所示;严重时,甚至会导致应用崩溃,不响应。

BUG2:在“更改位置”的输入框中,如果输入不合理,如输入“博客”、“aaa”等,则会直接停止运行;如果输入地址非北京地区,如“四川”、“中国”等,则只会显示在北京地区的搜索甚至不显示搜索结果。

  产生BUG1的主要原因是我们没有考虑到下拉刷新功能会与其他功能产生冲突。

5. 代码复审(Code Review)是如何进行的,是否严格执行了代码规范?

  在开发过程的同时进行代码复审,如果有错误就及时修正错误;如果无法修正则返回上一版本。

  代码规范:在客户端软件内、客户端与服务端api之间、服务端代码中严格执行了代码规范。

 

测试/发布

1. 团队是否有一个测试计划?为什么没有?

有测试计划。

首先,在开发过程中,开发人员会对代码正确性及可行性进行测试。

在开发结束后,由专门的测试人员对软件的每个功能进行单元测试;对整个项目的每个环节进行性能测试;

2. 是否进行了正式的验收测试?

  进行了正式的验收测试。

3. 团队是否有测试工具来帮助测试?

  服务端接口测试脚本,客户端功能测试-手动测试/百度MTC,服务器性能测试-服务器自动测试工具。

4. 团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?

  用了百度MTC进行了客户端性能测试,服务器性能测试说明服务器可以承载我们的应用,爬虫性能测试则是单元测试,爬虫的效果基本准确。

5. 在发布的过程中发现了哪些意外问题?

  推广费用比较贵,经费有限,我们不能承担。

总结:

你觉得团队目前处于 萌芽/磨合/规范/创造 阶段的哪一个阶段?

  规范阶段。

你觉得团队在这个里程碑相比前一个里程碑有什么改进?

  互相之间的配合更默契,矛盾比之前少了很多。

团队讨论合照在下面

sixsix团队M2阶段Postmortem的更多相关文章

  1. “北航学堂”M2阶段postmortem

    “北航学堂”M2阶段postmortem 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 这个问题我们在M1阶段的时候就已经探讨的比较明确了,就是 ...

  2. sixsix团队“餐站”应用M2阶段发布报告

    一.新功能 客户端 搜索功能 我们在M2中实现了对地点的搜索菜品,可以直接在主页页面中的输入框输入用户喜欢的菜品,系统将返回与对应关键字所对应的选择,更加高效直观的满足客户的口味. 菜品图片加载 我们 ...

  3. 【个人阅读】M1/M2阶段总结

    1.以前博客的链接 http://www.cnblogs.com/zyctsl/p/4028006.html http://www.cnblogs.com/zyctsl/p/4094011.html ...

  4. 【个人阅读】软件工程M1/M2阶段总结

    这次作业是好久以前布置的,由于学期末课程设计任务比较重,我在完善M2阶段的代码的同时又忙于数据库的实现和编译器的实现,一度感觉忙得透不过气来....到这些都基本完成的时候,会看自己以前的阅读心得,觉得 ...

  5. M2阶段事后总结报告

    会议照片: 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 开发一个快捷方便的记事本App.从用户体验角度出发,在一般记事本App的基础上进行创新 ...

  6. M1/M2阶段总结

    之前提问的博客 问题解答 问题 1 关于代码复审,复审者是否应该参与编码?如果复审者也参与编码的话,那么难免任务量较多,但如果不参与编码的话,工作分配的似乎不太均衡. 我们的团队项目在M1和M2阶段没 ...

  7. 事后分析报告(M2阶段)

    我们的项目是自选项目,一款名为备忘录锁屏MemoryDebris的软件. 在第二轮的迭代中,由于各科的大作业都集中在这一段时间,所以这段时间各个组员间的负担都比较大,但是在大家共同努力,最终我们还是交 ...

  8. BugPhobia回顾篇章:团队Beta 阶段工作分析

    0x00:序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet yo ...

  9. 团队Beta阶段事后分析

    团队Beta阶段事后分析 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件要解决用户的休闲娱乐问题,为用户提供好玩的模拟经营类的游戏,游戏主题 ...

随机推荐

  1. Memcached、Redis、RabbitMQ

    目录 一.Memcached 二.Redis 三.RabbitMQ Memcached Memcache 是一个开源.高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中 ...

  2. Matplotlib:tick_params参数设置

    1.tick_params语法 参数:axis : {‘x’, ‘y’, ‘both’} Axis on which to operate; default is ‘both’.reset : boo ...

  3. January 04th, 2018 Week 01st Thursday

    Just do what works for you, because there will always be someone who think differently. 就做你自己所能做的,因为 ...

  4. mybatis使用<choose> <when>

    一.需求 后台使用orcale数据库,mybatis做持久层,前台搜索功能,根据类型搜索,但是数据库中没有类型字段, 所以需要在where条件语句中进行判断,当type == x1 时和type == ...

  5. Appium1.9.1 之 Desired Capabilities 释疑

    服务关键字 Desired Capabilities在启动session的时候是必须提供的. Desired Capabilities本质上是以key value字典的方式存放,客户端将这些键值对发给 ...

  6. css固定背景图位置 实现屏幕滚动时 显示背景图不同区域

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. Django 使用mysql 数据库流程

    创建一个mysql数据库 在settings中配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': ...

  8. SpringMVC+Spring+Mybatis框架集成

    一.基本概念 1.Spring      Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-O ...

  9. [ASP.NET]ScriptManager控件使用

    目录 概述 局部刷新 错误处理 类型系统扩展 注册定制脚本 注册 Web 服务 在客户端脚本中使用认证和个性化服务 ScriptManagerProxy 类 添加 ScriptManager 控件 客 ...

  10. Linux系统学习之网络管理

    网络接口配置 使用ifconfig检查和配置网卡 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ...