构建执法第二章读后感

单元测试的作用:让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证

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

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

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

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

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

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

7. 单元测试应该覆盖所有代码路径 
单元测试应覆盖所测单元的所有代码路径,包括错误处理路径。为了保证代码覆盖率,单元测试必须测试公开的和私有的函数/方法 
100%的代码覆盖率并不等同于100%的正确性!

  • 代码覆盖率对于“应该写但是没有写的代码”无能为力。例如代码申请了内存或其他资源,但并没有释放。又如,代码中并没有处理错误情况。就像没有处理和文件、网络相关的一些异常情况,例如文件不存在、权限有问题,等等
  • 代码中有效能问题,虽然代码执行了,并且也正确地返回了,但是代码效率非常低。有些情况下,可以针对代码效率写一个单元测试
  • 多线程环境中的同步问题,这个问题和代码执行的时序、共享资源的锁定有关
  • 其他与外部条件相关的问题(例如与设备、网络相关的问题)

8. 单元测试应该集成到自动测试的框架中 
要把单元测试自动化,这样每个人都能随时、随地运行单元测试。团队一般是在每日构建之后运行单元测试的,这样单元测试的错误就能及时被发现并得到修改

9. 单元测试必须和产品代码一起保存和维护 
单元测试必须和代码一起进行版本维护。如果不是这样,过了一阵,代码和单元测试就会出现不一致,程序员要花时间来确认哪些是程序出现的错误,哪些是由于单元测试滞后造成的错误

时间: 2024-10-12 19:45:30

构建执法第二章读后感的相关文章

软件工程理论方法与实践第二章读后感

第二章读后感 为解决软件开发的问题,首先是将整个软件开发任务看做是一个可比较的刻度量的可改造,而软件过程是软件工程人员为了获得软件产品而在软件工具的支持下实施的一系列软件工程活动,主要包括问题提出,软件需求规格说明,软件设计等等.软件过程模型主要分为瀑布模型,快速原型模型,增量模型,螺旋模型,形式化方法模型,基于组件的开发模型.而微软公司的软件过程模型由规划,设计,开发,稳定和发布五个主要阶段组成,采取低近视的软件开发策略,具体表现在解决问题的及时行.不确定和变更因素的可控性,缩短按产品的上市周

大道至简第二章读后感

 读了大道至简第一章的老愚公的故事,我们知道了勤劳的人总会能够完成所有的困难,最终完成自己的任务,完成自己的目标,愚公移山,看似不能完成,但是与共凭借着子又生孙,孙又生子,活生生的完成了这一个不可能完成的任务,但是在旁人眼里看来,又有一些古板,耗时,毕竟动用了不知道多少代子孙的时间,反而观之第二章的李冰,修建都江堰,也需要“移山”,而且山上又全是石头,要是按照愚公的办法,那得修到什么时候才能完工?但是他发现了最终的方法,用火烧石头,然后浇水,石头就会变得酥脆容易挖走,这就是一种智慧. 从某种情况

第二章读后感

第二章讲述了如何搭建Android底层开发的环境,主要包括Android应用程序开发环境.AndroidNDK开发环境和交叉编译环境的搭建. 开发.测试和调试linux驱动.hal程序库需要的工具:jdk6或以上版本.eclipse3.4或以上版本 adt.cdt androidsdk.android ndk.交叉编译环境.linux内核源代码.android源代码.用于调试开发板的串口工具:minicom. 安装jdk:下载压缩包.将其解压.在终端输入命令打开profile文件来设置环境变量.

大道至简:软件工程实践者的思想第二章读后感

第二章:是懒人造就了方法 引用典故李冰烧山的故事,同是战国时期,愚公就要“碎石击壤”,而李冰就已经懂得“积薪烧之”了,为什么说懒人造就了方法呢,假如李冰也像愚公一样没日没夜的督促他的团队凿石开山,那么他肯定没有时间来学习.寻找或者观察,当然也不会发现“烧”这种方法可以加快工程进度,使得一大座山短时间就被哗啦哗啦地给“碎”掉了. 李冰的团队成百上千,若只为吃喝拉撒,那必然会寝食难安,因为工程太过巨大.相反,他应是个闲人,可以闲到去观察火能否把石头烧爆.在如此大的工程中,如果会闲到去看石头,那他一定

大道至简(周爱民)第二章-----读后感

今天把周爱民大道至简的第二章关于是懒人造就了方法读了几遍,作者通过战国时李冰凿山与愚公移山的比较来阐述懒人早就方法主题,以前听历史老师讲课的时候正是因为懒人才会有那么多可以节省人们力气和时间的发明,但懒人并不是真的懒,只是把更多的时间用到了思考上面与观察生活细节上面,正如文中作者所说愚公太勤快了,勤快的今天可以比昨天凿出一倍的石头,以致没有了机会去寻找更快的方法,人的精力终归是有极限的.提出新的方法,解决的将是做事成效的根本问题.而愚公可以多吃点饭,多加点班,但却突破不了人的精力极限.   文中

《大道至简》第二章读后感------宋广晨

第二章的名字是“懒人造就了方法”.这句话很有名,在网上不少地方都看到过.例子更是数不胜数.其实要看我们怎么理解所谓的懒人.如果一个人身体懒脑子也懒什么都不想干,也许他真的算是懒人,然而这里所说的“懒人”更多时候则是指一种勤于动脑希望以此解放双手的人.这样的人毫无疑问是伟大的.如果没有第一个对手工纺织感到厌烦的懒工人发明了纺织机也许至今我们仍然停留在手工纺织的阶段,如果没有第一个对繁杂的手工计算感到厌倦的懒工程师,也许就不会有第一台分析机进而也不会有“埃尼阿克”也就不会有现代计算机:同样的,如果没

Android深度探索--HAL与驱动开发第二章读后感

第二章:搭建Android开发环境 这章主要讲解Android底层开发环境如何搭建,有Android应用程序开发环境.交叉编译环境和NDK开发环境. Android底层开发主要需要配置Linux驱动的开发环境.配置Android应用程序和Android NDK开发环境,而且还需要Liunx驱动及调试开发板进行辅助和测试.主要需要以下工具: JDK6或以上版本: Eclipse3.4或以上版本: ADT(用于开发Android应用程序): CDT(用于开发Android NDK程序): Andro

《大道至简第二章读后感》

第二章开篇将愚公与李冰作比较,愚公只知道日复一日,年复一年地挖山,毋庸置疑,他是个勤奋的人,然而,他的勤奋让他没有时间来找寻一个更方便快捷的方法,相比之下,李冰用懒人的方法凿了一座山,用时比愚公少,人力资源消耗小,同是战国时期,愚公就要碎石击壤,而李冰已经懂得积薪烧之了,换句话说,是懒人造就了方法. 李冰积薪烧之的方法来由一次闲极无聊的给夫人烧饭,发现垒灶的鹅卵石被烧的爆裂开来,遇水于甚,所以说人的精力是有限的,提出新的方法,解决的将是影响做事成效的根本问题.早期的程序是将代码打在穿孔纸上让计算

李冰烧山——大道至简第二章读后感

读了第一章的愚公移山,让我更深刻的体会到了编程的精义,就是把一个复杂的问题分解成一个个小问题,逐个解决.就像编写一个最大公约数,就要先想出两个数的最小公倍数,而最小公倍数的求法,就可以用1开始一直除到这个数的一半,然后再找出能除尽的最大的数.这样,一个问题就被我们分解开,快速的解决. 而第二章,主人公变成了李冰.战国时期的李冰凿了一座山,他的方法和愚公有着天壤之别,愚公会凿,李冰会烧.在两千年前的某一天,闲极无聊的李冰下厨给夫人炒了一个小菜,他突然发现垒灶的鹅卵石被烧得爆裂开来,遇水尤甚.从此<