Judy Beta Postmortem
设想和目标
1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?
与Alpha阶段相同,我们的软件要解决的Julia程序的dubug功能。问题定义得比较清楚,具体分拆成断点,堆栈,步进等具体功能。我们的典型用户是Julia的开发者和VScode的使用者小芳,典型场景是小芳需要写一个基于julia的AI框架,但是她需要一个debugger进行断点调试。
2. 我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么?)
原计划的功能基本实现,其余未实现的功能由于文档支持和Julia本身支持问题无法实现。我们按照原计划的时间进行了打包和交付。由于没有发布,所以我们的用户数量暂时局限在团队内部。
3. 和上一个阶段相比,团队软件工程的质量提高了么? 在什么地方有提高,具体提高了多少,如何衡量的?
和上一个阶段相比,我们的代码管理更加优化,我们的前后端代码由原来的分开开发变成在同一个仓库中,每日后端实现功能后前端直接进行测试。并且我们在Beta阶段加强了code review和每日构建测试。我们衡量的方式是通过结对开发者的一方进行pull request,另一方merge之前进行code review。故我们衡量的方式是pr和merge的次数。
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
计划
1. 是否有充足的时间来做计划?
我们在Alpha阶段和Beta阶段的交替期间,有充足的时间(大约十几天)进行计划。我们同时在这段期间内对我们未来可以完成的功能进行了调研。
2. 团队在计划阶段是如何解决同事们对于计划的不同意见的?
开会并充分交换了各成员意见。
3. 你原计划的工作是否最后都做完了? 如果有没做完的,为什么?
我们真的确实有一部分计划没有完成,但并不是因为时间预算不充分,而是这部分从根本上很难实现。在前端方面,她们缺少必要的VScode插件文档进行对后端代码进行打包,导致我们退而求其次只能对前端代码进行打包;后端部分,由于Julia本身语法支持受限,我们很难通过元编程取得debug所需的部分信息。我们咨询了开发者,并详细浏览了文档和论坛,都没有找到办法。
4. 有没有发现你做了一些事后看来没必要或没多大价值的事?
有,我们本来打算通过修改ast树的方式来添加和删除块内断点,后来发现这样会带来删除时的麻烦,后来我们改成源码层级的添加和删除,虽然增加了一定时间开销(用户不可察觉),但是使实现更加简单了。
5. 是否每一项任务都有清楚定义和衡量的交付件?
每一项任务由具体的功能模块的测试样例定义(操作定义)。交付件为测试样例得以通过。
6. 是否项目的整个过程都按照计划进行,项目出了什么意外?有什么风险是当时没有估计到的,为什么没有估计到?
最大的意外其实出现在Alpha阶段,就是发现Julia的支持不足。Beta阶段的意外应该是在内部最终测试的时候会出现对某些用户可以正常安装而另外一些用户安装失败的情况。我们推测这个问题由Node.Js导致
7. 在计划中有没有留下缓冲区,缓冲区有作用么?
我们在计划中留有了缓冲区(详见Beta阶段总计划)。同时在Beta阶段的中间也留有了缓冲区进行代码重构。事实上正是由于缓冲区的时间,让我们得以在Beta阶段的中间重构代码并得以扩展功能。
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
在做一个world's first的项目之前,充分调研前人的工作,确定项目实施的可能性和多大程度上可能。并且需要根据人员的开发能力分配角色。
资源
1. 我们有足够的资源来完成各项任务么?
如果是指人员、时间和开发环境等资源,我们是有资源的。
如果是指文档、语言支持、技术支持等资源,我们非常缺乏这样的人才。正是由于对这些技术人才的缺乏,导致中间走了一些弯路,并且有些功能没有成功实现。
2. 各项任务所需的时间和其他资源是如何估计的,精度如何?
时间按照功能模块估计,比如估计多文件大概需要多长开发时间,多断点大概需要多长开发时间等等等。时间估计的基本准确,因为大概哪几天实现什么功能基本能按计划完成,即使是中间的突发状况也在缓冲区时间内得以解决。
3. 测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度?
测试的时间完全足够,因为前端人员在Alpha阶段已经完成了大部分的工作,所以在Beta阶段基本负责在后端实现了新功能以后前端负责每日构建和测试。
4. 你有没有感到你做的事情可以让别人来做(更有效率)?
当然。如果我们能有VScode的技术人员支持,我们的可能就可以实现完整打包。如果我们有Julia的开发人员,那我们也不需要自学Julia查文档去花费特别多时间。
变更管理
1. 每个相关的员工都及时知道了变更的消息?
是的,我们不仅通过SCRUM而且通过teams进行了交流讨论。
2. 我们采用了什么办法决定“推迟”和“必须实现”的功能?
根据预估的时间和难度,以及功能模块的重要程度。当我们在Beta阶段中间时,我们有很多backlog,比如多文件支持,块内多断点支持,比如堆栈查看支持。明显块内多断点更加重要,之后是多文件,堆栈查看甚至没有看到实现的希望,自然就决定了前两个。
3. 项目的出口条件(Exit Criteria – 什么叫“做好了”)有清晰的定义么?
在预先设定的所有测试样例上通过测试。
设计/实现
1. 设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?
Beta阶段开始,前后端商量决定。设计的时间合适,人不太合适。专业人员不足。
2. 设计工作有没有碰到模棱两可的情况,团队是如何解决的?
有,前端Protocol的设计。和后端块内多断点的设计,可以从ast层级插入断点和删除断点,但是需要复杂的搜索,容易造成潜在bug,也可以从源码层级进行插入和删除断点,优点是实现简单,缺点是性能不足。考虑时间和性能,最终选择了后一种方案。
3. 团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?
单元测试几乎没有,测试驱动的开发是真的。基本都是前端测试过程中遇到的问题,然后督促后端去解决和完善。这些工具其实有效。项目开始的UML和现在完全不同,当时以为实现块内多断点比较简单,后来才发现需要重构,添加消息队列等一系列要素,所以UML图变化很大。
4. 什么功能产生的Bug最多,为什么?在发布之后发现了什么重要的bug? 为什么我们在设计/开发的时候没有想到这些情况?
块内断点,因为涉及到断点位置的确定,断点的维护。后来的每一次功能扩展(多文件支持,多块内多断点支持),都对原有的实现方式造成了冲击,Alpha版本的遗留代码很容易造成遗留Bug,所以这个功能我们在回归测试的时候反反复复改了很多次。发布之后最大的bug就是发现在不同机器上安装的情况会有问题。比如在某些机器上安装后立即就可以使用,有些机器上安装以后无法运行。由于这个问题比较玄学,我们也没有想到会出现这样的情况(虽然我们仔细比较了机器运行环境和dependency)
5. 代码复审(Code Review)是如何进行的,是否严格执行了代码规范?
代码复审我们还是非常认真的进行了的。对于后端的结对编程来说,一位开发人员实现了某个功能,会向公共仓库的master分支提交pull request, 这个时候另一位开发者进行code review,并到对应分支上进行独立设计测试样例测试,code review出现问题会直接与开发者交流,测试出现问题不予merge。
测试/发布
1. 团队是否有一个测试计划?为什么没有
由于我们是测试驱动开发,所以有测试计划。
2. 是否进行了正式的验收测试?3. 团队是否有测试工具来帮助测试?
没有。
3. 团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?
软件效能是前端测试体验来决定的,实际上由于debugger的运行和相应速度快到分辨不出,所以并没有考虑效能测试和效能优化
5. 在发布的过程中发现了哪些意外问题?
前述。在某些机器上可能安装失败。打包只能打包前端代码。后端代码需要单独下载。我们提供了README帮助用户完成安装。
团队的角色,管理,合作
1. 团队的每个角色是如何确定的,是不是人尽其才?
基本人尽其才。前端的人做比较喜欢也比较熟悉的工作。后端开发对debugger的工作机制略微比较熟悉所以从事后端。
2. 团队成员之间有互相帮助么?
当然有。比如在前后端对接过程中zhiqi将master分支作为标准来简化前端测试。
3. 当出现项目管理、合作方面的问题时,团队成员如何解决问题?
开会。
团队贡献分
Name | Score |
Manli Shu | 21 |
Zhiqi Lin | 22 |
Yuechen Wang | 19 |
Yu Xing | 18 |
demo
总结
团队处于CMMI的第一个档次,因为团队磨合时间有限,而且也不是专业的团队,属于磨合期吧。在这个里程碑的改进之处在于加强了团队成员的内部交流,增加了效率。我觉得最需要改进的一个方面是我们团队缺乏PM,分工不太明确,导致出现了一些重复开发这样的情况。
我们小组做的最好的原则是 无论团队内外,面对面的交流始终是最有效的交流方式。在Beta阶段,我们团队共四人,采取两人一组的两组结对编程的方式。有时候在分工以后,如果遇到问题,我们仍然会进行面对面交流。和 保持简明 -- 尽可能简化及工作量的技艺 -- 极为重要。在项目中我们在实现块内多断点的时候遇到分歧,最后还是以更加简单的实现为原则。
合照
Judy Beta Postmortem的更多相关文章
- Judy Beta 阶段整体计划
Judy Beta 总体规划 经过Alpha阶段的人员变动,Judy组成员如下:Manli Shu, Yuechen Wang, Zhiqi Lin, Yu Xing. 前Alpha阶段PM离职. 人 ...
- UltraSoft - Beta - Postmortem事后分析
UltraSoft - Beta - PostMORTEM 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题和定义都在[软软软]功能规格说明书 ...
- [Beta] postmortem
设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决网站前端的数据处理以及获取问题,定义的很清楚,对于典型用户也比较清晰,因为主要只有一个用户,所以对于 ...
- Judy Beta 第八天
Progress 人员 今日进展 明日任务 前端 Manli Shu, Yuechen Wang 测试发现了比如嵌套块和多文件断点的bug 进行测试和回归测试 后端 Zhiqi Lin, Yu Xin ...
- Judy Beta 第二天
Intro 我们采取的code review方式是两人一组,每个人在自己的分支上完成工作后向master分支发起pull request,小组的另一人对pr进行review后merge进入原仓库.gi ...
- JuJu Beta Postmortem
JuJu demo demo 项目github地址 JuJu 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 完成基于Julia语言的NER mod ...
- 数据获取以及处理Beta版本展示
产品描述 这个产品的目的是为了学霸网站提供后台数据获取以及处理操作.在alpha阶段基本调通的基础至上,我们希望在bate版本中加入对于问答对的处理,图片的获取等功能. 预期目标 在alpha阶段,我 ...
- UltraSoft Scrum Meeting 博客汇总
一.Alpha阶段 UltraSoft - Alpha - Scrum Meeting 1 UltraSoft - Alpha - Scrum Meeting 2 UltraSoft - Alpha ...
- beta 阶段的 postmortem 报告
part一: 用户数:目前约30人 总结:与当初的预算差不多,首先1.第一次开发软件,经验效率不足,那是很正常的事情.2.用户数量少,因为宣传力度还是比较的少.应该加强软件的推广才行. part二: ...
随机推荐
- ImportFileHandler 附件上传
using System; using System.Collections.Generic; using System.Linq; using System.Web; using LitJson; ...
- BTrace:线上问题排查工具
BTrace简介 GitHub地址:BTrace 下载地址:v1.3.11.3 官方使用教程:Btrace使用教程 使用场景 BTrace 是一个事后工具,所谓事后工具就是在服务已经上线了,但是发现存 ...
- [译]RabbitMQ教程C#版 - 发布订阅
先决条件 本教程假定 RabbitMQ 已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难, ...
- Java — CommonUtil
一些Java的公用方法: 1:获取当前时间 2:判断当前时间是否在时间date2之前3:比较时间大小4:获取某个时间的前n个小时5:返回某个字符串时间的Calendar对象6:判断两个时间段是否有重叠 ...
- 13_文件系统访问列表_case语句及脚本选项
FACL:Filesystem Access Control List利用文件扩展保存额外的访问控制权限 setfacl: -m:设定 u:UID:perm g:GID:perm root@kali: ...
- webpack的css样式文件加载依赖
1.需要两个依赖包: npm i style-loader css-loader -D
- react-native webView android使用本地html问题
react-native WebView组件使用本地html时候,一般都是这样使用 var source = require('../html/my.html') : <WebView sour ...
- HDFS详解
HDFS详解大纲 Hadoop HDFS 分布式文件系统DFS简介 HDFS的系统组成介绍 HDFS的组成部分详解 副本存放策略及路由规则 命令行接口 Java接口 客户端与HDFS的数据流讲解 目标 ...
- 两两交换链表中的节点(java实现)
题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 ...
- ACM-ICPC2018南京赛区 Mediocre String Problem
Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以 ...