第三次作业---读《构造之法》1-5章有感
这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2178。
第一章:概论
读完第一章了解到了什么是软件工程、软件工程的领域。软件工程是把系统的、有序的、可量化的方法应 用到软件的开发、运营和维护上的过程。软件工程包括下列领域:软件需求分析、软件设 计、软件构建、软件测试和软件维护。
1.1节中,本书作者用了从儿童时代的纸飞机到成熟飞机产业阶段的发展的例子,描述了软件的制作过程。其过程分为四个阶段:1、玩具阶段即我们刚开始学习新计算机语言,打好基础的过程。2、业余爱好阶段即用所学的语言做出简单的作品,例如:网页、简单的app等等。3、探索阶段即钻研更深层次的知识,学习掌握新技术,并应用于软件创新中去。4、成熟的产业阶段即将成熟的软件应用于商场,并广泛应用。但文中在软件发展阶段之后,提出了一个关于安全功能的问题:如果一架民用飞机上 有一个功能,用户使用它的概率是百万分之一, 你还要做这个功能么?你会选择: 1. 根本不考虑 2. 如果没时间实现这个功能就算了 3. 做了,但是不用告诉用户 4. 做了,而且不厌其烦地告诉用户如何使用 你会如何选择呢?文中同样的用了飞机的安全功能告诉我们答案是做了,而且不厌其烦地告诉用户如何使用,当然,软件在制作过程也需要考虑安全问题,从软件的角度看,就是容错问题,我们应该从用户的角度考虑安全问题,尽可能完善安全功能,即使只有百万分之一的概率出错,也要考虑进去。就像书中所说的“如果氧气罩自动掉下来,应该怎么做。”飞机只有在出现情况的时候,才会掉下氧气罩,虽然几率很小,但如果真的发生,却没有安全措施,就会有很大麻烦。软件也是如此,比如,软件如果没有自动保存功能,在突然黑屏、没电的情况,用户的资料就可能会损失。虽然几率也是很小,但也还是有可能发生的,所以一切有可能发生的安全功能都要完善。
第二章:个人技术和流程
第二章主要讲解了单元测试、回归测试、效能分析以及个人软件开发看流程(PSP)。
2.1.2节中,小飞和阿超的对话让我感触很深,虽然单元测试是回归测试的基础,但单元测试极其的重要。对话中阿超说出了单元测试的重要性,你自己写的模块最好把你这一“模块”要做的事,以及不能做的事,用单元测试清晰地表达出来,且在写技术模块规格说明书时,要写得越详细越好,因为如果你的模块有不同的人,在不同的时间使用,这样能够方便他们使用。单元测试还可以让代码作者感受到复杂代码的副作用。在写代码时,并不是代码越复杂越好,代码越复杂验证的正确性越难达到最高。正确写代码的习惯应该是该写的写,不该写的不写,且代码效率要高,覆盖率也要高。在条件的覆盖率中,影响判断结果的因素有很多,如文中的if语句中,我们不仅要考虑布尔类型TURE的情况,同样FALSE的情况也要考虑。
我的疑问:如何让单元测试的一个测试在几秒钟中完成?
第三章:软件工程师的成长
第三章主要讲了评价软件工程师水平的主要方法有:技能的反面、TSP对个人的要求、软件工程师的思维误区。
3.1节中提到软件团队是由个人组成的,个人在团队中也是有独立流程的,而把每个人的工作有序地组织起来,是团队的流程。所以,要想搞好团队,首先要提高个人的能力,就好比足球,每个足球员都要经过严格的体能、技术、意识等方面的训练,程序员也是一样,要不断积累软件开发相关的知识、积累问题领域的知识和经验、提升职业技能以及实际成果。然后每个人再在团队中有序地组织起来,这样团队才能正常运作。当然,团队对每个成员也是有要求的。1、要成员与成员之间多交流。2、按时完成任务。3、完成不同的任务并高质量完成。4、投入团队的活动等等。
我的疑问:全国计算机等级考试的这种考核方式不是很传统的考试方式吗?那它的主要考核目的是什么?
第四章:两人合作
第四章讲的是两人合作时,应该注意代码规范、极限编程、结对编程、两人合作的不同阶段以及影响他人的技巧。
在写代码的过程中,一定要代码规范。要有代码风格规范、代码设计规范以及代码注释的良好习惯。这么一来,自己下次看的时候,整洁清楚,你的队友和别人也方便解读你的代码,这样也能大大的提高你们团队的效率,不用把时间浪费在解读他人代码上。代码设计规范上,要保证代码模块化,函数出口单一,模块功能单一,尽量做到高内聚低耦合。两人合作,代码模块化的好处就是方便代码合并。
代码设计好后,要进行代码复审,代码复审主要是:1、更正明显的错误;2、对于无法很快更正的错误,要在项目管理软件中创建bug,把它们记录下来。
我的疑问:模块优化是否指提高代码执行效率?
第五章:团队和流程
’第五章讲到了软件团队的几种典型模式:主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队以及特工团队等。
主治医师模式的软件团队中,首席程序员负责处理主要模块的设计和编码,其他人则辅助他的工作,而这些人中有的是后背程序员、系统管理员以及工具来发等。而在社区模式的软件团队中,每个程序员可以参与自己感兴趣的项目,贡献自己的力量,但会出现有的人偷懒。所以这也是跟主治医师模式不同的,不过社区并不是意味着“随意”,这里需要严格的代码复审。在业余剧团模式的软件团队中又是不同,每个人都有权利在不同项目中选择不同的角色,每个人比较平等的讨论,但在竞争性强烈的团队,肯能就不太一样了。还有每个模式都自己的不同之处。
我的疑问:这么多的软件团队模式,该怎么判断选择使用呢?