一、阅读源码前
- 阅读前必须熟悉rasa所用的术语,快速了解术语最佳方式就是阅读文档。熟悉之后,根据名字即可知道代码对象属于什么属于的范畴,不用仔细阅读代码即可知晓代码对象作用。
- 如果想知道一个软件是如何工作的,那么必须知道软件是做什么的、怎么操作,有什么输入和产出。
- ①了解rasa各个模块做什么,怎样操作才能训练和推理,其输入输出包含什么信息
- ② 找到rasa的系统入口(rasa通过命令行启动训练和推理,因此追踪命令行的实现,即可得到系统入口)
- sourcetrail -- 优秀的源代码阅读工具,跨平台,免费开源
二、阅读代码时
- 确定本次阅读源码的目标是什么?
- 为了解决一个棘手的bug?
- 扩展rasa系统?
- 学习rasa的设计?
- 解决棘手bug:建议定位到具体出错的源码,搞清楚出错的代码的功能,通过调试确定出错原因,如果必要追溯至调用链
- 扩展rasa系统:建议首先阅读待扩展组件的调用者代码:有哪些调用者,分别调用了这类组件的哪些接口,这些接口的输入和输出是什么;然后阅读官方组件的实现源码,确保详细掌握了每个接口的作业
- 学习rasa的设计:建议多次反复阅读源码,逐次细化地阅读源码。
第一次阅读源码从系统入口开始,按照非常粗的力度了解整个系统的工作流程是怎么样的调用链,其中有哪些关键的综合类,以及他们的作用。
以后每次阅读都进一步阅读上一次没有设计的关键类,了解其内部大概的实现方式。
由于我们的目的是学习架构设计而不是学习源码细节,因此对于同一种组件,只选择其中最简单或最具代表性的实现类进行阅读。
另外有些组件是由深度学习算法实现的,需要结合论文才能理解,因此不建议阅读,阅读其中最简单的实现类或基类即可。
如果遇到难以理解含义或实现过程的源码,可以通过关联这段源码的测试代码快速了解该源码的输入输出,进而理解其作用,及其工作原理。
三、阅读代码后
可以尝试在纸上或脑中回忆源码的流程,争取能够脱离源代码独立地描述清楚源码的逻辑。
在此基础上可以反思为什么官方要这样设计?优点、缺点?如果是自己设计,那些事没有考虑到的?