
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习达内Java编程开发培训等互联网课程,而本文我们就通过案例分析来简单了解一下,编程开发规范包含哪些内容。
1)重构
(1)重构目的(why)
重构是一种对软件内部结构的改善,目的是在不改变软件可见行为的情况下,使其更易理解,修改成本更低。即在保持功能不变的前提下,利用设计思想、原则、模式、编程规范等理论来优化代码,修改设计上的不足,提高代码质量。
(2)重构对象(what)
可以笼统地分为大规模高层次重构(以下简称为“大型重构”)和小规模低层次的重构(以下简称为“小型重构”)。
大型重构指的是对顶层代码设计的重构,包括:系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有:分层、模块化、解耦、抽象可复用组件等等。这类重构的工具就是学习过的那些设计思想、原则和模式。
小型重构指的是对代码细节的重构,主要是针对类、函数、变量等代码级别的重构,比如规范命名、规范注释、消除超大类或函数、提取重复代码等等。小型重构更多的是利用后面要讲到的编码规范。
(3)重构时机(when)
提倡的重构策略是持续重构。平时没有事情的时候,可以看看项目中有哪些写得不够好的、可以优化的代码,主动去重构一下。或者在修改、添加某个功能代码的时候,也可以顺手把不符合编码规范、不好的设计重构一下。
(4)重构方法(how)
在进行大型重构的时候,要提前做好完善的重构计划,有条不紊地分阶段来进行。每个阶段完成一小部分代码的重构,然后提交、测试、运行,发现没有问题之后,再继续进行下一阶段的重构,保证代码仓库中的代码一直处于可运行、逻辑正确的状态。每个阶段,都要控制好重构影响到的代码范围,考虑好如何兼容老的代码逻辑,必要的时候还需要写一些兼容过渡代码。
除了人工去发现低层次的质量问题,还可以借助很多成熟的静态代码分析工具(比如CheckStyle、FindBugs、PMD),来自动发现代码中的问题,然后针对性地进行重构优化。
2)单元测试
单元测试(UnitTesting)由研发工程师自己来编写,用来测试自己写的代码的正确性。
单元测试的好处:
(1)单元测试能有效地帮你发现代码中的bug。
(2)写单元测试能帮你发现代码设计上的问题。比如没有使用依赖注入、大量使用静态函数、全局变量、代码高度耦合等。
(3)单元测试是对集成测试的有力补充。大部分异常情况都比较难在测试环境中模拟,比如除数未判空、网络超时。
(4)写单元测试的过程本身就是代码重构的过程。相当于对代码的一次自我CodeReview。
(5)阅读单元测试能帮助你快速熟悉代码。
(6)单元测试是测试驱动开发(Test-DrivenDevelopment,TDD)可落地执行的改进方案。
编写单元测试的经验总结包括以下几点:
(1)尽管单元测试的代码量可能是被测代码本身的1~2倍,写的过程很繁琐,但并不是很耗时。
(2)对单元测试代码的质量可以放低一些要求。命名稍微有些不规范,代码稍微有些重复,也都是没有问题的。
(3)不管覆盖率的计算方式如何高级,将覆盖率作为衡量单元测试质量的标准是不合理的。
(4)单元测试不要依赖被测试函数的具体实现逻辑,它只关心被测函数实现了什么功能。
(5)团队内部需要统一单元测试框架。
单元测试为何难落地执行?
一方面,写单元测试本身比较繁琐,技术挑战不大,很多程序员不愿意去写;另一方面,国内研发比较偏向“快、糙、猛”,容易因为开发进度紧,导致单元测试的执行虎头蛇尾。后,关键问题还是团队没有建立对单元测试正确的认识,觉得可有可无,单靠督促很难执行得很好。
3)可测试性
所谓代码的可测试性,就是针对代码编写单元测试的难易程度。对于一段代码,如果很难为其编写单元测试,或者单元测试写起来很费劲,需要依靠单元测试框架中很高级的特性,那往往就意味着代码设计得不够合理,代码的可测试性不好。
依赖注入是编写可测试性代码的有效手段。通过依赖注入,在编写单元测试的时候,可以通过mock的方法依赖外部服务。
注意,只往里写入数据,并不读取数据,不参与业务逻辑的执行,不会影响代码逻辑的正确性,这些对象没有必要mock。除此之外,一些只是为了存储数据的值对象,比如String、Map、UseVo,也没必要通过依赖注入的方式来创建,直接在类中通过new创建就可以了。
常见的测试不友好的代码有下面这5种:
(1)代码中包含未决行为逻辑,即代码的输出是随机或者说不确定的,比如,跟时间、随机数有关的代码。
(2)滥用可变全局变量。
(3)滥用静态方法,因为静态方法很难mock。
(4)使用复杂的继承关系,如果父类需要mock某个依赖对象才能进行单元测试,那么底层子类要一个一个mock很多依赖对象。
(5)高度耦合的代码,在编写单元测试的时候,可能需要mock这十几个依赖的对象。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。