构建之法阅读笔记03

根据本学期的阅读计划,本周我主要阅读了《构建之法》的第二章和第三章的内容;

第二章:个人技术和流程 

本章的主要概括是:一个团队需要一定的流程来管理开发活动,每个工程师在软件生命周期所做的工作也应该有一个流程,这一章会介绍PSP(个人软件开发流程)

本章主要内容是

2.1单元测试的作用:让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证.而且还是一个很有效的方案。也有写到用VSTS来写单元测试,并且有列出单元测试的代码,但是由于自己也没办法理解到他们的实际操作,所以还不是很深入地了解,自己争取在课余时间尽可能的扩展课外知识,看了这个知识点我个人感觉单元测试和回归测试挺重要的,对以后做程序来说可以让自己的编程能力可以起到一定的帮助。

根据书上的描述,一个好的单测试必须包含以下几点:

1)单元测试应该在最基本的功能/参数上验证程序的正确性 单元测试应该测试程序中最基本的单元—如在C++/C#/Java中的类,在此基础上,可以测试一些系统中最基本的功能点(这些功能点由几个基本类组成)。从面向对象的设计原理出发,系统中最基本的功能点也应该由一个类及其方法来表现。单元测试要测试API中的每一个方法及每一个参数。

2)单元测试必须由最熟悉代码的人(程序的作者)来写 代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更适合的人选了。最好是在设计的时候就写好单元测试,这样单元测试就能体现API的语义,如果没有单元测试,语义的准确性就不能得到保障,以后会产生歧义。

3) 单元测试过后,机器状态保持不变 这样就可以不断地运行单元测试,如果单元测试创建了临时的文件或目录,应该在Teardown阶段删掉。如果单元测试在数据库中创建或修改了记录,那么也许要删除或恢复这些记录,或者每一个单元测试使用一个新的数据库,这样可以保证单元测试不受以前单元测试实例的干扰

4)单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟) 快,才能保证效率。因为一个软件中有几十个基本模块(类),每个模块又有几个方法,基本上我们要求一个类的测试要在几秒钟内完成。如果软件有相互独立的几个层次,那么在测试组中可以分类,如数据库层次、网络通信层次、客户逻辑层次和用户界面层次,可以分类运行测试,比如只修改了“用户界面”的代码,则只需运行“用户界面”的单元测试。

 5)单元测试应该产生可重复、一致的结果 如果单元测试的结果是错的,那一定是程序出了问题,而且这个错误一定是可以重复的,单元测试不能解决所有问题,不必期望它会发现所有的缺陷。

 6) 独立性—单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性 程序中的各个模块都是互相依赖的,否则它们就不会出现在一个程序中。一般情况下,单元测试中的模块可以直接引用其他的模块,并期待其他的模块能返回正确的结果。如果其他的模块很不稳定,或者其他模块运行比较费时(如进行网络操作),而且对于本模块的正确性并不起关键的作用,这时可以人为地构造数据,以保证单元测试的独立性

 7)单元测试应该覆盖所有代码路径 单元测试应覆盖所测单元的所有代码路径,包括错误处理路径。为了保证代码覆盖率,单元测试必须测试公开的和私有的函数/方法。

2.2效能分析工具

  效能分析,这是每一个程序员都梦想的事儿,让自己的程序跑得又快又好,最好是比别人快一个数量级,这是多爽的一项成就呀!VSTS提供了方便的效能分析工具,让我们能很快地找到程序的效能瓶颈,从而能有的放矢,改进程序。或许现在我们接触的程序还比较小,就连最难的也就100行代码,所以分析代码修改代码的快慢,高效与否还未能显现出来,可是等以后我们工作以后会有更多的代码行,可能就是上万行,如果我们要是无法学到这一技能的话那我们工作效率大大减少的。

2.3个人开发流程

现在我们的作业比较简单,可能有些小程序我们多没有明确的构思,就下手开始学代码,试着有各种方法来实现,但是所花的时间代价太大,虽然有些小程序还是有点计划分析也,但相对起来少。我个人认为现在我们就应该重视报告和测试这一块,就像王老师说的一样以后我们可能就是要写一本厚厚的实验报告给客户。

  对于2.1的内容,那么我们该怎么去着手学习单元测试,回归测试呢?是不是可以从我们平时写的小程序里实践一下学习怎么写怎么用单元测试和回归测试吗?

第三章:软件工程师的成长

  这一章节里面主要是评论工程师水平的主要方法。有提及到初级软件工程师如何成长,以及职业工程师的职业发展版本,对于我们这写学生级的软件人员,考证的模式是不是比较普遍的呢?

我认为软件工程师的成长需要以下几点;

 1. 积累软件开发相关的知识,提升技术技能(如对具体技术的掌握,动手能力) 

2. 积累问题领域的知识和经验(例如:对医疗或金融行业的了解) 

3. 对通用的软件设计思想和软件工程思想的理解 

4. 提升职业技能(区别于技术技能) 

   软件工程师、软件测试工程师这样的职业领域现在人才缺口很大,合格的软件人才需求将会远远大于供给。所以自己争取能把自己带到一个合格的程序员,能在程序界从上一份饭,分得一杯羹。对于书本的学习自己会有一定的的进步有一定的作用,我自己也会定期进行自我评价来改进自己,让自己在这一方面有提高进步?

原文地址:https://www.cnblogs.com/hanzhu/p/5293681.html