转行至今,我看了也写了将近4年代码。转行前,我以为读代码和看文章一样,当时靠着一股蛮劲硬看。后来开始做项目,我逐渐认为应该通过解决bug来阅读代码。

慢慢地,我认为通过bug熟悉项目也并非最好的办法。软件开发人员只会对于修复的bug印象深刻,这导致技术深度和视野都会受到极大限制。因此,我一直思索不通过头铁,也不通过修复bug就能快速熟悉项目代码的方法。

今天和大家分享一个我认为是“银弹”级别的方法。自从掌握了这个方法,它迅速成为我阅读项目源码的重要工具。此外,这个方法不仅能够帮助理解源码,还能帮助理解软件框架和软件需求,可谓一举多得。

上面说的方法就是画UML图,很多朋友可能会嗤之以鼻,觉得画图有什么新鲜的,谁都知道画UML图。为了匹配“银弹”的名头,我的方法就是使用vscode+plantuml插件画uml图。通过这种方式,软件开发人员通过写代码的方式又好又快地画出UML图,且方便改动和优化。

之所以推荐这个工具,因为它很好的符合了程序员的基本工作技能,即写代码。使用plantUML工具,程序员只需要按照其语法规则编写代码即可,工具会将编写的代码转化为对应的UML图。

今天和大家聊聊,我日常开发中使用plantUML最常画的两种图:顺序图类图

顺序图

顺序图是我日常阅读代码不可或缺的工具。之所以画顺序图,还是受到了同组系统工程师的极大影响。他提供的系统需求文档中将功能需求以顺序图的形式表现出来。作为软件开发人员,我只需要根据UML类图设计业务代码即可,工作效率高且不容易出错。 

我当时就觉得顺序图特别好用,但我又不喜欢画图,因此只能睁眼羡慕。自从掌握plantUML后,画顺序图就成为我日常工作中的一部分。 

如今,我一边阅读代码,一边画图。画完顺序图后,可能有些地方仍会有瑕疵,我会在后续阅读代码和修复bug的过程中逐步优化顺序图中的细节。下面是使用plantUML画顺序图的简单示例:

@startuml
A -> B : request
B --> A : response
@enduml

帮助转行程序员快速熟悉项目源码的“银弹”_类图

类图

在使用C++作为开发语言的项目中,我会使用类图帮助梳理各类之间的关系,理解软件整体框架。

我之前看vsomeip的开源代码,其不仅语法复杂,且类之间的继承关系也十分复杂。当时硬着头皮看代码,脑袋越看越迷糊。有时花了一两个小时看代码,起身就忘记了。 

为了脱离这个窘境,我学习类图的画法,并重新阅读vsomeip的代码,这次一边看一边画类图。很快地,我脑中有了vsomeip的整体框架,搞明白了vsomeip内部的消息处理流程。下面是使用plantUML画类图的基本示例:

@startuml
class A
{
int a
void A()
}


class B
{
int b
void B()
}

A -|> B
@enduml

帮助转行程序员快速熟悉项目源码的“银弹”_类图_02

总结

此外,还有用例图、流程图、时序图、组件图等一系列的UML图。由于日常工作中暂时还未用到,本文就不细说,等将来工作需要时再进行仔细研究。

今天写这篇的文章主要有两个目的:

一是给大家推荐uml图的妙用,希望能够帮助大家快速理解项目代码;

二是给不喜欢使用画图软件的朋友推荐plantUML插件,通过写代码自动生成UML类图。

文章首发于上汽零束开发者论坛。