首页 > 技术文章 > 第三次作业---读《构建之书》1-5章有感

hjyjy 2018-10-08 10:57 原文

 

在这个短暂而又充实的小长假里,我认真阅读了《构建之法》1--5章,对软件工程这个学科有了新的认识,新的感受,新的体会。具体情况如下:

这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2178

 

第1章:概论

       在这一章节中,从作者的描述中,我明白了道“程序=数据结构+算法”这句名言中,讲述的是:程序(算法、数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败。软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。
同时 ,作者的观点:“软件=程序+软件工程”,而一个扩展的推论是:“软件企业=软件+商业模式”。这引起了我强烈的共鸣,毕竟在这个商业繁荣发展的年代,软件与商业模式有着不可分割的关系。
       最后,在作者的提问中,“IT专业的大学毕业生找工作时声称:我精通Java,会用C++写“Hello World”程序,我懂软件工程,我画了很多图,写了很多文档,最后得了很高的分数……这些同学是真的懂软件工程,是一个合格的软件工程师么?”鉴于我本人对软件测试有更深的兴致,所以引起我思考的是,如何成为一个合格的软件测试工程师?

 

第2章:个人技术和流程

       这一章介绍的主要是个人软件开发流程。 首先,从在E-mail中创建User类型中,明白了创建单元测试函数的主要步骤是:1.设置数据(一个假象的正确的E-mail地址)。 2.使用被测试类型的功能(用E-mail地址来创建一个User类的实体)。3.比较实际结果和预期的结果。
       其次,最令我感兴趣的是2.1.2 讲述的好的单元测试的标准。“程序的作者还是要对单元测试负责。最好是在设计的时候就写好单元测试,这样单元测试就能体现API的语义,如果没有单元测试,语义的准确性就不能得到保障,以后会产生歧义。单元测试过后,机器状态保持不变。这样就可以不断地运行单元测试,如果单元测试创建了临时的文件或目录,应该在Teardown阶段删掉。如果单元测试在数据库中创建或修改了记录,那么也许要删除或恢复这些记录,或者每一个单元测试使用一个新的数据库,这样可以保证单元测试不受以前单元测试实例的干扰。单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟)。快,才能保证效率。因为一个软件中有几十个基本模块(类),每个模块又有几个方法,基本上我们要求一个类的测试要在几秒钟内完成。”这一段话给我的体会是比较深刻的,之前我都是以为,程序的作者只需要设计和写程序,而有关测试的,全部交给软件测试师。那程序的作者该如何协调自己的工作,即编写代码,测试代码?

 

第3章 软件工程师的成长

       在本章的开头,作者就拿软件工程师和高级工程师来说,为什么这两者的工作行为看起来没啥区别,甚至有时候高级工程师都下班了,新手工程师还在加班,可是为什么高级工程师会比一个新手工程师工资高那么多?这是一个很有趣的问题,首先,软件工程师是怎么分辨级别的?什么是高级工程师?什么是软件工程师? 我对这三个问题分别查阅资料,在ITeye博客中,博主讲到在某一领域能够独立开发并完成小型应用程序的,有一定工作或实践经验就可称为软件工程师;能熟悉一两种框架(或技术),会用多种框架(或技术),使用过多种数据库,服务器,能用多种软件提高效率,代码规范,质量优秀,可称之为高级软件工程师;对计算机有较深的认识,能运用各种设计模式,开发模式,领悟多种框架(或技术)底层实现如何实现及运行原理,可以按照自己的意识定制和优化应用程序结构.可称之为资深软件工程师。
       再者,作者又提到了一个初级工程师如何成长,并且提出相应的方式,我觉得非常适合我们大学生的。1.积累软件开发相关的知识,提升技术技能(如对具体技术的掌握,动手能力)。2.积累问题领域的知识和经验(例如:对医疗或金融行业的了解)。3.对通用的软件设计思想和软件工程思想的理解。4.提升职业技能(区别于技术技能)。5. 实际成果。那么,从现在开始我该致力于去考哪些证书?软件工程师证书在工作生涯里是个人能力的标志性?


第4章 两人合作

       这一章中,作者首先通过例子,让我感受到代码规范的重要性,且“代码规范”分为两部分,一是代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。原则是:简明,易读,无二义性。二是代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面的通用原则。
       在4.2代码风格规范中,大致讲解了缩进、行宽、括号、断行与空白的{}行、分行、命名、下划线、大小写、注释这几个方面,确实是有很多我以前从未注意过的方面,比如,缩进,用Tab缩进还是用空格符缩进?我一直都是用Tab缩进,一键操作,就搞定全部了。可是作者的观点是,采用4个空格最好,不用Tab是因为Tab键在不同的情况下会显示不同的长度,严重干扰阅读体验。4个空格的距离从可读性来说,正好。
       在4.2代码设计规范中,大致讲解了函数、goto语句、错误处理、如何让处理c++中的类这几个方面。其实在过往的学习过程中,都是很忌用goto语句的。能不用就不用,会降低代码的可读性。因为看到goto就要去找相应的标签。这是我的认知,所以我很困惑,那在什么情况下,可以通过使用goto语句提高工作效率? 通过查阅资料,从多位程序员的说法中可以得出结论goto 语句可以灵活跳转,如果不加限制,确实破坏结构化设计风格。且goto 语句经常带来错误或隐患。但是在特殊情况下适当使用goto语句是可以达到事半功倍的效果的,比如在游戏中的N层循环,一层层地跳,不如直接goto。

第5章 团队和流程

       看完本章介绍的团队模式,认为团队合作有利于产生新颖的创意。三人行,必有一师焉。也就是说每个人都有自己的优劣点,每个人都有自己独创的想法。团队成员组成的多元化有助于产生不同种想法,从而有助于在决策的时候能够集思广益而产生一种比较好的方案。并且团队合作在实现既定目标上具有很多优势,有着与其他群体不可替代的作用,这也是团队合作重要之所在。所以我们要学会与他人合作,学会做一只合群的大雁,这样才使得我们的团队能飞得更高、更快、更远。开发流程非常重要,这关乎整个产品的生存,现在企业面临不断加剧的市场竞争,日益多样化的客户需求及更加复杂的技术服务市场迫切要求企业转变运营方式,以适应新的环境与竞争需要。如何发掘团队中个人的优势,而不是很盲目地说集体力量大于个人力量?

推荐阅读