[I.1] 个人作业:阅读和提问
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 首页 - 2026年春季软件工程 - 北京航空航天大学 - 班级博客 - 博客园 |
| 这个作业的要求在哪里 | [I.1] 个人作业:阅读和提问 - 作业 - 2026 年春季软件工程 - 班级博客 - 博客园 |
| 我在这个课程的目标是 | 在实际项目中运用上先进的软件工程管理方法,提高开发效率和项目质量 |
| 这个作业在哪个具体方面帮助我实现目标 | 阅读教材并提出问题,对软件工程有一个大体上的把握 |
问题 1

在防御性编程中,代码会对很多不可预见的错误做处理。例如,AI 非常喜欢写防御性编程,它会在项目里写一大堆
try{
业务逻辑
} catch(e : Exception) {
错误处理
}
并不会管 Exception 具体可能是什么。
但是编写测试时无法编写出不可预见的错误(能写出来那就不是“不可预见”了),会导致测试做不到 100% 的覆盖。这种情况下这个错误处理是否应该拿掉?
问题 2

这里将软件工程比作医生开刀,以不同医生的不同水平比喻程序员的不同技能,非常有生活气息,易于理解。但是我认为程序和开刀还是有区别的,实际工程中能有多少 c 这样的程序员?我的理由如下:
- 手术的种类是有限的,大部分相同病例的手术都有固定的套路,但是程序员接触到的业务却是五花八门的,这里适用的方法,换个需求就不再适用;
- 如果有多个病人做相同的手术,医生必须单独给给个人都做一遍。但是程序是可以复用的,如果有了相同的需求,除非需要在某些方面有创新有突破,否则公司会更倾向于直接使用已有的代码(包括之前业务的代码、开源的代码、购买的服务)。
问题 3

两个人编程确实是软件工程中比较特殊的方式,两个人编程时交流更加方便,重大问题基本上可以两人共同决策,代码审查也更加容易且频繁。
但是书对此的描述中特地强调了“面对同一个显示器,使用同一个键盘,同一个鼠标一起工作”。众所周知,最慢的 IO 是人机交互,在结对编程中,本来人手就少,还要使用同一套 IO 设备,是不是效率非常低下?就算是一人写代码,一人看文档辅助说明,也得让两人独立行动,而不是限制在一台电脑里操作。
另外,在当前 AI 盛行的情况下,Copilot 等辅助工具已经具有了“副驾驶领航”的作用,能够对代码自动补全,分析简单的需求,审查代码,是不是已经可以取代这种结对编程了?
问题 4

这里有个明显的问题,任何团队任何项目第一次所花费的时间都是无穷大,都不可能做成功。如果没有第一次,又哪来第二次、第三次?针对学生群体,基本上所有的项目都是第一次做,那么针对第一次做的项目,是不是没有任何办法预计完成时间,同时也没有任何办法成功?
问题 5

这里认为产品很容易知道副作用是什么。但是实际上,副作用往往因为不在关注重点上而被忽略。就书中例子,LED 的 Spec 并不会预先知道 LED 发热少导致交通问题这种情况,这里说将这一副作用给写出来是不是有点“事后诸葛亮”?
另外,功能的改动往往会带来一大堆副作用,例如 LED 代替白炽灯,除了发热量有区别,还有外形的区别,颜色的区别,还有可能有对人眼睛疲劳影响程度的区别。此时副作用的记录要记录到哪一水平?
浙公网安备 33010602011771号