コードを読む!
コードリーディング
こんばんは。
キテレツです。
今日のキテレツは・・・・見積のためにひたすらコードを眺めていました。
正確には・・・ひたすらGrepかまして目的の変更箇所を探していました。
見積りをしなければならないんですが、変更箇所など不明なので探さなければなりません。
そもそもの仕組みもよくわかっていないのですが・・・それが問題か(´・ω・`;A)
読むのが遅い
のです。はぃ。
(-∀-`; )
上司はキテレツの10倍くらい考えるのも読むのも早い。
いったい何が違うのか・・・読み方のスキルの問題か理解力の問題か・・・いや両方か!?
とにかくb見積もらなければならないので、はやく目星をつけなければならない。
コードリーディングを引っ張りだしてみた
わけです。
約10年くらい前に購入した、ソースコードの読み方が書かれている本です。
Rubyを作った「まつもとゆきひろ」さんが監訳をつとめていることも話題になりましたね。
主にはC言語なんですが、複数の著者のテクニックが書かれていて、コードを読むことを解説してくれる本としてとても話題になりました。
当時、面白く読んだのですが、いつのまにやら本棚の片隅の追いやられて・・・・なので引っ張りだして見ました。w
まつもとゆきひろテクニック
なるものを、当時のキテレツは鵜呑みにして試行錯誤してました。
コードリーディングにも様々なテクニックが紹介されていますが
- 落下傘方式
- 関数方式
- デバッガ方式
この3つです。
落下傘方式
とは、
(´д`ι) 「余計なところは極力見たくない!!」
って根性でソースコードを読むときに
(・∀・;) 「たぶんこのへんだろう!!!」
ってところに絞って読み始める方法です。
まぁ、絞り込みを失敗すると意味のないところを読んじゃうことになるんですが。orz
キテ:(・∀・)アヒャ!! 「ここ違ってた!!!関係無かった!!」
ってことが結構あります。
関数方式
これはキテレツ結構好きです。
キテレツは、時間がないにもかかわらず、コードを読み始めると1行ずつ読み進めるという苦行をやらかしちゃいます。Σ(´∀`;)
そんなキテレツには参考になる方式です。
これは、全体を把握したい時に用いると効果的。(*´∇`)ノ
C言語で言うところの、main()からスタートして、関数だけをたどって行きます。
これは、Linuxの起動シーケンスを読み解くときに実際に考案された方式です。(ひらメソッド)
関数の図だけではさすがに
(-∀-`; ) 「結局これ何????」
って事になるので、役割と意味だけを引っ張りだして羅列していきます。
この方法には落とし穴があり・・・・
(゚Д゚;) ちゃんとコメント書いてくれないと関数名からしか機能が想像できない
って落ちがあります。
デバッガ方式
こいつは、説明の必要はありませんね。
実際に動かして見ながら、問題の箇所をさぐる方法です。(*´∀`)ノ
問題が発生する箇所まで動かしたら、動きをステップ毎に区切って確認するので、実際の動きを把握するのに役立ちます。
プログラム全体を理解するにも活用できますが、動かすことにリスクがある場合はこの方法はとれませんね。
そんな時は関数方式で解析を進めるしかありません。
ただ・・・こいつには深刻な落とし穴があって、ステップ実行とかできるので、ついつい粒度細かくコードを追ってしまい、目的まで達成できない場合があります。(´・ω・`;A)
目的をどこに持っていくのか
ってのは大切ですね。
一部分だけを見てOKなのか、それとも全体を把握する必要があるのか。
今日のキテレツは、
。゚ヽ(゚´Д`)ノ゚。 ヤッターン♪ 「修正箇所特定!!」
って喜んでたのですが、実際はそこではなく、別のところが修正箇所だったというオチがありました。
プログラム動かして確認したのですが・・・・キテレツが修正したのはキャッシュファイル。
つまり、一時ファイルなのでいつかは消えてしまいます。
キテレツは一時ファイルを
(oノ´▽)ノ 「これはテンプレートではなかろうか!?」
と判断し、修正して動作確認をしてしまったわけですね。
テンプレートの欠片でもありませんでした。orz