单元测试的肥肉与骨头

        无处不在的80-20规则,在软件开发中也同样存在,例如,80%的错误存在于20%的代码中,80%的项目时间消耗在20%的代码上,当然这只是粗略的估计,不同的项目,比例可能有所不同。

那么,这20%是哪些代码呢?是功能逻辑复杂的代码,也就是算法密集的代码。一个算法密集的函数,通常要对数据仔细分类,一个判定就是一次分类,嵌套的判定更使分类次数翻番,要做到分类正确完整且处理无误,是很困难的事。遗漏一个分类,或一个分类处理不正确,就会造成错误,错误与代码行数的比值会很高,而且,只有当输入匹配时错误才能表现出来,难于在系统测试中发现。

        一个功能逻辑较简单的函数,也许代码行数不少,也有一些判定,但这些判定通常用于拦截非法输入,以及进行调度,其功能逻辑是明确的和容易理解的,错误与代码行数的比值较低,而且,通常一些很常规的输入,就可以覆盖全部功能逻辑,因此,错误也容易在系统测试中发现。

        对于程序员来说,很多代码都是敲键盘,通过编译后,再仔细看一两遍就可以了,这些代码编写速度快,错误少,调试时间也少。另一些代码,即算法密集的代码,往往是解决问题的关键,需要创造性的和缜密的思维,这些代码占用了多数的编码时间和调试时间。

        单元测试的成本与所需的数据规模正相关,即数据密集的函数,需要更多的测试时间来构建这些数据。算法密集的代码,一般不会同时数据密集,如果是,也应该将算法密集的部分分离出去形成独立函数,例如,一个函数,要对一个结构指针数组里的各个项做复杂处理,那么,这个复杂的处理过程应该独立出去,这是很容易做到的,也是一个基本的编码规范。

        算法密集的代码包含大多数错误,且难于在系统测试中完整测试,而单元测试很容易做到这一点,且构建数据的成本低廉,是单元测试的“肥肉”。其他代码或者错误较少且容易在系统测试中发现,或者构建数据的成本较高,是单元测试的“骨头”。

        对于刚开始实施单元测试的企业来说,首先应完成算法密集的代码单元的测试,做到了这一点,可以说用20%的单元测试成本达到了80%的效益。可见的、显著的效益对于刚开始实施的企业来说是至关重要的,只有这样,测试人员才能获得成就感、增强信心与兴趣,管理层才会更有力地支持,其他同事才会更积极地配合。华为推崇“先固化、再优化”,重要的是先做起来并且见到效益,以后再慢慢强化和改进,而不是一下子就要求做到如何全面和完美。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值