78
社区成员
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2023年北航敏捷软件工程社区-CSDN社区云 |
这个作业的要求在哪里 | 个人作业-提问回顾与个人总结 |
我在这个课程的目标是 | 学习Web网页开发的后端技能,体验团队开发,锻炼团队协作沟通能力 |
这个作业在哪个具体方面帮助我实现目标 | 体验团队开发,锻炼了开发能力和沟通能力 |
函数最好有单一的出口,为了达到这一目的,可以使用goto。
这个问题在前两周结对编程的过程中就有所体会。在对命令行参数进行异常处理时,由于同时判断正常情形和异常情形下的参数组合,而且需要判断的情况比较多,在这样的情况下使用goto语句(goto error
或者goto end
),使函数有单一的出口(即在函数最后选择正常返回return
或者抛出异常throw exception
),会使代码可读性更高,而且将异常处理部分的代码统一放在error
标签下,有利于对异常抛出信息的更改,而且每个条件分支下只需要关注当前分支所需要处理的事务。
因此,当一个函数可能有多个出口时,使用goto语句,能增加代码的可读性,减少重复性的代码编写和更改。
在7.5节实战中的软件工程中,给文盲的二伯买眼镜、Cargo Cult以及团队AB处理任务的不同模式,三个例子并没有具体回答对软件开发的启发,而在最后以“证人誓词的精神”结束对话。
这三个例子放在一起,主要是想说明一下几点:
几个从来没有合作过的程序员用他们从来没有用过的技术去实现一个他们以前没有碰过的需求,他们的时间估计一定会很飘忽。
正如提问题的博客中所说的:我们的团队似乎基本“符合”了这个极端的例子。在本学期的团队开发过程中,先后进行了Alpha和Beta两个阶段的迭代开发。在前一个阶段中,由于彼此都不是很熟悉,对团队自身的能力以及个人的能力不甚了解,项目的推进很艰难。后来也是及时调整了团队的协作方式,认真做了功能需求的评估。
得出的重要结论是,需要重视功能开发前的调研阶段,查询信息、尝试开发,在前期准备工作中慢慢了解功能实现的步骤,这样估计的时间与实际花费的时间就不会相差很多。
在Beta期间,修复Bug的门槛要逐渐提高,昨天修复了同类的Bug,今天如果还找到了类似的问题,团队未必要修复。
在提问题的博客中,我当时的观点是:Bug的修复应该是按照严重程度依次下降的顺序去逐个修复,如果当天修复完严重的Bug,要下班的时候只有如上所说“类似”的问题,那可以依据这个招数考虑不去修复。问题是:如果当天发现的Bug不多且不严重,那么对于这样的“类似”的问题,是否应该选择修复它,最后由会诊决定是否将修复集成到代码库中去。
在开发过程中,真实的情况是:首先对于基础功能而言需要保证其正确性,比如前后端的对接问题,不容出错,这是肯定的;其次,对于杀手功能的实现,既然要提高用户的满意度,那么一定不能有可复现的Bug遗留;最后,对于Web开发,Bug的严重性的一个重要指标在于出现频次,出现频次高的Bug一定需要修复。
软件工程这门学问有很多 “知识点”, 这门课强调 “做中学” - 在实践中学习知识点。
- 请问你们在项目的 需求/设计/实现/测试/发布/维护阶段(一共6 个阶段)中都学到了什么“知识点”,每个阶段只要说明一个知识点即可。
结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得。
首先是通过阅读《构建之法》了解了很多有关软件开发的知识。这些知识不是具体的开发一个软件或者网站所需要使用的技术栈(这个相信我们系的同学也能通过查阅各种博客网站,在实践中就能学习到),而是软件开发的流程(从需求到实现的一些代码以外的事)、团队开发的管理方法。
结对编程中,”结对“的重心应该是两个人共同开发一份代码,”共同“不是分任务式的一人完成一部分,而是每一行代码都清楚,即便不是自己敲下来的也应该是自己看着敲下来的。但是在实际过程中,由于和队友并不是特别熟悉,而且平时的日常轨迹不重合,真正结对开发的时间是有限的。这个问题在之后团队开发中得到了改善,和后端的同学共同编写一段代码,而且熟悉对方写的代码部分,这也方便了后期的调试工作。
在团队开发中,沟通是第一位的。对于首次合作的团队来说,沟通尤为重要。我深刻认识到例会的重要性,虽然开会往往意味着低效率地沟通,但是在合理安排会议流程,明确会议的内容的情况下,会议起到的作用远大于在功能实现上的所作出的贡献。一个有效率的会议包含互相告知进度、明确接下来的任务分配、以及对开发日程的协商调整等部分。因此,在两次开发迭代阶段的两周至少七次会议要求是有必要的,我们不应该将其作为一种形式主义完成。