如何阅读修改代码

简介: 开发职业生涯中,每个人除了操刀进行全新的设计开发外,更多的时间是在进行代码的阅读和维护,也就是我们常遇到的所谓遗留代码,对于遗留代码的问题,如何掌握和修改是需要一定的知识和经验积累的,幸好前辈们已经提供了很多的阅读图书,借助这些知识,站在前人的肩膀上,我们可以看的更远,走的更远。

开发职业生涯中,每个人除了操刀进行全新的设计开发外,更多的时间是在进行代码的阅读和维护,也就是我们常遇到的所谓遗留代码,对于遗留代码的问题,如何掌握和修改是需要一定的知识和经验积累的,幸好前辈们已经提供了很多的阅读图书,借助这些知识,站在前人的肩膀上,我们可以看的更远,走的更远。

代码阅读

已有的公司的私有代码阅读

如果内部有文档和历史负责人的话,这个最好办,只要和对应的师傅进行求教和学习即可。

然而大部分情况是遗留代码都是比较混乱,文档和代码不匹配等种种问题,此时只能是分析和验证进行熟悉,综合使用静态分析、动态分析的方式进行处理,如下的几个工具可以辅助进行

v Source Insight

n 可以查看代码的关联关系和应用等各种内容

v Visual Studio建模工具/Together工具

n 对于类图、时序图等可以自动反向工程[从代码生成图形],方便理解

开源软件

由于现在开源软件的蓬勃发展,现在很多产品和项目中使用了开源的工具和软件等,对于此类,需要注意

如果开源的文档和社区比较完善的话,那这方面的资料相对都是非常完善的,只要精通这些基本可以掌握了。

相对不太完善的就需要花功夫学习了,此时英语社区非常有用,如stackoverflow等,在这些社区提问和阅读别人的使用经验可谓事半功倍。

但由于在引用这些软件的时候,由于版本的差异,这个问题需要特别注意,否则有时会出现,自己花费了较长的时间解决的问题,其实在新的版本中已经提供了解决方案了。具体和新的版本合并升级的问题可以使用如下的工具辅助比较差异。

v Beyond Compare

v Diff

版本升级特别需要注意兼容性的问题,在进行之前一定要使用TDD进行可用性的验证。

参考图书

“代码阅读” http://product.china-pub.com/18134

这个提供了对开源软件的阅读方法的指导。

代码修改

代码读懂了,理解了,那就要进行代码的修改了,代码的修改其实主要是下面的原因:

v 新增功能

v 修改bug

v 改善或完善:改善设计或优化资源使用

真正操刀的话,需要“胆大心细”,并配合相关的辅助措施。

首先是针对理解的内容构建单元测试,覆盖的幅度越大越好,那么下一步

v 胆大:对现有的代码外味道要敢于修改,否则Bad Smell的这些代码会变成越来越大的维护梦魇

v 心细:通过单元测试小小步迭代,对兼容等问题已经要有多种准备和实施步骤

参考图书

重构 http://product.china-pub.com/196374 

修改代码的艺术 http://product.china-pub.com/36363

相关文章
|
关系型数据库 MySQL 存储
【MySQL】——数据类型及字符集
【MySQL】——数据类型及字符集
【MySQL】——数据类型及字符集
|
存储 运维 监控
Seata-微服务架构开发的必备利器
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式务服务,于 2019 年 1 月正式开源。 目前有四种事务模式,分别是 AT 事务模式(阿里独创)、 TCC事务模式、XA 事务模式以及 Saga 事务模式,基本囊括了市面上大部分事务模式,可以成为是一个一站式的分布式事务解决方案。
Seata-微服务架构开发的必备利器
|
6月前
|
人工智能 安全 Java
对比测评:AI编程工具需要 Rules 能力
通义灵码Project Rules是一种针对AI代码生成的个性化规则设定工具,旨在解决AI生成代码不精准或不符合开发者需求的问题。通过定义编码规则(如遵循SOLID原则、OWASP安全规范等),用户可引导模型生成更符合项目风格和偏好的代码。例如,在使用阿里云百炼服务平台的curl调用时,通义灵码可根据预设规则生成Java代码,显著提升代码采纳率至95%以上。此外,还支持技术栈、应用逻辑设计、核心代码规范等多方面规则定制,优化生成代码的质量与安全性。
911 115
|
9月前
|
人工智能 自然语言处理 算法
完全开源的代码大模型OpenCoder来了,跻身性能第一梯队
在人工智能领域,大型语言模型(LLM)尤其在代码生成等任务中展现出巨大潜力。然而,高质量、可复现的开源代码LLM仍稀缺。为此,多领域专家团队推出了OpenCoder,一个顶级开源代码LLM。它不仅性能卓越,还提供了完整的数据处理流程和训练协议,确保研究的可复现性。OpenCoder的开放性为研究社区提供了从数据准备到模型训练的全流程指导,成为推动代码AI领域发展的关键工具。论文链接:https://arxiv.org/abs/2411.04905
386 91
|
12月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
167 9
|
前端开发 JavaScript
async和await的错误处理
在TypeScript中,`async`和`await`是处理异步操作的语法糖,能够让异步代码看起来像同步代码。`async`函数返回的总是`Promise`对象。当`await`后跟的表达式为`reject`状态的`Promise`时,会抛出错误,需要通过`try/catch`、链式`.catch()`或外部`Promise`包装来处理错误,防止代码崩溃。
421 0
async和await的错误处理
|
12月前
|
存储 Kubernetes 调度
Flink 批作业如何在 Master 节点出错重启后恢复执行进度?
本文由阿里云研发工程师李俊睿撰写,介绍了Flink 1.20版中新引入的批作业进度恢复功能。文章涵盖背景、解决思路、使用效果及启用方法。此前,若JobMaster故障,批作业需重头开始,造成进度丢失。新功能通过将JM状态持久化至外部存储并在故障后利用这些状态恢复作业进度,避免了这一问题。使用该功能需启用集群高可用并配置相关参数。
415 7
Flink 批作业如何在 Master 节点出错重启后恢复执行进度?
|
11月前
|
网络协议 算法 数据库
OSPF 与 BGP 的互操作性:构建复杂网络的通信桥梁
OSPF 与 BGP 的互操作性:构建复杂网络的通信桥梁
353 0
|
12月前
|
存储 物联网 Serverless
什么是Serverless
Serverless是一种云计算架构模式,让开发者通过第三方服务直接构建和部署应用。在此模式下,应用被分解为无状态函数,由云平台统一管理。开发者仅需关注业务逻辑编写,无需管理底层服务器及基础设施。这种方式具有诸多优点:无需管理服务器,可专注业务逻辑;能够根据负载自动调整资源,实现按需计费;具备高可用性和灵活性,并支持多种编程语言。此外,Serverless应用按需启动和停止,无请求时不消耗资源,进一步提高了效率和成本效益。已被广泛应用于Web应用、移动应用、数据分析和物联网等领域。
770 4
|
Windows
MyKeymap按键映射工具
MyKeymap能减少键鼠切换、实现全键盘操作,让「编辑文字」和「窗口管理」更快捷。提升工作学习中写代码、编辑文字、整理笔记、管理窗口的效率,掌握MyKeymap后,能让使用Windows的日常,拥有流畅、舒适、顺滑的操作体验。
400 2
MyKeymap按键映射工具