※本記事ではソフトに関するアイディアを紹介しています。これらは特に記載がない限り、まだ実現されていないものです。これらのアイディアをぜひ実現していただける方をお待ちしております。
データの流れを可視化する
概要
2008/11/21 - 2008/12/03
他の人のコードをちょっと読んでみたり、自分が書いたコードを数年後に見たりすると、膨大なコードの中で迷子になることがあります。もし、データがどのように変化してきたのか、大まかに分かれば、頭にイメージが残り、コードを把握しやすくなると思います。
そこで、見たいデータを持つ変数だけコードから抽出して、矢印でつないで表示することで、コードの理解を支援する、といったアイディアに至りました。データの流れを可視化するものです。
背景
膨大なコードの中で迷子になる
他の人のコードをちょっと読んでみたり、自分が書いたコードを数年後に見たりすると、コードのこの変数にあるデータはどのように処理されてきたのか、その後データがどのように変化していくのか分からず、膨大なコードの中で迷子になることがあります。もし、データがどのように変化してきたのか、大まかに分かれば、頭にイメージが残り、コードを把握しやすくなると思います。
このようなデータの流れを調べるには、コード上で手動で変数をたどっていかなければならず、大きな手間です。グローバル変数をたどるには、高度な検索を使ってその変数にアクセスするコードをすべて探さなくてはいけません。
そこで、見たいデータを持つ変数だけコードから抽出して、矢印でつないで表示することで、コードの理解を支援する、といったアイディアに至りました。データの流れを可視化するものです。
矢印でつながれた変数の名前を眺めるだけで、いろいろな感覚が得られます。コードを1つ1つしっかり見ていくのではなく、なんとなく概観を、いろいろな角度から眺めることで、コードを理解する労力を減らすものです。
どんなもの?
データの流れを矢印で表示
ソースコードを見るときに、この変数にはどこからデータが来て、この変数からどこへデータが流れていくのかを、コードを自動的に解析することで抽出し、データの流れをコード上に矢印で表示する、といったアイディアです。
見たい変数をコード上で選択して、データの流れを表示させると、前後に追跡して、その変数にアクセスするコードを探し出します。そして、コード上にその関係を矢印で表示します。その変数の値を参照するコードや、その変数に代入するコードを探して、矢印でつなぎます。
単に変数名を探していくだけではありません。データが変化していく流れを追跡します。例えば変数xを追跡しているとすると、「x=funcA(p)」というコードはxに値を代入するコードです。pというデータが処理されてxに代入されると考えると、pからxへの流れがあります。そこで次に、pを追跡していく、といったスマート追跡です。
|
コード上にデータの流れを矢印で表示、スマート追跡 |
コードを省略して表示
コード上に矢印で表示すると、コードによっては、関係する部分が広く分布して、矢印が長くなってしまうことがあります。そこで、全体を見るために、間の関係のない部分を省略し、関係する部分のコードだけを寄せ集めて表示します。コードの省略表示によって、今注目したいコードだけに集中できます。
|
コードの省略表示 [全体] |
データの流れを抽出
コード上に矢印で描いていたものを、データの流れだけ抽出して表示し、データの流れをよりシンプルに表示します。変数の名前を抜き出して、この上を矢印でつなぎます。よりコンパクトに表示でき、より複雑なデータの流れになる場合も、見やすく表示できます。
|
変数の名前と矢印を抜き出して、データの流れを抽出して表示 |
変数を追跡してコード上で矢印を表示、間の無関係コードを省略して表示、変数のスマート追跡(変数名でなくデータを追う、データの変化の流れを追う)→抽出して表示
(ブロック間の結合を示すもの |
省略表示 | 関数の中ではコードはブロックに分かれている、ブロック化されている→どのブロックがどの変数を使っているかを、矢印でつないで表示 | ブロックの説明 | 関数の中で宣言されたローカル変数がどのブロックでどのように処理されるかが分かる、グローバル変数は?)→コードブロックのページで説明することに。
世の中の似た機能
EclipseのJavaエディタやC/C++エディタに、MarkOccurrence機能があります。エディタでコードを表示して、その中の変数にカーソルを当てると、まわりの同じ変数名が検索されて、灰色にハイライトされて表示されます。
これはデータの流れの1段目を表示することに相当します。変数を参照するコードや変数に代入するコードまで、深度を深く検索していませんが、その最もはじめの段階をハイライトする機能と考えられます。
更新履歴 |
2008/11/21 |
|
2008/12/03 v1 |
|
2009/01/17 v2 |
|
2009/03/18 v3 |
|
|
※ご意見、ご感想、改善点、その他の情報などがありましたら、メールにてお知らせ願います。
|