提问回顾与个人总结
提问回顾与个人总结
经过了一学期的软件工程的学习, 我对于软件的开发和协作流程有了新的认识, 因此写下这篇博客来回顾一学期的学习。
项目 | 内容 |
---|---|
这个作业属于那个课程 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ/homework/10822 |
我在这个课程的目标是 | 清晰职业发展规划, 学习领先的软件开发方法 |
这个作业在哪个具体方面帮我实现目标 | 回顾了之前学到的知识点, 对未来有更清晰的认识。 |
作业正文 | 如下 |
1. 对以前问题的回答
-
回归测试
在以前的博客中, 回归测试问题 , 我曾问过这样的问题
我有一点疑问, 新的版本的软件可能在新加的部分有缺陷, 也可能是因为破坏了以前的功能, 或者是二者链接起来出了问题, 而要检测这样的bug需要跑所有的测试, 这样是否会有很大的时间成本开销? 是否有好的方式能够把新增的代码单独测试? 以及用更通用的测试去验证流程的正确性?
之前不是很理解回归测试的作用, 经过了几轮软件工程的开发, 我对于回归测试的重要性有了新的理解。 在我们的软件开发中, 有一次后端因为添加了新的接口, 导致了老接口的权限出了问题, 花了很长时间才修复了bug, 从那之后, 我们很注重回归测试的流程, 添加新功能的同时保证了旧功能的正确性。
-
敏捷开发
在以前的博客中, 敏捷开发, 我曾问过这样的问题
请问在敏捷开发中, 什么样的设计模式和软件架构能够适应敏捷开发的流程? 在招聘中, 如何判断一个成员是否能够胜任敏捷开发的工作?
经过了一学期的软件工程的学习和实习, 我对该问题有了更深入的理解。 在实际的软件工程中, 如果想要进行敏捷开发, 一定要注重软件架构的设计, 否则每次开完stand up meeting, 新添加功能的时候会很困难。 在设计软件的时候, 要把模块的功能尽量细化, 千万不要把所有内容堆叠到一个函数内, 否则很难修改, 实现高内聚低耦合的架构更时候软件开发。 在招聘中, 如果想要判断一个成员是否能够胜任敏捷开发工作, 首先要确保该成员有扎实的数据结构和算法知识, 之后可以采用渐进式的面试方式, 不断添加功能看该成员能否在短时间内设计好框架, 实现新功能。
2. 产生的新问题
在学习中, 我也产生了一些新的问题。
比如
- 如何针对特定的团队, 制定软件开发流程
- 在软件开发的过程中, 如何更好地解决成员之间的代码开发冲突
3. 软件工程中学到的知识点
-
需求
学习了NABCD分析, 在讨论中寻找用户的需求, 针对痛点设计软件。
-
设计
设计主要分为两方面, 功能设计和技术规格设计。 功能设计需要绘制原型图, 对整个软件操作的流程有一个大概的认识, 列出软件的交互逻辑。 技术规格需要对软件使用的编程语言和编程框架进行约定, 指定可行的方案和优化方向。
-
实现
学习django后端开发, 通过python来实现一套Restful接口, 实现前后端分离的设计
-
测试
coverage自动化测试工具, 回归测试, 代码覆盖率。 在每次代码提交复审前先进行回归测试
-
发布
发布的时候需要收集用户的反馈, 进行推广。
-
维护
根据用户反馈修复bug, 指定下一阶段的sprint目标, 维护mysql数据库。
4. 理解和心得
4.1 个人项目
个人项目是实现一个交点求解的程序, 这个项目主要是让人熟悉一些个人软件的开发流程, 拿到任务后进行软件的架构设计, 查资料思考算法, 最后实现, 测试, 性能分析, 用github提交。 整体来看, 这个项目并不是很难, 但是让新接触软件工程的同学对个人流程有了基本的认识。
4.2 结对项目
结对编程项目是很有趣的体验, 这个项目能让人学会如何进项小范围的, 两个人的软件开发合作, 为之后的团队项目搭好基础。 这个项目用到了模块的封装, 编程动态库, 以及使用MFC开发GUI, 两个人一起一个人当领航员, 一个人当驾驶员, 可以互相找bug和代码中的问题, 提升编程水平。 这次项目我个人的体会是, 虽然结对编程能够互相帮助, 但是这种开发方式是比较低效的, 一个人的工作两个人同时做的成本很高, 在真实的软件开发中不太实用。
4.3 团队项目
团队项目带给我的是一次比较完整的软件工程体验, 从讨论选题, 分析不同用户的需求, 再到设计, 技术的选择, django实现, 单元测试, 发布, 维护, 一个人见从雏形到成熟的整体流程是比较完整的。 我们采用了github来管理代码, 用看板, issue, 燃尽图的方式来控制进度, alpha阶段主要的任务是把软件搭起来, 能够使用, beta阶段进行了一系列的优化。 我负责的部分是django rest后端api的开发, 需要给前端一套restful的api, 管理用户的数据。 我觉得在团队项目中, 团队整体需要有一个完善的开发流程, 比如在stand up meeting讨论要sprint的目标, 指定目标后把任务分给个人, 提issue, 然后各自写各自的代码, 提PR, 代码复审, 测试, 关issue, 对接。 如果所有团队拥有很高的软件开发素质并且遵循这套流程的话, 那么团队的开发是很高效的。 团队项目是需要多人合作来完成的, 因此团队流程这件事情给我留下的印象比较深。最后, 总结下敏捷开发的方式, 这学期也在校外实习, 公司用的也是敏捷开发的流程, 和我们的敏捷开发的流程还是有些不同的, 公司的stand up meeting没有那么频繁, 一般都是和自己组内的人进行沟通, 而且需求的文档和写代码前的设计文档是比较完备的, 因此也不需要太多的后续沟通。 同时, 我个人感觉公司的CICD和代码复审要比我们个人的团队成熟, 有更多年经验的工程师来给我的代码架构和性能提意见, 我觉得在开发中这一点是很重要的, 一定要有有经验的人去带, 要不很容易陷入低效代码重复编写的循环。