• Beta Postmortem


    Beta - Postmortem

    NewTeam 2018/1/14

    设想和目标

    返回目录
    1. 软件要解决的问题

          我们要解决方便用户在手机上使用博客园班级博客的问题。用户能够登录,查看博客,查看班级作业和成员,添加成员、发布、提交作业,并且能够在日程提醒中看到自己未提交的作业,同时软件有一定的缓存功能。

    2. 是否达到目标

          完成了Beta阶段项目规划的功能,比较顺利的按照原计划的时间交付,达到了原计划的用户数量317人。

    3. 用户量, 用户对重要功能的接受程度

          用户量达到了预期,改变了推广和宣传的策略,直接向可能有使用需求学生进行推广。用户比较能够接受现有的功能并且表示愿意尝试下个版本带来的改进,并且反馈了一部分在测试阶段没有发现的bug。

    有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
    • 对与出现的bug应该用issue进行记录,并分配给相关人员。
    • 应该关注曾经出现过的bug,进行重点测试

    计划

    返回目录
    1. 是否有充足的时间来做计划?

          用了充足的时间对开发阶段做了计划,在Beta阶段开始前完成了Beta阶段项目规划,并给各个任务划分了优先级,并且在开发过程中根据实际的进展对开发计划进行了调整。

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

          确定计划的流程是由项目经理提出计划,团队成员一起讨论、修改和确认。成员的意见通常没有明显的冲突,对于不同意见,一般会根据进展状况、人员分工、时间要求等客观因素进行协调。

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

          完成了计划的功能,并且额外完成了@添加用户名的共鞥。部分功能在发布之后发现了一些问题,在持续接受反馈和进行修复。

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

          没有,所做的都是最基本的功能和最基本的工作。

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

          是。新的功能会由三个任务组成:API的测试、包装和界面的搭建、切换、数据的显示以及对功能的测试,由不同的成员完成,两个任务都完成后,可以实现功能,经过测试人员测试,认为功能比较完整。每个任务完成后能够看到一定的成果。在原先基础上完善的功能也会以这三方面作为衡量标准。没有页面的功能(缓存),需要通过在特定的场景下的测试。

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

          基本按照计划进行,但是在进行界面优化时,计划使用的组件库不能顺利使用。因为之前使用组件库一直非常顺利,没有遇到什么问题,所以没有预料到在这个环节上会耽搁时间。

          发布前,发现日程记录的显示不正常,每次显示的时间都不一样,测试不够充分,没有发现该问题。

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

          Beta阶段的计划中没有明确的缓冲区,每个任务段都留了一点时间来完成未完成的工作(如果有),如果没有,就继续向下进行。

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

          Beta阶段的时间安排非常宽松,因为大家都比较主动,所有没有强制性要求在每个时间点之前完成那些任务,因为大家都能够提前完成。但是仍然需要规定并且执行时间的限制,用行之有效的制度解决每个人之间相互依赖的关系。

    我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
    • 分工不够好,导致成员话费的时间不均与。

    资源

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

          有六个人,四个人负责开发,一个人负责测试,每个人都能配置好环境,且不需要后端的开发,人力资源相对比较充足。但是没有用来开发IOS的设备。

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

          以lAlpha阶段为标准估计了Beta阶段功能开发的时间,以学习新技术的标准估计缓存的开发时间,但是不够准确,任务实际花费的时间比估计时间少一些,所以利用这部分多出来的时间开发了新的功能。

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

          用于测试的时间和人员是足够的,后期有4四个人担当测试工作,使用网络平台进行兼容性测试,不需要额外的硬件,

          没有,项目经理可以担当除开发和测试以外所有的工作。

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

          各个成员担当着自己的责任,任务的分配相对来说比较均衡,项目经理在各种有必要掺和的地方都掺了一脚,通常都是出现bug、人力分配不足时会参与。

    有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
    • 低估了测试的工作量,应该及早开始测试,并且在稳定和发布阶段对人员的分配进行适当的调整,加大测试的力度,尽心更全面的测试。

    变更管理

    返回目录
    1. 每个相关的员工都及时知道了变更的消息?

          是的,人员变更在群里通知过,并且单独发了一片声明博客

    2. 我们采用了什么办法决定“推迟”和“必须实现”的功能?

          正式开发之前进行了问卷调查,实际的了解了班级博客中使用相对较多的功能,把这些功能作为必须实现的基本功能,其他进行改进的功能和不常用的功能作为可以推迟的功能。另外有些现阶段实现起来较为困难且可能影响整体进度的功能也被推迟,可能成为alpha阶段的bug。

    3. 项目的出口条件(Exit Criteria – 什么叫“做好了”)有清晰的定义么?

          能够在大多数手机上稳定运行,正常使用基本功能。

    4. 对于可能的变更是否能制定应急计划?

          在多个平台进行发布,包括一些审核条件较为宽松的平台,避免所有平台的审核都不通过。

          但是用户记录出现的问题始料未及,并且至今没能解决。

    5. 员工是否能够有效地处理意料之外的工作请求?

          Beta阶段的开发过程中基本没有较大的变更,快要发布的时候,了解到希望可以主动消息提醒的功能,但是由于时间紧张,技术不熟悉,最终没有完成这一功能。

    我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
    • 尽早考虑发布相关的事宜,事先了解不熟悉的流程。

     

    设计/实现

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

          设计工作在正式开发之前由项目经理完成,这段时间其他成员需要进行环境的配置和新技术的学习,由项目完成然后所有成员讨论、修改,是比较合适的时间和方案,但是可能不是合适的人。因为后面实际的开发过程中采用的并不是最初的架构,大家讨论之后觉得现有的架构更合适。

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

          在架构的设计方面有较多的不确定的地方,在后续的开发过程中采用了大家都认可、结构更清晰的方式。

    3. 团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?

          使用了Jest进行了单元测试,使用ProcessOn进行了Beta阶段的项目规划。能够较为清晰的呈现出项目的结构,在功能、架构上与最初的设想并不相同,在开发的过程中根据实际的进展和必要性进行了修改。

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

          涉及网络请求的功能。发布之后发现有时候班级无法加载日程提醒,并直接崩溃。由于单元测试分支覆盖不够全面,测试过程中没有发现类似的bug,但是经过对比,实际与Alpha阶段发现的bug是同一类型。

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

          提交文件时项目经理会大致了解修改的功能,被修改的文件。

          制定了代码规范,但是考虑到代码规范的条目过于繁琐,实际执行过程中可能占用不必要的时间,因此开发过程中仅严格执行了对可读性影响最大的命名和注释。

    我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
    • 设计过程中对模块的划分做的不够好,考虑不够全面。虽然也参考过成型的react native项目,但是基本都是用了其他一些框架,考虑了必要性和学习成本,并没有使用这些框架。应该征求大家的意见。

     

    测试/发布

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

          测试人员在正式的开发工作开始之前制定了测试计划

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

          是。进行了场景测试、集成测试、兼容性测试。

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

          使用腾讯的WeTest平台,对主流的50款手机进行了兼容性测试。使用Jest进行单元测试。

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

          采用appium+python脚本的策略进行自动化测试,主要测试软件的特定功能。

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

          原计划在360、腾讯和酷安网上进行发布,但是由于360和腾讯对此类app的开发者资质、版权有限制,没能通过审核。

          发布之前发现了一个数据显示不稳定的bug,临时进行了修复

    我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
    • 应该重视出现过的bug,避免其再次出现。
    • 没有事先做好数据处理与页面的分离,导致测试时还需要单独取出数据处理文件。

     

    团队的角色,管理,合作

    返回目录
    角色确定

          团队成员自己选择想要担当的角色,成员的选择倾向能够满足团队的角色需求。各成员能够发挥各自的长处:开发人员有较强的学习能力和编程能力,测试人员能够比较细致全面的对代码和产品进行测试,项目经理可以写文档,做计划,在成员之间进行沟通和协调。

    互相帮助

          一个功能通常会分解成2-3个任务分配给不同的成员,在完成任务的过程中遇到问题时通常会在Scrum Meeting结束后进行讨论,或当面检查代码中的问题。彻夜帮忙debug,配环境。

    我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
    • 应该充分考虑各位成员的意见,尽可能让各位成员做自己擅长的事情。项目经理应该了解开发人员和测试人员的进展,并及时调整开发计划。

    总结

    返回目录
    你觉得团队目前的状态属于 CMM/CMMI 中的哪个档次?

          第二级,一定程度上可重复类似项目的软件开发。有基本的项目管理方式,采取了一定的措施控制时间。

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

          磨合阶段。团队成员能够较好的进行合作,项目能够顺利推进,但是职责定义不够明确,基本按照功能进行划分,而且下阶段将不再需要对API进行测试和包装,成员的分工需要进行调整。

    对照敏捷开发的原则, 你觉得你们小组做得最好的是哪几个原则? 请列出具体的事例。 
    • 无论团队内外,面对面的交流始终是最有效的沟通方式:了解进度的方式是Scrum Meeting + 代码签入,在Scrum Meeting中进行交流,有协作的成员遇到问题会面对面交流,共同解决问题。
    • 可用的软件是衡量项目进展的主要指标:以完整的功能为单位进行任务的划分,每个阶段都完成新的功能,从第一阶段完成开始就是可用的软件。
    • 保持简明 - 尽可能简化工作量的技艺 - 极为重要:每个人基本不会同时面对多个任务,当前任务完成,当前功能实现后,才会安排新的任务。
    下一阶段改进
    • 阶段任务发生了变化,每个人担当的角色也应该发生相应的变化,分配任务要考虑个人情况合理分配。
    • 制定计划时应该使任务量有弹性,能够充分利用开发时间。
    • 应该多做一些风险管理,考虑所有环节可能出现的问题,准备备用方案,以避免影响进度或最终效果。
    博客要附上全组讨论的照片。
  • 相关阅读:
    2981 大整数加法
    1160 矩阵的最大值(指针专题)
    1159 最大的两个数(指针专题)
    1127 矩阵乘积
    1126 布尔矩阵的奇偶性
    1125 上三角矩阵的判断
    1124 两个有序数组合并
    1123 最佳校友
    1122 小明的调查作业
    1121 电梯
  • 原文地址:https://www.cnblogs.com/NewTeam/p/8283097.html
Copyright © 2020-2023  润新知