提问回顾与个人总结

项目 内容
课程 2020计算机学院软件工程(罗杰 任健)
作业要求 提问回顾与个人总结
我的课程目标 开发“足够好”的软件
这个作业怎样帮助我实现目标 总结收获,反思不足
以前提问的博客 软件工程第一次作业

对曾经提出的问题进行解答

问题1 发布开源软件的企业希望从中获取什么利益呢?

通过老师在评论区的点拨,我发现开源软件对于企业除了有金钱收入的价值,还有很多其他间接的回报。查阅资料后,我认为软件对于企业的意义如下:

  • 证明公司的实力,收获好的口碑,使用户青睐这个公司未来的其他产品

  • 用作测试平台,可以测试用户喜好、接受能力

  • 开源软件吸引工程师以此为蓝本进一步开发,为公司吸纳人才

  • 从用户获得海量数据,用于科研

  • 和其他企业竞争,抢占先机以获得发言权

    这次团队作业开发的软件也都是免费使用的,各个团队可以选择把代码开源。我们没有依靠它赚钱的想法,更想获得同行的指点,进行技术交流。

问题二 单元测试必须由最熟悉代码的人来写吗?

我之前以为这样会造成测试的盲区,后来在团队项目中经历了测试环节,我才发现由熟悉代码的人来写单元测试可以大大加快测试和修复问题的效率。我曾经误会单元测试的目的是发现尽可能多的bug,其实是检查基本功能能否正常运行,通过了这一关,在使用软件的过程中能发现更深层的bug。

我的第一个团队使用django的单元测试,自己测试自己开发的模块。这样我很清楚我实现过哪些功能,测试可以全面覆盖到这些点,如果测试结果和预期的不一样,可以马上想到错误原因。一个不熟悉代码的人可能要先浪费时间读完代码,写出来的测试也比较盲目。

问题三 用随机数以增加测试的真实性好嘛?

在单元测试环节不能使用随机数,因为要对结果进行断言验证。随机数经常用来测试算法的正确性,但是大型应用软件还是以单元测试检查其基本功能,实际使用中检查UI以及各个模块之间的耦合问题等。

问题四 是否重构

我们团队的项目是继承自上一届的,代码中有结构不太好,或者风格不统一的地方。我们选择在上面进行小修改,修复一些祖传的bug,而没有重构。因为我们的开发周期短,重构需要很慎重,可能自己重构的还不如遗传下来的能实现完所有功能。我们的开发时间也十分紧迫,团队中每个人负责一个模块,代码风格不完全一样,下一届如果选择继续做我们的项目,可能也会发现代码不那么好看。

我们的操作系统课需要在课程组写好的linux系统上再添加一些关键功能,过程中会发现原来系统的bug,但如果把bug改了,会出现新的意想不到的问题。复杂项目的困境是牵一发而动全身,后人为了在短时间内解决bug,写了不完全正确的代码,给后人的后人造成麻烦。

问题五 开发大型软件的人员都要通读万行代码吗?

我到现在为止没有读完团队项目的所有代码,因为我们每个人只负责一个功能,我只需要写这个功能的前端网页,后端逻辑,并让前后端正确交互。提出这个问题是由于我没有开发软件的经验,对前后端框架不了解。

学到的“知识点”

需求:应该与客户沟通了解需求,也可以根据自己的经验添加一些需求。

设计:设计阶段要多与队友交流,他们会提供宝贵的思路。设计完要根据软件的特点选择合适的开发框架。

实现:写代码前要先了解有没有现成的组件,全部自己写浪费时间,效果也很可能不如组件好。

测试:要由熟悉代码的人写单元测试,测试的效率和覆盖率都高。

发布:服务器的性能会影响页面刷新速度,使用的流畅性对于用户体验很关键。

维护阶段:写好说明文档可以给运维人员带来方便。

心得体会

对于我来说个人项目阶段比较轻松,与平时完成编程作业没有什么差别。

软工课最特别的地方在于团队合作。结对项目中我和队友比较熟悉,能够及时沟通,有一方进度出了问题对方可以进行督促和及时救场。

我在大于三个人的团队中会产生与队友沟通的障碍,和不想拖后腿的精神压力。队友全部很强并不一定是好事,虽然他们有很多经验,但时间紧迫的开发阶段很难掰开揉碎的教给你,遇到的困难大部分要自己消化。转会环节我转到了一个每个队员不都是大佬,但是互帮互助的团队,在他们的帮助下我学会了新的前后端框架,然后开发了一个简单的功能,可能这样的环境更适合我成长。

原文地址:https://www.cnblogs.com/mollygarden/p/13154252.html