作者zanyking (遙遠的旅人)
看板Soft_Job
標題Re: [請益] Trace別人Code的方法
時間Wed May 19 01:01:19 2010
關於Trace Code,可以30分鐘搞定的就不討論了。
我的運氣比較好,程式語言是Java,很好分析,以下討論Java的作法。
像是Eclipse JDT的AST架構、Tomcat Source這種級別的,請考慮用XMind去作筆記。
樹狀結構在描述堆疊還是程式碼之間的呼叫很方便,當然如果有錢可以用那種
專門分析的軟體那是最好,不過通常沒有那種錢就是了。
其他一般小的沒有Container觀念的東西,用筆記本還是Notepad++就夠了。
如果不是一天可以看完的,我個人的理想作法會是:
1. 先丟到SVN裡,確保可以管理,然後想辦法正確執行這隻程式。
2. 建立所有這隻程式應該要通過的功能列表,並至少執行過正確的邏輯流程一遍。
3. 依據每個功能執行流程,抓出程式進入點,建決策樹。
(分支太多就用XMind,少一點就用紙筆就好,搞啥Visio的只是找自己麻煩。)
4. 觀察所有的功能流程裡參與的角色Class有哪些,然後很不幸的God Object就會
在這時候跑出來了。
5. 觀察角色Instance的生命週期,特別如果是有Container、Multithread、Persistance
Layer、Request-Response、Event這類東西的時候事情得要很小心,這有點像是在
玩SUDOKU,你的腦袋得在多個構面、維度去瞭解程式碼對整體系統會產生的影響。
6. 觀察角色Class的方法列表,從名稱、資料結構去分析物件的責任。
7. 呈上,你得小心角色Class的資料結構在各種不同的構面觀察到的狀態轉換。
(如果你像我一樣運氣好或不好,你會在這個階段挖到一堆潛在危機。)
對夠複雜的資料結構(通常是系統的關鍵點)請記得善用IDE Break Point的功能,
你應該要能夠預測Programming Stack裡每個參數在不同的狀態轉換時應該呈現的值
,才表示你確實瞭解的夠透徹。
8. 快速的做假設、建立模型、驗證,然後修正。
重點是,halting problem。
請根據你的目標來決定你要挖到什麼程度,不要明明只需要一口井,結果挖了個
小叮噹地底王國還是什麼考古學遺跡出來。
這種看Code的事情如果有幸多做幾次:
1. 你會真的很痛恨God Object。
SUDOKU只有9X9還不錯玩,nXn就很糟糕了。
2. 你也會很痛恨Over Design。
明明做的事情就是那一件,這個東西的Scope了不起就是個賣菜的,不會去賣飛機
還是大砲什麼鬼,幹麼找自己麻煩?最討厭的是,『預留』的東西到了時候其實
還是得打掉重蓋,徒增麻煩。
3. 偽OO比偽娘更該死。
(WTF! You idiXX Mother XXcker!)
4. 你對原作者的腦神經虛擬路徑結構有了新的體認。
寫程式是有風格的,同一個人的程式看得久,你就會看出一些那個人偏好的東西
出來。
5. 你會很心虛。
靠,到底自己小時候造了多少孽阿?如果當初寫得那些鬼有人這樣翻...(羞)
(Shame on me...)
6. 你會相信Code Review 跟Pair Programming 是值得的東西。
一個是寧可要爆現在爆,不要一年後才來斷簡殘篇、郭公夏五,一個是挨罵找個
墊背的。
7. 你會變強。
當然,這是Garbage in, Garbage out,請多看高品質程式碼。
Java Std老少咸宜,Collections翻翻,配大學課本可以把資料結構演算法基礎打實。
實務應用上可以看看Tomcat, Jetty or Eclipse,夠大夠兇而且複雜度夠高。
想看聰明的人寫的,可以考慮google java collections。
--
我所信仰的科學是一種謙卑的理性,承認自身的無知與渺小才能觀察到世界在我們貧
弱的知覺上留下來的痕跡。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.186.232
推 Huangs:文中的 halting problem 是指? @@ 05/19 01:13
→ zanyking:不過我這裡用只是雙關語。 05/19 01:21
→ linccg:曾試著分析FireFox源碼,程式好大看不完,結果..就不看了 05/19 03:16
推 AmosYang:有笑有推 XD 05/19 04:58
推 AmosYang: "The great proof of madness is the disproportion of 05/19 05:07
→ AmosYang: one's designs to one's means." 05/19 05:08
→ AmosYang: -- Napoleon Bonaparte 05/19 05:08
推 AmosYang: (大雄一開始也只是想要一個藏零分考卷的洞而已…) XD 05/19 05:12
推 Seraphy:Textpad也蠻好用的 06/01 18:29