一、閱讀源碼前
- 閱讀前必須熟悉rasa所用的術(shù)語,快速了解術(shù)語最佳方式就是閱讀文檔。熟悉之后,根據(jù)名字即可知道代碼對象屬于什么屬于的范疇,不用仔細閱讀代碼即可知曉代碼對象作用。
- 如果想知道一個軟件是如何工作的,那么必須知道軟件是做什么的、怎么操作,有什么輸入和產(chǎn)出。
- ①了解rasa各個模塊做什么,怎樣操作才能訓練和推理,其輸入輸出包含什么信息
- ② 找到rasa的系統(tǒng)入口(rasa通過命令行啟動訓練和推理,因此追蹤命令行的實現(xiàn),即可得到系統(tǒng)入口)
- sourcetrail -- 優(yōu)秀的源代碼閱讀工具,跨平臺,免費開源
二、閱讀代碼時
- 確定本次閱讀源碼的目標是什么?
- 為了解決一個棘手的bug?
- 擴展rasa系統(tǒng)?
- 學習rasa的設(shè)計?
- 解決棘手bug:建議定位到具體出錯的源碼,搞清楚出錯的代碼的功能,通過調(diào)試確定出錯原因,如果必要追溯至調(diào)用鏈
- 擴展rasa系統(tǒng):建議首先閱讀待擴展組件的調(diào)用者代碼:有哪些調(diào)用者,分別調(diào)用了這類組件的哪些接口,這些接口的輸入和輸出是什么;然后閱讀官方組件的實現(xiàn)源碼,確保詳細掌握了每個接口的作業(yè)
- 學習rasa的設(shè)計:建議多次反復閱讀源碼,逐次細化地閱讀源碼。
第一次閱讀源碼從系統(tǒng)入口開始,按照非常粗的力度了解整個系統(tǒng)的工作流程是怎么樣的調(diào)用鏈,其中有哪些關(guān)鍵的綜合類,以及他們的作用。
以后每次閱讀都進一步閱讀上一次沒有設(shè)計的關(guān)鍵類,了解其內(nèi)部大概的實現(xiàn)方式。
由于我們的目的是學習架構(gòu)設(shè)計而不是學習源碼細節(jié),因此對于同一種組件,只選擇其中最簡單或最具代表性的實現(xiàn)類進行閱讀。
另外有些組件是由深度學習算法實現(xiàn)的,需要結(jié)合論文才能理解,因此不建議閱讀,閱讀其中最簡單的實現(xiàn)類或基類即可。
如果遇到難以理解含義或?qū)崿F(xiàn)過程的源碼,可以通過關(guān)聯(lián)這段源碼的測試代碼快速了解該源碼的輸入輸出,進而理解其作用,及其工作原理。
三、閱讀代碼后
可以嘗試在紙上或腦中回憶源碼的流程,爭取能夠脫離源代碼獨立地描述清楚源碼的邏輯。
在此基礎(chǔ)上可以反思為什么官方要這樣設(shè)計?優(yōu)點、缺點?如果是自己設(shè)計,那些事沒有考慮到的?