如何提高代码质量
如何提高代码质量
项目开发流程
从上图可见,对于在开发阶段能有效控制代码质量涉及以下几个元素:
- 需求PRD.
- 测试用例.
- 需求开发
- 代码Review
之后,从以下几个方面来谈一下如何有效的提高代码质量。
需求PRD
PRD 文档主要面向开发、测试、项目经理、交互设计师、运营及其他业务人员。PRD 文档的目的是传达产品的整体思路和核心需求,从而实现各方的需求同步。
如今,许多公司的软件开发模式采用敏捷或迭代开发方式,旨在最短时间内上线可用的产品版本。尤其是在敏捷开发过程中,需求有时会在短期内多次变更,因此对项目团队的协作提出了更高的要求。在这种情况下,编写传统的 PRD 文档可能会拖慢产品开发节奏,且使项目进度难以掌控。
针对敏捷开发,常见的解决方案包括:
PRD 文档的简洁性和灵活性
- 简洁明确:PRD 文档应简洁明了,聚焦于核心需求和目标。避免对实现细节的过度描述,因为这些细节可能会随着开发进度而变化。
- 模块化编写:将需求划分为独立的模块或功能块,便于更新和维护。当需求发生变化时,只需调整相关模块,而无需重写整个文档。
频繁沟通和同步
- 与团队保持密切沟通:在敏捷开发中,产品经理、开发团队及其他相关方之间的沟通至关重要。通过频繁的沟通(如每日站会、需求评审会等),确保团队对需求有共同的理解。
- 需求变更管理:建立需求变更的流程和机制。每次需求变更时,都应明确变更的原因、影响范围及相关优先级。
持续更新 PRD
- 迭代更新:随着开发的迭代,及时更新 PRD 文档,反映最新的需求变更和功能调整。PRD 应该是一个“活”的文档,随时可以进行修改和补充。
- 版本控制:使用版本控制工具(如 Confluence、JIRA)管理 PRD 的不同版本,以便跟踪历史变更记录,确保团队了解需求变化的过程。
这些内容主要是产品经理需要考虑的事项。但对于开发人员而言,除了必要的 PRD 文档外,在接收到需求之初,还应编写一份详细的需求设计文档,其中可以包括以下内容:
- 流程图,了解功能流转及可能涉及的功能模块。
- 开发过程中涉及的字段信息及其返回给前端的形式。
- 需要产出的接口。
- 测试时可能涉及的场景。
注:灵感往往转瞬即逝,因此应提前做好准备,后续再进行补充和更新。
测试用例
单元测试是对软件中的基本组成单位(如模块、过程、函数或类)进行的测试,在保障软件质量的过程中起着重要作用。
虽然单元测试不能替代系统测试和验收测试,但从长远来看,单元测试能够显著提高工作效率,并有效减少软件中的缺陷,从而提升整体软件质量。
进行单元测试的好处包括:
- 降低测试成本:通过及早发现并修复问题,减少后续测试和维护的工作量。
- 提升产品质量:确保每个组成单元功能的正确性,从而增强整个系统的稳定性和可靠性。
设置测试场景:每个测试用例应设置独立的测试场景,包括初始化必要的数据和对象。
执行被测试代码:调用待测试的方法或函数,并记录其返回值或结果。
断言结果:使用断言(assert)语句验证被测试代码的输出是否符合预期。例如,在 JUnit 中,常用的断言包括 assertEquals
、assertTrue
和 assertFalse
等。
清理环境:在测试结束后,清理测试过程中创建的临时数据或对象,以确保测试环境的干净和独立性。
常用的单元测试工具包括 JUnit 和 Mockito 等测试框架。
需求开发
编程规范
- 最新版:阿里巴巴Java开发手册-黄山版
该手册的内容分为“强制”、“推荐”和“参考”三大类,遵循这些规范可以有效避免大多数常见问题。
与其配套的 IDEA 插件:Alibaba Java Coding Guidelines(阿里巴巴代码规范插件)。
统一 java 代码格式化规则
统一的格式化规则有助于减少 Git 上的无效变更。导入方法:📎java-idea-代码格式化配置.xml,
编码注释
基于自己编写的代码,编写Javadoc
注释,不需要一行一行的去注释,只需要针对接口进行述,或者接口内部,按功能进行注释.
你可以通过 IDEA 配置注释模板来减少工作量。
- java - IDEA这样配置注释模板,让你高出一个逼格!! - 民工哥技术之路 - SegmentFault 思否: https://segmentfault.com/a/1190000039700847
写出好代码
什么是好代码:
-
可读性(Readability)
-
易于理解:好代码应该容易被其他开发者阅读和理解,即使是第一次接触该代码的人。清晰的命名、合理的注释、简单的结构都能够提升代码的可读性。
-
一致性:遵循一致的代码风格和命名规范,使得代码在整个项目中保持统一,方便团队合作。
-
-
可维护性(Maintainability)
-
易于修改:好代码应该容易被修改和扩展。遵循单一职责原则、模块化设计等,可以让代码在需要变更时,减少对其他部分的影响。
-
有良好的注释和文档:文档和注释能帮助开发者快速理解代码的功能和逻辑,尤其是在复杂的逻辑或算法部分。
-
-
健壮性(Robustness)
-
错误处理:好代码应该能够处理各种异常情况,避免程序在意外情况下崩溃。良好的错误处理机制能够提高代码的健壮性。
-
边界条件:对各种边界条件和极端情况的处理也能体现代码的健壮性,避免出现预料之外的错误。
-
-
可测试性(Testability)
-
易于编写单元测试:好代码应该是易于测试的,特别是能够通过自动化测试来验证其功能。代码的结构应该支持测试覆盖率高,并且测试能够快速定位问题。
-
低耦合性:模块之间应当尽量保持低耦合,以便于进行独立测试和调试。
-
-
性能(Performance)
-
效率高:好代码在满足功能需求的前提下,应当具有较高的执行效率。代码中的算法和数据结构应当经过优化,以满足性能要求。
-
资源管理:合理使用内存、CPU、I/O资源,避免资源泄漏和不必要的开销。
-
-
可扩展性(Scalability)
-
易于添加新功能:好代码应当具备良好的扩展性,可以在不影响现有代码的基础上,方便地添加新功能。
-
遵循开闭原则:代码应当对扩展开放,对修改关闭,尽量通过扩展实现新的需求,而不是修改现有代码。
-
-
复用性(Reusability)
-
代码复用:好代码应该具备高复用性,常见的功能和逻辑应当抽象为独立的模块或函数,方便在不同项目或不同场景中重复使用。
-
模块化设计:通过接口、抽象类等实现模块化设计,使代码易于复用和扩展。
-
-
简洁性(Simplicity)
-
避免过度设计:好代码应该避免不必要的复杂性,不做“过度设计”。简单明了的解决方案往往是最好的。
-
KISS 原则(Keep It Simple, Stupid):遵循KISS原则,尽量保持代码简单,避免引入复杂的、不必要的逻辑。
-
-
安全性(Security)
-
保护数据和系统:好代码应该考虑到安全性,避免常见的安全漏洞,如SQL注入、XSS攻击等。
-
遵循最佳安全实践:在处理敏感信息时,遵循加密、认证、授权等最佳安全实践。
-
-
遵循设计原则和模式
-
面向对象设计:遵循面向对象的设计原则,如SOLID原则,以确保代码具有良好的设计结构。
-
设计模式:合理使用设计模式,以解决常见问题,提高代码的可复用性和灵活性。
-
推荐我读过的几本比较好的书.
- 《代码整洁之道clean code》
- 《Effective Java》
- 《重构 改善既有代码的设计》
- 《重学Java设计模式·小傅哥》
工具类
尽量使用已被验证的工具类,不要重复造轮子。若现有工具无法满足需求,再考虑扩展或创建新的功能。
代码潜在问题排查
推荐IDEA开发插件,代码分析工具,分析代码存在潜在的问题
- SonarLint:
- QAPlug:
- QAPlug - checkStyle
- QAPlug - FindBugs
- QAPlug -PMD
搭配使用,效果更佳.
Ai工具辅助
- prompts: ChatGPT 中文调教指南 https://github.com/PlexPt/awesome-chatgpt-prompts-zh
- chatgpt: 已免费开放,不需要注册. https://chat.openai.com/
- Copilot: 一次对话有30次的使用限制,可以清空重试. edge已内嵌. https://copilot.microsoft.com/
code Review
坚信三人行必有我师,可以找大佬帮忙看看自己写的代码,可以从哪些方面去优化.
小tips
- 先写测试用例,再写代码.
- 好代码是一遍一遍改出来的。需要留时间打磨。
- 先实现好实现的或者最重要的一个功能点,再慢慢扩充。
- 尽早获得同事的反馈。有不确定的方案选择,要和团队商量,避免返工。