项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2023北航软件工程 |
这个作业的要求在哪里 | 团队项目-Alpha阶段事后分析 |
我在这个课程的目标是 | 学习软件工程技术,完成团队开发流程 |
这个作业在哪个具体方面帮助我实现目标 | Alpha阶段复盘总结 |
设想和目标
-
我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?
我们的软件目标是实现一个智能化、定制化的英语学习软件,为用户提供多层面定制化的英语学习内容,多维度可维护的共享数据仓库,并通过引入ChatGPT,给用户带来多模态沉浸式的人机交互体验。
在我们的功能规格说明书中,描绘了六个典型用户以及对应的典型应用场景。这些应用场景主要突出了当前现有的英语学习软件所缺失或难以满足用户需要的地方。 -
我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么?)
我们的Alpha阶段基本达到了我们原计划的目标。在原计划中,我们要实现用户登录注册、基本的背单词功能、对词单的自定义创建和管理、三大特色复习模式(故事模式、写作模式、刷题模式)、可对话的英语学习小助手、数据统计。Alpha阶段截止时,以上功能均实现并交付。原计划达到的用户数量在alpha期间达到1/5,beta期间还有较大的宣发空间。alpha期间用户数量较小的原因可能包含:-
宣传范围比较小,具有使用需求的受众占比小,用户使用量不大
-
宣传活动主要在五一假期中进行,用户们外出游玩,学习时间少,对软件需求小
-
软件还待完善,需要更趣味性的功能来吸引更多的用户
-
-
和上一个阶段相比,团队软件工程的质量提高了么? 在什么地方有提高,具体提高了多少,如何衡量的?
- 由于不存在上一个开发阶段,在代码质量上难以比较。
- 在团队合作上,我们的效率和之前相比有所提高。经过前一段时间的磨合,我们对coding的使用更加熟悉,能熟练的借助coding和群聊对任务进行分配,和前期的调研阶段相比,大大减少了彼此间的冲突与重复工作。
- 我们还制定了一系列的规范来减少甚至避免发生冲突或出现异常情况时所需额外耗费的时间损失。和上个阶段学习团队git提交时处理冲突消耗的时间相比,我们在本阶段因为这类问题导致的时间消耗大幅减少,可以很快完成处理。我们的规范包括:
- 代码格式与项目结构规范。
- git操作规范。
- 前后端接口编写规范。
-
用户量, 用户对重要功能的接受程度和我们事先的预想一致么? 我们离目标更近了么?
用户量上,软件共50+人参与体验,背单词功能共计90+人次、复习单词功能共计120+人次、智能对话功能共计360+人次,略低于我们的预想。用户对重要功能的使用次数上,可以看到单词复习和对话的使用次数较多,比较符合我们对功能重要性的预期,用户对重要功能的接受程度与我们预想的一致。 -
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
- 在刚开始设想的时候有一些功能没有深入考虑,比如数据统计功能,没有明确用什么样的展示方式展现给用户。因此在计划和实现阶段又经过了多次讨论。如果重来一遍,应该在设想时更加明确功能设计。
- 部分功能在开发时发现有各种情况没有在设计时被考虑到,最后实际实现和初期设想略有不同。如果重来一遍,应该从多个角度,比如开发角度、正常使用角度、异常使用角度,对功能进行更细致的考虑。
- 尽管已经做了一些规范,还是有部分地方因为没有规范或规范存在疏漏,导致花费额外时间去统一。如果重来一遍,会在项目初期加强这些规范的约束。
计划
- 是否有充足的时间来做计划?
我们在本阶段有充足的时间做计划。在项目初期,我们通过调研对软件的功能做了整体规划。在实现的各个阶段中,坚持通过Scrum Meeting对后两日的任务进行较为详细的计划分工。 - 团队在计划阶段是如何解决同事们对于计划的不同意见的?
开发过程的计划阶段通常是在Scrum Meeting中进行的,因此当出现不同意见时,会由提出意见者在会议中直接阐述自己的想法,包括实现的难易度、对软件的质量影响等。然后组内对不同看法进行讨论,对每个看法进行评判,找到共识度较高的想法,然后逐步讨论解决方案,平衡并解决每个人的问题。 - 你原计划的工作是否最后都做完了? 如果有没做完的,为什么?
- lzh:运维工作做完了,部署好生产开发环境的CICD。没有完成每日打卡的API,因为更适合并入到beta阶段数据分析统计一起做。
- zl:基本上做完了,但是对话功能只是实现了没有历史记录的简单对话,因为优化部分适合放到beta阶段。
- zya:基本上完成了,因为前端将复习模块的历史纪录放到Beta阶段进行,因此对应的记录保存与提取也放到Beta阶段实现了。
- ljh:负责模块中的功能基本都做完了,数据统计因为和其他多个功能相关,只简单设计了UI,功能打算放到beta阶段进行。
- xzh:负责的模块功能基本完成,由于缺乏音频来源,单词读音部分放在beta阶段完成。
- lyq:负责模块所有功能基本完成,前端可以有更好的UI设计,优化放在beta阶段进行。
- wyy:负责模块所有功能基本完成,但尚未完成查看复习记录的功能,放在beta阶段完成。
- 有没有发现你做了一些事后看来没必要或没多大价值的事?
- lzh:开发初期没必要后端先来设计数据模型和API,可能不适合前端页面开发的逻辑。后期大量修改数据模型时容易migration文件冲突
- zl:爬单词数据库时候为了扩充数据库多爬了很多单词,但是质量不高(缺少各种信息),实际上只需要少部分的高质量数据即可。
- zya:数据模型设计时只是根据功能设计而没有跟前端充分沟通,导致部分数据存储与前端不匹配,后期api设计时反复修改数据模型。
- ljh:一开始花费了很多时间调整自己页面的布局样式,但后来发现前端彼此间的样式都不统一,最后统一修改。
- xzh:在初期工作时api接口并没有约定好,前后端不匹配,在重新设计功能并约束数据库后项目推进速度明显加快。
- lyq:UI布局应该在最后统一调整,因为很容易产生冲突,最后调整最佳。
- wyy:按常见软件的思路设计了一些功能,但这些功能可能在我们的项目中暂时没有非常大的作用,比如头像等。
- 是否每一项任务都有清楚定义和衡量的交付件?
我们的大部分任务都是按照软件的功能模块进行细分的,因此可以根据在交付时某一模块中的页面以及各种功能是否实现来衡量这些任务是否完成。还有少数几个任务是用于方便团队内部开发与部署的。这一部分无法通过交付件的形式衡量。 - 是否项目的整个过程都按照计划进行,项目出了什么意外?有什么风险是当时没有估计到的,为什么没有估计到?
- lzh:服务器部署基本按计划进行,出现的意外是发布前几天才意识到前端服务不应该采用
npm run serve
运行而应该打包成静态资源文件。没有预估到的风险包括API未鉴权,响应时间长的API未加锁导致出现恶意频繁请求。没有估计到的原因是项目开发初期,没有明确课设项目和真实项目之间的区别,对于生产环境及项目安全性意识都比较薄弱。 - zl:后端开发基本按计划进行,意外是chatgpt产生的输出有小概率会不符合给定格式,导致解析错误。
- zya:后端开发基本按计划进行,意外是与前端api沟通不充分导致测试时重新对接。
- ljh:开发过程按照计划正常进行。在开发完发布前发现一开始设计API规范和登录注册时忽略了鉴权和用户私密信息保护,项目存在安全性漏洞,导致最后几天临时赶工修改。
- xzh:开发过程按照计划正常进行,由于屏幕比例和大家不同,在前端样式上需要重新调整。
- lyq:开发过程按照计划正常进行。
- wyy:开发基本按计划正常进行。意外:复习模式功能设计时,对某些细节定义不够清晰,比如故事模式中“今日学习单词”的定义,导致开发完成后需要进行适当调整。
- lzh:服务器部署基本按计划进行,出现的意外是发布前几天才意识到前端服务不应该采用
- 在计划中有没有留下缓冲区,缓冲区有作用么?
我们留下了一定的缓冲区。实践表明,我们在缓冲区中对初始设计时的不足进行了改进,如解决了UI样式设计未统一等问题。同时,由于是第一次在服务器上正式的部署,期间遇到的各种问题也都在缓冲区中解决。 - 将来的计划会做什么修改?(例如:缓冲区的定义,加班)
我们会保持在本阶段中对缓冲区的定义与使用。另外,在如果发现某个方案在讨论时有较多不确定因素,也要做好缓冲准备,可以多准备一份方案以防万一。 - 我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
我们学到了在会议讨论中定期对任务进行分工和规划。如果重来一遍,我们会在制定计划前增加一些调研,比如计划完成某个功能所需用到的各项技术与可能出现的问题,以此来更精准的评估一项任务的复杂程度,进行更加合理的分工。
资源
-
我们有足够的资源来完成各项任务么?
我们使用了腾讯云的美国硅谷服务器来实现调用OpenAI的chatgpt服务,确保完成了项目的核心功能设计。感谢@JackyZhuo 提供的Plus账号 :) -
各项任务所需的时间和其他资源是如何估计的,精度如何?
我们在alpha阶段设计时对整体任务的人员分配与时间分配进行了预估,具体开发时我们每两天召开一次例会,在例会上总结这两天的开发进度并动态调整任务分配,决定后两天的具体开发任务。实践时按两天的粒度分配与调整任务较为精准,大部分情况都能按时甚至提前完成例会上安排的任务。 -
测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度?
我们前后花费了4天的时间进行测试,采用前端同学进行场景测试与兼容性测试,后端同学进行单元测试和压力测试的形式进行测试,测试较为充分,人力和软件/硬件资源足够。
美工设计和宣发工作由@吕元秋 完成,为我们的项目在美工方面行了风格统一,吸引了大量用户并建立测试群,总的来说较为顺利,没有低估难度。 -
有什么经验教训? 如果历史重来一遍, 我们会做什么改进?
alpha阶段设计时初步设计的任务分配与实际开发还是有一定的差别,有些部分设计的不够具体,会导致任务分配预估不准、不够均匀等情况。如果再来一遍我们会进行更充分的任务分配设计,减少例会上重新分配任务的情况。
变更管理
-
每个相关的员工都及时知道了变更的消息?
是的,我们采用coding文档、微信群通知与例会讨论的形式通知变更的消息,根据变更的涉及范围和具体情况选用不同的通知方式,能够使每个相关的员工及时收到变更的消息。 -
我们采用了什么办法决定“推迟”和“必须实现”的功能?
我们会根据alpha阶段的功能设计、功能的重要性与其他功能的关联性、具体实现的技术难度来决定“推迟”和“必须实现”的功能。如果这个功能实现较为复杂,但又不是我们的核心功能与创新功能,我们会根据开发进度酌情选择“推迟”该功能的开发。如果该功能是我们的核心功能与创新功能或者与其他功能的联动性较强,我们就会决定其为“必须实现”的功能。 -
项目的出口条件(Exit Criteria – 什么叫“做好了”)有清晰的定义么?
有,我们要求项目的功能性、兼容性与安全性达到我们的测试标准才算达到项目的出口条件。 详情请见【HelloKitty-HelloWord】Alpha 阶段测试报告 -
对于可能的变更是否能制定应急计划?
是的,因为在具体开发中我们对开发工作采用了解耦的方式,每个人负责的功能部分相对独立,在面对变更时我们会让对应的成员进行负责,如果涉及较为复杂的前后端对接,则会让对接的同学面对面进行沟通调整,能较好的制定应急计划。 -
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
团队成员保持沟通很重要,能及时沟通能够加快整体的开发。如果重来一遍,在涉及复杂功能开发与变更时我们会让负责的同学直接面对面进行交流与调整,这样能进一步提高开发效率,及时解决问题。
设计/实现
-
设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?
-
功能设计:在制定功能规格说明书-功能设计时,由@JackyZhuo @Kazeya 完成产品在Alpha和Beta阶段的功能设计。并由全体成员在开发阶段的例会上对前期规划不明确的功能进一步讨论补充。
-
产品原型设计:在制定功能规格说明书-原型设计时,由@吕元秋 @徐子航 结合产品使用原型设计工具完成了部分页面的原型设计,为下一阶段前端开发打下了关键基础
-
代码架构设计:由前后端仓库管理员@ljh @李子涵 完成架构设计,确定了开发规范
-
API设计:在后端同学@朱彦安 @JackyZhuo 设计好后端数据结构后,由前后端同学在开发过程中共同完成API的设计。对前后端设计不一致的API,由全体成员在开发阶段的例会上集体讨论
-
前端UI设计:前端开发时由每位前端同学完成,参考产品原型设计,对每个人负责的页面进一步细化UI设计。Alpha开发结束后由@吕元秋 进行整体UI布局调整。
-
-
设计工作有没有碰到模棱两可的情况,团队是如何解决的?
-
功能规格说明书中的部分功能设计在开发前期存在较大的问题,主要原因是部分功能的设计没有给出合理的边界,例如“支持对单词任意属性的修改”等功能描述过于宽泛,未从后端数据结构的设计出发考虑,导致后端数据结构的设计较为复杂。团队在第一次例会中对部分功能重新讨论、进行约束,保证Alpha阶段的数据结构能够满足基础开发需求,降低复杂度的同时,保证对Beta阶段增量开发接的所需数据结构的可扩展性
-
团队内对于前后端交接的API设计在开始时较为模糊,主要原因是不熟悉API协作工具的使用,前后端API编写的权责不清晰,对API工具的测试功能较为陌生。具体解决是明确API各时期的负责人,由前端主导设计后,交给后端开发并进一步校正。同时对于复杂的API进行线下沟通与对接。
-
-
团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 比较项目开始的 UML 文档和现在的状态有什么区别?这些区别如何产生的?是否要更新 UML 文档?
-
使用ApiFox接口管理工具,约束前后端接口的规范性。同时在开发初期,前后端使用它进行各自的测试,避免开发调试时进度不统一的问题,保证了个人开发的代码在交付到对接阶段时,都是经过充分调试的、可信赖的代码,保证了代码对接阶段的高效
-
使用Django框架的测试模块编写单元测试,对所有输出稳定的api的正常功能与异常情况编写了对应的单元测试,(其中去除了登陆注册、gpt交互功能的不稳定输出、每日学习单词的随机生成三类API)并全部通过。
-
使用JMeter 进行压力测试,整个测试过程采用高并发,充分利用服务器资源。
-
使用CICD:对于开发环境,成员在并入dev分支后会自动触发开发环境的CICD,将变动更新到开发环境的项目,使成员能及时看到推送代码在开发环境的变动。
对于生产环境,由于需要谨慎测试后才能进行版本发布,所以生产环境的CICD采用前后端仓库管理员在复审代码通过后,手动点击触发生产环境的CICD。
采用CICD能够减少从开发到交付的时间,极大程度减轻运维的负担,更好地体现敏捷开发的原则。
-
-
什么功能产生的Bug最多,为什么?在发布之后发现了什么重要的bug? 为什么我们在设计/开发的时候没有想到这些情况?
-
安全性方面产生的Bug最多。例如没有做API鉴权导致可以恶意查看修改其他用户的信息;判断邮箱验证码的API和注册API没有封装成原子操作,可以恶意注册大量账号;gpt相关API有次数限制且响应时间较长的API未加锁,导致可以在一定时间内无限次调用;
-
设计时没有想到到的原因是第一次体验包括部署、宣发等真实场景下的软件工程开发,没有调研真实项目相较于课设项目的区别,在项目开发初期对于生产环境及项目安全性意识都比较薄弱。
-
-
代码复审(Code Review)是如何进行的,是否严格执行了代码规范?
-
对于需要部署到生产环境的代码变更,先交由测试同学@朱彦安 进行测试,再交由仓库管理员对变更的代码进行复审后,再并入到master分支,触发生产环境的CICD自动部署。
-
前后端仓库均设置了严格的代码规范,包括对主分支的保护、pr、commit message信息
-
-
我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
-
学到了需要进行严谨全面的安全性设计。历史重来一遍会在设计阶段就调研并制定安全性设计。
-
学到了多人团队开发时如何高效地完成前后端对接。历史重来一遍会把API设计与沟通的过程推进的更加有条理。
-
测试/发布
- 团队是否有一个测试计划?为什么没有?
有,我们设计了场景测试、兼容性测试、单元测试、压力测试与安全性测试。 - 是否进行了正式的验收测试?
是,在发布前我们小组成员根据用户使用习惯进行了充分的功能测试。 - 团队是否有测试工具来帮助测试?很多团队用大量低效率的手动测试,请提出改进计划:至少一个方面的测试要用自动化的测试工具,自动化的测试结果报告,比较测试结果的差异,等等。
有,在开发阶段,我们使用apifox对前端和后端提供api测试。在测试阶段,我们使用了django自带的单元测试框架进行单元测试,覆盖了大部分api的正常工作情况与异常情况。 - 团队是如何测量并跟踪软件的效能(Performance)的?压力测试(Stress Test)呢? 从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?
配置好 nginx+uwsgi 服务器后,我们运用 JMeter 对其进行压力测试,整个测试过程都采用高并发,充分利用服务器资源。在测试时我们发现对用户限制每日调用chatgpt相关功能对性能提高有很好的帮助,改进了项目性能。 - 在发布的过程中发现了哪些意外问题?
- 部署问题:发布前几天意识到前端服务不应该采用
npm run serve
运行而应该打包成静态资源文件。以及应该给网站配置SSL安全证书。发布前成功完成修正。 - 安全性问题:发布项目后被指出的安全性风险包括:API未鉴权,响应时间长的API未加锁出现的恶意频繁请求,判断邮箱验证码的API和注册API没有封装成原子操作。发布后通过hotfix在生产环境完成修正。
- 我们学到了什么? 如果历史重来一遍, 我们会做什么改进?
在测试阶段完整而详尽的测试非常有必要,尤其是在安全性测试方面,我们一开始在这方面的测试不够仔细,导致后期修复了许多这方面的bug。如果再来一遍我们会更仔细的进行安全性测试,并提前邀请一些内测用户协助我们进行测试。
团队的角色,管理,合作
-
团队的每个角色是如何确定的,是不是人尽其才?
-
lzh:选择了PM和运维的工作,感觉整体执行起来比较顺利
-
zl:选择了后端的工作,比较顺利。
-
zya:选择了后端和测试的工作,比较顺利。
-
ljh:选择了前端的工作,开发时样式布局设计的有点痛苦,但组件逻辑写的比较顺利。
-
xzh:选择了前端工作,框架也是曾经使用过的naiveUi。
-
lyq:选择前端,审美还是可以的。
-
wyy:选择前端工作,编码顺利。
-
-
团队成员之间有互相帮助么?
-
lzh:lyq帮我承担了很多的宣发工作。ljh帮忙调出来文件上传的前后端请求bug。
-
zl:lzh帮我解决了一些bug。
-
zya:lzh帮忙修改了数据模型,与修复了一些安全性bug。
-
ljh:lzh帮忙测试解决前后端通信的一些问题。
-
xzh:ljh同学制定了前端规范,在开发时很便捷,lyq同学统一进行了美化工作。
-
lyq:ljh帮忙解决了vue2语法适应vue3架构的问题
-
wyy:和xzh同学商量了一些复习模式的实现细节。
-
-
当出现项目管理、合作方面的问题时,团队成员如何解决问题?
-
lzh:开发遇到的问题在例会的时候集中讨论;文档ddl紧的时候请大家帮我做一部分工作。
-
zl:会直接和负责该工作的组员进行交流,或者在例会的时候讨论。
-
zya:会私聊负责该部分的同学,有分歧时会在开会时讨论解决。
-
ljh:合作中的单一问题直接私聊一起合作的组员。项目中的问题在开会时集中讨论。
-
xzh:简单问题会私聊组员,比较复杂的问题在例会上沟通。
-
lyq:PM能够有进行前后端同学间的沟通,也能够积极调用前端同学们的交流。
-
wyy:对项目整体的规划会在开会时讨论,具体实现时遇到的问题更多是单独与负责该模块同学沟通。
-
-
每个成员明确公开地表示对成员帮助的感谢 (并且写在各自的博客里):
感谢 _______<姓名>______对我的帮助, 因为某个具体的事情: _____________________。
- 大家对成员的感谢均与第2题中的描述一致~
总结
团队总结
-
你觉得团队目前的状态属于 CMM/CMMI 中的哪个档次?
- 我们的团队处于CMMI 二级(管理级)阶段,团队对项目的目标与要做的努力很清晰,项目的目标可以实现。同时我们在项目实施上遵守既定的计划与流程,有资源准备,权责到人,对整个流程进行监测与控制。避免了软件组织完成任务的随机性,保证了软件组织实施项目的成功率。但是我们尚未将软件开发流程进行标准制度化,不能达到三级阶段。
-
你觉得团队目前处于 萌芽/磨合/规范/创造 阶段的哪一个阶段?
团队目前处于“创造”阶段。
-
团队已经形成了一定的协作模式,有共同的远景。
-
团队成员互相支持,互相依赖,而又保持各自的灵活性。
-
成员能够较好地进行沟通、协作和创新。
-
角色和职责能够根据项目的要求自然地转换,没有人为此担心或发牢骚。
-
高度自治,不再需要领导的时时教诲与介入。
-
团队各种现象表明我们处于创造阶段。
-
-
你觉得团队在这个里程碑相比前一个里程碑有什么改进?
我们没有前一个里程碑,但是仍然有一些值得一提的优点
-
清晰的需求理解:通过前期对用户群体的深度调研,团队能够准确地了解典型用户的需求,同时前期进行了完善的功能设计从而减少需求变更带来的风险。
-
高效的团队协作:通过使用敏捷开发方法,结合coding开发工具,团队成员能够很好地协作,提高开发效率。
-
高质量的代码:通过代码审查和编写单元测试,团队提高了代码质量,在开发阶段减少了宣发后可能出现的bug。
-
-
你觉得目前最需要改进的一个方面是什么?
开发过程中投入更多精力到用户安全性设计以及API鉴权等,避免网站被hack导致一些不可预估的后果。
-
对照敏捷开发的原则, 你觉得你们小组做得最好的是哪几个原则? 请列出具体的事例。
-
最佳的架构,需求和设计出自于自组织的团队
团队在开发初期使用大量的时间进行需求分析,完善设计软件功能,并在之后的开发中始终围绕这份设计方案进行。 -
最有效的沟通方法是面对面的交谈
在项目开发过程中,团队非常注重面对面的沟通。为了确保项目顺利推进,团队定期开展会议集中讨论开发过程中的问题,以及近期的开发规划。 -
对技术的精益求精以及对设计的不断完善将提升敏捷性
团队制定了一套git提交规范,这有助于降低项目的长期维护成本,同时避免代码管理混乱。开发过程中对某些功能有异议时及时进行讨论并完善。
-
软件工程质量总结
正如我们前面提到的, 软件的质量 = 程序的质量 + 软件工程的质量,那团队在下一阶段应该如何提高软件工程的质量呢?
-
代码管理的质量具体应该如何提高? 代码复审和代码规范的质量应该如何提高?
- 代码管理方面团队做得已经较为完善,beta阶段可以再对编码规范进一步细化,便于代码复审,提高代码质量。
-
整个程序的架构如何具体提高? 如何通过重构等方法提高质量,如何衡量质量的提高?
-
采用模块化和分层设计:将程序划分为多个模块或组件,每个模块负责完成特定功能。这有助于提高代码的可读性、可维护性和可复用性。分层设计将程序分为数据访问层、业务逻辑层和表示层,有助于降低各层之间的耦合度。
-
衡量质量提高的方法
- 代码复用率提高。
- 衡量项目的维护成本,如修改、扩展和修复缺陷所需的时间和人力资源。降低维护成本说明程序的质量有所提高。
-
-
其它软件工具的应用,应该如何提高?
- 进一步规范git的commit信息。
- 进一步规范ApiFox接口文档的规范性,及时将代码的变更同步到文档
-
项目管理有哪些具体的提高?
- 对coding项目协同中的事项创建进行规范。
-
项目跟踪用户数据方面,计划要提高什么地方?例如你们是如何知道每日/周活跃用户等数据的?
-
目前项目的总人数与总使用量较为可观,下一步计划提高日活,通过引入每日打卡与数据统计分析功能提高
-
项目为单词软件,记录了用户在背诵、复习单词的日期信息,以及聊天功能也会记录日期信息,从而通过数据库获取日活跃用户数据
-
-
项目文档的质量如何提高?
- 由负责不同模块的组员撰写相关部分的文档,最后汇总时进行严格复审。
-
对于人的领导和管理, 有什么具体可以改进的地方? 请看《构建之法》关于PM、绩效考核的章节, 或者 《人件》等参考书
PM可以更多地组织组员进行线下会议,提高沟通效率。PM应该具有更好的时间观念,比如尽量提高会议效率避免一个人讲一个小时的情况。
-
对于软件工程的理论,规律有什么心得体会或不同意见? 请看阅读作业。
-
敏捷开发的重要性:
在软件工程领域,敏捷开发方法论已经成为主流,它强调快速响应变化,以客户需求为中心。我认为敏捷方法的核心思想是不断地评估和调整项目进度,以确保项目始终符合用户需求。这种灵活性使得敏捷方法在很多项目中表现出色,尤其是在需求不断变化的情况下。然而,敏捷方法并非万能,它可能不适用于一些特定领域或项目,如安全性、稳定性要求非常高的项目。因此,在选择开发方法时,应充分考虑项目的实际情况。 -
软件工程的复杂性:
软件工程是一个复杂的过程,涉及到多个阶段、技术和人员。项目管理者需要具备强大的组织和协调能力,以确保项目的顺利进行。我认为软件工程中的一个关键挑战是管理这种复杂性,找到合适的折中方案。例如,在设计阶段,如何在功能、性能和可维护性之间找到平衡?如何在项目进度和质量之间取得平衡?解决这些问题需要深入理解软件工程的原则和实践,以及具备丰富的经验。 -
重视代码质量:
在软件工程中,代码质量对项目的成功至关重要。高质量的代码具有可读性、可维护性和可扩展性等特点。我认为在开发过程中,我们应该重视编写高质量的代码,遵循一定的编程规范和设计原则。例如,遵循SOLID原则、使用设计模式等。此外,我们还应该通过代码审查、单元测试等手段,确保代码质量得到有效保障。 -
用户体验的关键作用:
软件工程的最终目标是为用户提供有价值的产品。因此,我们应该关注用户体验,确保软件能够满足用户的需求和期望。我认为在软件开发过程中,应该始终将用户体验作为一个重要考虑因素。例如,在设计阶段,需要充分了解用户的需求和习惯;在开发阶段,要关注软件的易用性、性能和稳定性;在测试阶段,要从用户的角度出发,确保软件能够满足预期的功能和性能。 -
不断学习和改进:
软件工程领域的技术和方法不断发展,因此作为软件开发人员,我们需要持续学习和改进。我认为在软件工程实践中,应该保持对新技术和方法的关注,掌握行业动态,以便在项目中应用最佳实践。此外,团队成员之间的知识共享和经验交流也十分重要,可以帮助提高团队整体的技能水平。通过不断学习和改进,我们可以更好地应对项目中的挑战,提高项目的成功率。
-