软件工程实践总结

这个作业属于哪个课程 2021春软件工程实践
这个作业要求在哪里 软件工程实践总结&个人技术博客
这个作业的目标 课程回顾与总结、个人技术总结
其他参考文献 软工实践寒假作业(2/2)、《构建之法》

课程回顾与总结

问题分析

点击这里查看寒假作业中提出的问题。

问题一:我们是否应该在单元测试中测试代码是否达到了性能上的要求(尤其是时间性能)

在寒假作业中个人的观点是,一些单元测试不一定要快,应该在单元测试中测试程序的性能。比如我可以在一些测试函数中测试性能,如果发现某部分程序性能不达标,这时候再使用性能分析工具,具体分析该部分程序该如何优化。我这里强调的是开发人员对程序的测试,不是测试人员对程序的测试,毕竟开发者也是要保证性能达标了再交给测试者测试。

分析:现在我对这个问题有了不一样的理解,需求中对于时间性能上的要求主要是对于比较大粒度的程序的性能要求;而单元测试仅仅是对一个小的模块的测试,相对而言是小粒度的。我个人认为还是应该在这里对时间要求较高的模块进行时间性能测试(充分利用单元测试工具的功能),这样利于后期进行时间优化。

问题二:我们测试的时候应不应该使用真实的用户数据(不敏感数据)来进行测试?

分析:我认为需要,要让程序在生产环境得到充分测试,足够真实的用户数据是必需的。这部分情况我们其实没有必要单独划分出来考虑,因为在软工实践的过程中发现,其实项目β版本的发布就有利用真实数据进行测试的目的。

问题三:注释是否应该只用ascii字符,不要使用中文或其他特殊字符?

分析:关于这一部分我仍然持我原有观点:

如果我们写的某一部分代码开发者都是中国人,而且这一部分代码是公司内部程序的主要逻辑代码,不能对外公开,那么使用中文注释会极大地降低理解成本,毕竟对于大多数中国人来说,肯定是对母语汉语的理解成本更小,日常的交流也使用中文交流。如果对英文不熟悉的人,很有可能会对某些注释产生误解,增加理解成本;而如果我们维护的是一个开源代码库,参与开源的开发者来自世界各个国家,我们代码的读者和使用者也来自世界各国,那么使用英文注释是最佳选择。

这里我比较赞同阿里巴巴的观点,《java开发手册》2020嵩山版中提到:24页第6点:【推荐】与其“半吊子”英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文即可。

问题四:为结对编程的一个关键是如何快速地度过学习阶段?

分析:这软工实践中,我深刻地认识到了多人编程(包括结对编程)中,各方面规范的重要性,我认为这也是对于这个问题的最好解答。人员的变动很容易把结对编程之前培养的默契销毁,要在这种情况下还保证高效的开发效率,形成初步的编程默契,一个双方都认可的规范是重中之重。

问题五:一个团队中是否需要一个由多人组成的PM团队?

分析:出现这个问题的主要原因是PM这个职位本身具有很高的重要性,任务职责又较多,如果单人负责,而该PM又中途离开,可能会对项目开发的推进造成很大的影响。所以,我认为PM最好可以多一些人,但是这可能会导致产生更多的问题,比如两个PM对客户需求不同的解读、任务分配问题、责任推卸等等。

收获

需求

收获:原型制作。使用Axure RP进行原型制作是我在这一个阶段学到的最大收获,这也让我了解了需求分析需要写的需求规格说明书等文档。一个项目是否能满足客户的需求,需求分析是非常重要的一个部分。

设计

收获:这一个阶段我最大的收获是对项目数据库的设计。数据库的设计不仅仅要考虑数据冗余问题,还需要考虑数据库的性能优化、性能管理等,其中更重要的是我还需要根据项目的真实情况考虑数据库的延展性。

实现

收获:这一部分的收获主要是重新回顾学习了springboot框架相关的知识点,包括redis、mybatis-plus、shiro等框架。同时学习了DFA算法实现敏感词过滤和java实现基于用户的协同过滤智能推荐算法。

测试

收获:这一部分主要是学会了使用Junit5进行单元测试、使用postman进行自动测试、使用jmeter进行并发压力测试等

发布阶段

收获:在发布阶段,我们需要时刻等待出现新的bug,然后马上进行调试处理。

心得体会

感觉软工实践的课程设计较为合理,布置任务是从个人编程、结对编程、团队编程进行不断的迭代。这些过程中包括了我们实际开发中大部分可能遇到的情况,也让我们在各种各样的环境下,综合运用了这几年来学习的知识。我一直都认为软工实践给我们带来的技术上的最大收获并不是学会GitHub、Axure RP等工具;也不是学习了前端(或后端)的新技术;也不是大大提升了写文档、编码能力,而是对软件开发过程的宏观认知。课程虽然与实际的软件开发有些差距,但是整个流程的步骤是比较完整的。

软工实践不能让我们在某个领域学到较深的专业知识(比如后端开发、软件测试等),但它带我们走了一遍流程,体会了软件开发的一整条生产线。这对我们的好处是巨大的,让我们把以前学过的各个专业知识串在一起,并进行实践应用。我们今后或许不需要在软件开发的每一个步骤都做到精通,但要做到在精通某一领域的基础上对全局有清晰的认知,这或许会成为未来提升自己能力的关键。

个人技术总结

相关博客:基于用户的协同过滤推荐算法

概述:计算机网络技术带给人们的最大贡献之一就是数据的共享,如何使得我们的项目更加“深入人心”是我们需要不断思考的方向。很多的项目都需要给用户提供数据(例如博客、知识等),但是海量的数据从某种程度上会降低用户获取有用信息的效率。项目如果能给用户推荐他们感兴趣的博客,做到真正的“千人千面”,那将使得我们的项目更加智能,更加具有市场竞争力。

目前常用的推荐算法有:协同过滤、矩阵分解、聚类、深度学习等等,这里我主要聊聊基于用户的系统过滤推荐算法。

posted @ 2021-06-27 23:55  星夜的风  阅读(126)  评论(2编辑  收藏  举报