项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2023年北航敏捷软件工程 |
这个作业的要求在哪里 | 个人作业-提问回顾与个人总结 |
我在这个课程的目标是 | 锻炼工程思维,提高开发能力 |
这个作业在哪个具体方面帮助我实现目标 | 总结与反思 |
博客链接
提问博客链接:个人作业-阅读和提问
问题解答
问题1:单元测试是否必须由程序的作者来写
单元测试并不一定非由程序的作者来编写,但在实践中,通常由程序员自己来编写他们所开发的代码的单元测试。这是因为程序员对于其代码的内部结构、实现细节和预期行为有深入的了解,可以更有效地编写测试用例来覆盖各种情况。
在我们团队的开发过程中,单元测试大部分是由程序的作者来写的,即每个人主要负责自己写的代码部分的单元测试,这样做的好处是编码效率高、测试也更全面,但是考虑到任务量和时间精力等,团队部分成员有时候也会给其他人的代码写单元测试。
问题2:结对编程是否能提高开发效率
结对编程可能在某些情况下提高开发效率,但并非适用于所有情况。《构建之法》中提到,结对编程主要能在以下方面提高开发效率:错误检测和代码质量控制、知识共享和技能提升、快速问题解决、减少调试时间。但是在课程的结对编程中,由于合作开发经验不足等原因,传统的结对编程方式并不能很好地提升效率,最终我们组还是选择了两人分工的方式,同样能保证开发效率。
问题3:MVP 配合什么样的反馈收集方式最有效
通过上网搜集资料,我了解到与MVP配合的有效反馈收集方式主要有以下几种:用户调查和反馈表、用户访谈和焦点小组讨论、用户行为分析和数据分析、A/B测试、用户反馈渠道和支持系统。无论选择哪种反馈收集方式,重要的是确保团队积极倾听用户的声音,并将反馈及时融入到产品的演进和优化过程中。组合使用多种反馈收集方式可以获得更全面、多维度的用户反馈,帮助优化产品并满足用户需求。但由于在课程敏捷开发过程中并未采用MVP的模式,因此对其理解还不够深,也并不清楚该模式的实际运作效果。
问题4:在软工课程中最好有人专门做 PM 吗
根据我们团队的实践来看,PM最好还是参加一部分开发工作,而不是只负责管理、交接和文档之类,因为PM完全不参与开发,可能对整个系统的架构和一些实现细节不太了解,导致不能很好地进行工作的分配。而且对于软工课程来说,主要的工作还是在开发和运维上面,管理相关的任务量不是特别大,所以如果PM完全不做开发的话可能和团队其他成员任务分配不均衡。
问题5:压力测试时如何调整系统资源,一定要减少吗
调整系统资源时不一定要减少资源,而是根据测试的目标和需求来增加或减少系统资源。关键是模拟真实负载,并仔细监测和分析系统的性能表现,以便发现问题并进行优化。我们团队在做压力测试的过程中,通过脚本模拟多用户并发访问api、多用户并发访问前端资源、多评测机并发执行评测任务,并调整请求频率、并发数、评测技术来模拟不同场景。
知识点
需求
需求分析部分我了解了NABCD模型,分别指需求、做法、好处、竞争、推广五部分。NABCD模型提供了一个结构化的方法来分析问题、制定解决方案和规划项目的实施。它帮助团队全面理解业务需求和挑战,评估解决方案的价值,并进行有效的项目规划和管理。
设计
在项目开发过程中,设计是很重要的一环,包括数据模型设计和api设计等等。尽管敏捷开发强调快速交付和灵活性,但良好的设计仍然是确保项目成功的关键因素。一个好的设计能够减少开发时的难度,提高开发效率,确保代码的质量、可维护性和可靠性,提升用户体验,减少风险,并促进团队协作和沟通。
实现
实现过程中代码管理是一件很重要的事情,我们团队使用git和gitlab进行代码管理,通过严格的分支管理规范、分支合并规范、冲突修复规范等,几乎没有出现过分支混乱、代码丢失等情况,有效减少了因代码管理漏洞而耗费的不必要的时间。
测试
完成代码后需要进行单元测试和压力测试。对于单元测试,需要保证足够的覆盖率,尽可能覆盖代码中的不同路径和边界情况。测试应该涵盖正常输入、边界条件、异常情况等,以确保代码在各种情况下的正确性。对于压力测试,需要测试不同并发用户数、请求频率、资源配额下的场景,逐步增加负载并记录和比较测试结果。
发布
在发布前需要做生产环境的准备,要进行数据库和数据迁移,并在宣发前配置好一定的使用环境,以便用户更好地体验产品。除此之外还需要进行安全性设置和权限设置,例如前端构建时需要关闭SourceMap等。
维护
维护时可以使用CI/CD来进行自动化测试和部署,以提高运维效率,而部署时使用docker技术也能够方便的进行程序的运行管理。
理解和心得
个人项目
个人项目包括了阅读《构建之法》并提问,以及软件案例分析。通过阅读《构建之法》,我初步了解了一些软件工程相关的基本概念和术语等,也对结对编程和敏捷开发有了一定的思考。而在软件案例分析中,我第一次以软件测试者的身份去使用一款软件,体验和以往有很大不同,例如会重点关注软件中不那么起眼的一些功能,想着尽可能发现bug。
结对编程
结对编程的项目是最长英语单词链,我负责实现CLI、GUI、异常处理和部分单元测试。主要收获提升了编程技能,对结构设计和解耦合思想有了更深入的体会。通过开发这么一个小程序,我对C++的掌握程度更高了,并且学会了CMakeLists、google test、Qt的简单使用(之前只用过PyQt)。但遗憾是在算法方面我没有怎么了解,全交给队友负责了。
团队项目
我们组的团队项目是Compilify编译实验平台,是服务于编译实验的一个优于希冀的平台,实现的主要程序包括前端、后端、分布式评测机、评测脚本、教程框架等等。经过alpha和beta两阶段的迭代开发,我对敏捷开发有了更丰富的理解,对软件产品的生命周期也有了更深刻的体会。在技术栈方面,我加强了前端的开发技能,对vue3的使用更加熟练,并且对于代码管理和git的理解也更加深刻,还掌握了CI/CD,Docker,Nginx等新技术栈的使用。
最后,感谢老师、助教以及同学们无私的帮助orzzz(经过软工感觉自己脸皮又更厚了呢