读书笔记——读《构建之法:现代软件工程》第13~17章

第13章 软件测试 昔者韩昭候醉而寝,典冠者见君之寒也,故加衣于君之上,觉寝而说,问左右曰:“谁加衣者?”左右对曰:“典冠。”君因兼罪典衣与典冠

第13章  软件测试

      昔者韩昭候醉而寝,典冠者见君之寒也,故加衣于君之上,觉寝而说,问左右曰:“谁加衣者?”左右对曰:“典冠。”君因兼罪典衣与典冠。其罪典衣,以为失其事也;其罪典冠,以为越其职也。非不恶寒也,以为侵官之害甚于寒。

——《韩非子·二柄第七》

      侵官之害甚于寒——我们不是不鼓励开发人员主动帮助测试,而是我们是要避免导致职责不清的越界行为。我们在测试经验交流的过程中,总会与其他同伴有不同的见解。在测试的过程中,可以选定一个典型用户(Persona),然后按照典型人物的思路和看问题的角度,把整个系统的各项功能都经历一遍。如果有什么你觉得典型用户不满意的,那就可以考虑开一个Bug。我有时知道这个功能的设计想法,但是说真的,在测试的时候没必要替别人考虑太多,要把自己当成用户,而不是设计者,这样我们才能更多地为用户着想,做出更好的作品。

     在软件项目中,有这样一个拐点存在——在这一点之前,新的Bug产生的数量大于Bug解决的数量;在这一点之后,Bug的解决数量大于新的Bug产生的数量。这样Bug的曲线就向下移动。 这是在大型复杂项目中,测试人员和开发人员全部通过一个系统管理bug才会出现的现象。我们不能等待拐点的到来,对于我们这样的日期驱动型的小项目,拐点必须在发布日之前的若干时间发生,如果我们的Bug数量还是继续向上攀升,则无法保证以后曲线会像悬崖一样掉下来。

      问题:我们应该如何让这个拐点发生?

第14章  质量保证

      •  在初始阶段(新项目,团队进入一个新领域,人员刚进入一个项目),每个团队成员都要尽量打通各个环节,多负责,把所有事情都搞懂,培养通才。

     •  当项目/产业发展到一定阶段(进入阵地战的时候),要大力提倡分工合作,培养专才。同时,要把好的工具和流程集成起来,从每日构建,到基本功能的自动化,都要尽快实现。

     •  把自己项目的架构和流程做好,让所有人都能比较容易地进行QA工作,这样,团队的“软件工程质量”才会有提高。

     •  培养“大家都要做QA,专人负责量化的Test,有条件多做测试自动化”的文化。

     •  要明白自己项目的特点,避免照搬别人的做法。不要听说某某伟大的项目的开发/测试比例是多少,因此就哭着喊着也要同样的比例。

     •  如果一个团队是认真严肃地做软件,那他们一定要考虑如何保证程序的质量/软件工程的质量,以及达到这些质量,需要多少成本。

     问题:分工之后,每人负责一小块东西,怎么才能体现出个人的独特而巨大的价值呢?

第15章  稳定和发布阶段

     两个学生项目的例子,推断出这些团队的血型:

     STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……)

     英语学习软件(说了“明早发布”,但是明早一直没到)

     我们在最后稳定阶段不同的团队往往会有以下两种不同的做法:

     ♠  根据事情的轻重缓急,安排大部分事情在下一个版本做。正因为我们对项目、团队、商业模式有信心,才会把很多事情安排在以后的版本中。

     ♣  拼一下,把所有事情搞定,后果是大家都累得够呛,然后人也走了,没有人有兴趣做下一个版本。

     问题:为什么在项目的最开始的时候团队们不拼一下,把所有事情在第一版搞定?这样在最后的稳定阶段就有更多的诗句冲刺了。

第16章  IT行业的创新

     In the summer of 2003 while still working for my first startup I've got a "big idea": social news reader. Imagine something like Google Reader with Priority Inbox and social recommendations.  I was thinking about it day and night. I couldn't sleep and was working through it in my head while lying awake in bed...

    问题:在创业的过程中,市面上和你的朋友圈同时流传更cool 的想法和创新,是应该坚持己见还是随波逐流?

第17章  人,绩效和职业道德

      用专业知识教育人是不够的。通过专业教育,他可以成为一种有用的机器,但是不能成为一个和谐发展的人。要使学生对价值有所理解并且产生热烈的感情,那是最基本的。他必须获得对美和道德上的善恶鲜明的辨别力。否则,他 —— 连同他的专业知识 —— 就更像一只受过很好训练的狗,而不像一个和谐发展的人。为了获得对别人和对集体的适当关系,他必须学习去了解人们的动机、他们的幻想和他们的疾苦。

 

    ---- 爱因斯坦

 

     笔者在这一章中用了三个角色——猪、鸡和鹦鹉来说明了现代软件工程开发团队中的三种典型例子——全身投入参与围观。在与人交往的过程中,我发现还是有很多同学只是关注“自我”和“当下”,不善于跟别人合作,也不会估计别人会怎么想,或者估计“我们的团队将来会发生什么,我要如何应对”。造成这种现象的一部分原因是,不少同学从小就被灌输“搞好自己的学习就可以了”,“把眼下的考试考好,以后就好了”,另一部分原因是,同学们从来没有练习如何与别人合作,估计别人会想什么,估计团队以后会发生什么。科学家认为,人类有别于其他动物的最大特点是人类大脑里有发达的部分在处理“别人在做什么”和“未来会发生什么”(Interpersonal Awareness & Social Awareness)这些事情。能摆脱[自我/当下]而考虑到[别人/将来],从而主动为群体和将来行动,这是人和其他动物不同的地方。在成功的大型企业中,人际交流能力和人际觉察(Interpersonal  competence, and Interpersonal Awareness)是员工素质培训的一个重要部分,它包括如何与别人建立平等而融洽的合作关系,如何处理矛盾与冲突,如何影响同事,如何给别人的工作做评价,如何能了解别人表面行动下的言外之意、隐含的动机等等。在前文提到的“黄金点游戏”这个场景中,一位参赛者需要了解一屋子的同学大概的思路 ,如何影响他们,自己才能增加获胜的希望。如果每个人独自埋头推导公式,而不管其他人在想什么,是得不出获胜的数字的。

 

     问题:软件工程师在企业中是劳动密集型的工人么,还是有独创性的专业人士? 他们对软件企业的成败负多大的责任?