1. 阅读提问
我平时就很喜欢阅读,但我很少提出问题。我会习惯性的给作者提出的与我旧有知识体系矛盾的观点添加定语,形象点描述的话,有个很知名的“亚洲最大的单体教学楼”的梗也许能表达 我的思维方式,配图的文字是“当数据的维度增加时,数据将会变得特别稀疏”。因此除了明显的钓鱼或者是带有精准目标群体的内容,我都很难提出反驳来——因为在上下文情形下他说的确实是正确的。
所以在阅读《构建之法》时,提出问题对我来说就非常困难,比如代码规范中关于大括号换行(顺便一提,我是函数括号换行,控制语句括号不换行党)的论述、关于面向对象的思想的观点,这样的问题在不同的程序语言/项目中往往是不同的。最后我终于憋出来了一些虽然内心已经有答案的问题:
1.1 敏捷软工过去的团队项目后来怎样了?
“现代软件工程”这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下,并写一个博客: ·当时的项目有多少用户,给用户带来了多少价值?现在还有人用吗? ·这个项目能否给我们团队继续开发,源代码/文档还有么? ·项目开发有什么经验和教训? ·对学好软件工程有什么建议? ——《构建之法》1.3
在我大一大二时,曾有学长学姐在软工课程上开发了《航胥》等供北航同学使用的App(另一款名字忘了),这些App相比北航教务处提供的时而打不开的小程序,提供了更多直击用户痛点的功能:比如接入课程中心,可以很方便的管理待完成的作业;将课表和空教室查询联系在一起,方便同学上课与寻找教室;本地缓存课程 表,即使没有网络也可以放心查看课程……
与这些软件最开始的邂逅往往来自群组里学长学姐的安利,然而可能是服务器资源到期,也可能是课程评分结束,亦或者是教务对于非官方工具的限制,在逐渐习惯这些软件带来的便利后的某天,App便突然再也无法访问了,最后又回到了官方网站的怀抱。
当然,如果同学们的成果最后可以被官方所“招安”,比如集成的Course Center任务提醒功能,那么从结果上看也是好的,但是事实上教务的课程表除了访问超时的次数变少,似乎没有其他新增功能。这门课的助教很多都是去年敏捷软工的参与者,我想也许可以在这里问问《构建之法》中所提问的这几个问题。
1.2 单元测试由最熟悉代码的人(程序的作者)来写是否足够呢?
单元测试必须由最熟悉代码的人(程序的作者)来写。代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更适合的人选了。 ——《构建之法》2.1.2
单元测试是一种白盒测试,对于编写这段代码的作者来说,代码的内部结构是完全透明的,所以单元测试当然应该由作者本人负责。然而,个人编写的单元测试是否足够呢?在我看来,单元测试的作用主要有两种:
- 作为CI的基础,确保模块在一次次的版本迭代中能够正确执行基本功能