程序员必备的两项基本技能

Spring在“清算”EJB的时候,提出的一大罪状就是:强迫开发者继承它的类,依赖容器,难于单元测试。

Spring的解决之道就是POJO,摆脱容器的控制,可以独立创建和测试。即使是对SpringMVC这样重度依赖容器的框架,Spring也提供了不需要Tomcat/Jetty运行,就可以对代码进行单元测试的办法: Mock。 

不仅仅是Spring, 你可以看看自己正在使用的语言和框架,是不是都有单元测试的支持?

Java就不用说了, Python 语言有unittest, Python写的Django框架也有django.test, Ruby 和Ruby on Rails 有TestUnit, MiniTest。  ReactJS 有 Enzyme, Vue.js 有vue-test-utils......

为什么这么多大牛都把单元测试加入到语言和框架中来呢?  

答案很简单,单元测试实在太重要了。

单元测试对于程序员来说,就是一个防护网, 能让你有信心开发新的特性而不破坏现有的实现,与此同时,良好的单元测试,还能帮助别的程序员理解你的代码。

尤其是对于动态类型语言做的大型项目,没有单元测试,修改代码是一件“可怕”的事情。

一个代码单元(可能是一个类,或者是一组类) ,如果被充分地测试过,这个代码单元通常有这样的特点:  和别的模块耦合度低,是面向接口编程(只有这样才能实施Mock,才能测试),这样的代码就是好代码。

对于一个有追求的团队,对于一个想持续维护一个“正经”应用的团队,单元测试都是必备的。

同理,对于一个有追求的程序员,单元测试也是必备技能。 

可能有些人会说,我们的项目很复杂,没有写单元测试,项目也运行得很好啊! 我想也许有这么几种可能:

  • 可能做的是一锤子买卖。

  • 项目中已经埋下了地雷,只是没有发现。

  • 在测试阶段付出了巨大的代价,拼命加班,修改了无数的Bug。

当然,有些单元测试是不容易写的, 最难搞的就是遗留代码, 你得想办法解耦才行,这方面有人专门写了一本书,强烈推荐。

640?wx_fmt=jpeg

没有人一次就把代码写得既正确又优雅,如果你是这样的人,请告诉我,我得拜你为师。 当然,我说的不是入门的Hello World,而是需要实现复杂的逻辑。  

通往优雅代码的路径就是不断地重构。 

  • 类名,方法名,变量名能不能准确地表达意图? 让人一看就知道是怎么回事?

  • 方法是不是太长, 各种逻辑交织在一起, 能不能提取出新的方法?

  • 类的职责是不是划分得不好,导致有些类过分臃肿? 

  • 这个模块如何进行扩展? 对外暴露的接口用起来怎么样? 

......

强烈建议每个程序员写完代码以后,再审视一下,看看有没有上面的问题。

如果有,那还愣着干什么, 赶紧改吧! 可是改动代码破坏了功能怎么办? 要是有单元测试就不怕了。 兜了一圈,又回到了单元测试!

重构要求在不破坏原有代码的功能的情况下对代码进行改动,让它变得更好, 没有单元测试是很难的。 

对于重构的具体技巧,我就不罗嗦了,  Martin Fowler已经总结了一本书:

640?wx_fmt=jpeg

总之,单元测试和重构是程序员的两项基本技能,他们和编程语言无关,如果你没有掌握的话,很难说是一个合格的程序员。

(完)

你看到的只是冰山一角, 更多精彩文章,请移步《码农翻身文章精华


基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值