软件工程 - 提问回顾与个人总结

提问回顾与个人总结

阅读作业链接

一、提问回顾

1. 关于泛化的时机

对于这个问题,我认为一般情况下开发者是不需要针对没有到来的需求提前进行泛化的。很多时候开发者有很多事情要做,提前泛化无疑增大了单个功能的开发难度以及测试难度,而用户一般只会用到其中的一部分。如果最终用不到泛化的功能,那么泛化的工作就是没有意义的。

但开发者仍需要实时关注用户的需求与反馈,假如某个功能需要处理的“具体问题”越来越多,那么此时开发者就需要考虑进行泛化了。

2. 关于goto的使用

目前我认为软件开发的过程中只要能够使代码实现清晰简洁,像goto这样的方法也可以考虑使用。但一般而言goto只适用于某些特殊的场景,例如所有代码分支都有统一出口或多重循环的情况。无论如何,写出让他人可以看懂的代码是最重要的。

3. 关于结对编程的实力差距

在一学期的开发之后我逐渐理解了结对编程的好处以及适用面。实际上当两人差距过大之时是不太适用于结对编程的,结对编程仅适用于两个人对于需要的知识都比较了解的情况,或者是对于知识有互补的情况。强行让两个差距很大的人结对最终很容易变成一个人开发或者两人分别开发的模式。

4. 关于敏捷开发模式的起步

担任了一个学期的PM及开发后我对这一问题感受颇深。我们的团队就属于平均水平不是很高,并且大家也都初次接触多人开发的情况。但最终我们还是完成了大部分计划的任务。“一个学生干活,其余学生跟着打酱油的情况”并没有出现。

首先一个好的实践是对于任务的拆分要足够详细,并且PM需要评估每个人的能力和任务的难度,并把任务分配给合适的人来做。这样让所有人手头都有事可做,并且能够做。

其次对于一些能力一般的同学,有多种方法能够让他们也尽量参与到团队开发中来,包括每天例会时解答大家的问题或进行讨论,在团队内试行结对编程的模式等等。PM也需要更加关心他们的任务进度,遇到困难时要及时帮着想办法,时间安排也可以相对灵活。

最后是对于组内成员要给予充分的肯定和鼓励,让大家的工作成果展示出来,让每个人都有做贡献后的成就感。

5. 关于平衡产品质量与用户体验

其实一般来说产品质量和用户体验是正相关的,我认为书中的这种情况比较特殊(核磁共振机成像质量好会导致幽闭恐惧)。但对于以上的情况,我认为首先要确认产品质量和用户体验的重要性。假如上述的核磁共振机在成像质量变差的情况下导致了更多误诊,那么即使用户体验再好,对用户本身也是不利的。除此之外还可以考虑是否能从其他的角度来解决问题,跳出两者的平衡寻求第三者的帮助。

二、知识点

需求

在进行需求分析时要考虑需求实现的整体难度,并尽可能对需求进行拆分以减小实现的难度。对于一些不必要的需求尽早抛弃,对于一些过难实现的需求也可以暂时搁置。

设计

前端设计不仅仅需要设计图,还需要明确交互的逻辑,考虑用户体验,并且减少开发时因没有沟通好设计的效果而返工的情况。后端的设计也需要尽可能详细,接口设计要在实现之前完成。

实现

代码实现过程中尽可能少因为“方便”而使用一些比较tricky或简单粗暴的实现方法。例如删除文件就不要考虑使用”执行linux“指令的方式,而是调用框架的删除方法来进行。

除此之外不要将一些针对特定环境的配置信息写死到代码当中,例如文件的路径、数据库的配置信息等等,这不利于后续的开发和维护。

测试

测试要在代码实现的过程中进行,而不是放到实现完成之后。特别是单元测试代码甚至可以在接口设计完成后编写。自动化的测试非常重要,因为当接口逐渐变多时手动测试将变得越来越麻烦。

发布

一定要提前留出一些时间给发布时的特殊情况,考虑到发布环境和开发环境不同很可能出现一些没有意料到的问题。

维护

对于一个项目而言,不仅仅是要维护代码修bug,在修改过程中也要维护注释、文档、测试等内容。

三、心得体会

本学期的软工课程终于结束了。我最大的感受是:

软件工程课不仅仅是一门写代码的课

之前的很多课程一个人写代码写习惯了,有一种自己无论多复杂的事情都能慢慢做完的幻觉。在经历了软工课程之后,我发现一个大的项目光靠自己是很难快速做完的。即使是结对编程那样的小题目两个人结对所花费的时间也比一个人要少。

在这一完成庞大项目、和他人一起写代码的过程中,很多和写代码无关的问题便凸显出来。比如面对一个简单的项目设想,如何细化成具体的需求和实现方法?面对水平参差不齐的团队成员,如何平衡他们的能力?面对其他课程的压力,如何平衡大家的时间和项目进度?在软工课后对这些问题虽然不能说心有成竹,但也有了很多经验,起码在将来再次遇到这些问题时不会手足无措。

软工课上我学到了很多新的方法论,比如结对编程、如何进行测试、敏捷开发等等。很多一开始在心中存有疑惑的方法实践后感觉“真香”(例如结对编程),很多一开始嫌弃做起来很麻烦的事情现在也觉得很有意义(比如单元测试)。我发现写文档和测试也可以是一件轻松且有意义的事情,写技术博客在梳理知识的同时也能获得一点小小的成就感。除此之外作为一个团队的PM,软工课程也让我增长了很多管理方面的经验,让自己不再是一个只会埋头写代码的独行者,也同时结识了很多新的朋友。

总而言之,虽然在三门软工课程中敏捷开发应该是最累的一个,但我并不后悔自己选择了这门课程。非常感谢老师和助教在遇到困难时给予的无私帮助,也非常感谢每一个与我合作过的同学,让我认识到自身的不足并得以进步。

posted @ 2019-06-28 13:21  bwisme  阅读(191)  评论(1编辑  收藏  举报