
No.2ベストアンサー
- 回答日時:
ANo.1の回答と同じく、Doxygenがお勧めです。
フリーで使えます。Doxygenでなくても、他にも静的コード解析ツールが沢山あります。
http://ja.wikipedia.org/wiki/%E9%9D%99%E7%9A%84% …
業務でなさるのでしたら、QAC (http://www.toyo.co.jp/ss/qac/index.html)なんてのもありますが、かなりの予算が必要ですのであまりお勧めしません。
> まずはクラス図から作った方が良いのでしょうか?
> C++ソースから設計書を起こすには、どこから手を付けたら良いか
意外とこういうことについて体系立てて説明したものって無いんですよね。で、私はどうしているかというと、ツールを使っていません。次のような方針でコード解析しています。
--------------------------------------------
1.プログラムが提供する主要な機能を理解する。
(1) そのプログラムが提供する機能を大雑把にリストアップする。
(2) コンパイル、ビルドして動かしてみる。(使ってみる)
2.プログラムの論理構造を図示する。
(1) ディレクトリ構造やファイル名などから構造を推理する。
(2) 各ファイルのヘッダコメントからそのクラス(モジュール)の概要を書き出す。
(3) 集中して読み解くべき主要なクラス(モジュール)を絞り込む。
(4) 絞り込んだクラス(モジュール)について、呼び出し関係を図示する。
3.プログラムの処理構造を把握する。
(1) デバッガを使って、プログラム起動から待機状態にまるまでの初期化処理の流れを追いかける。
(2) 1.で最初にリストアップした主要な機能を実行して、処理の流れを追いかける。
4.自分で機能を追加してみる。
--------------------------------------------
私は、自分で機能を追加できるようになったら、もう充分そのプログラムを理解したといっていいんじゃないかと思っています。
それがどんな機能を提供するプログラムなのか知らないでコードを読み始める無謀な人はいないと思いますが念のため。仕様書があればベストですが、なくてもREADME.TXTみたいなファイルがどこかにあれば多少は推測できるかと思います。
今回kanakokanakoさんが飛び込もうとしているソースコードは12万行という大海なわけですが、本当にコード深くまで潜って読む価値のある部分は全体の1~2割程度の2~3万行ではないかと予想します。重要そうなクラス(モジュール)は、ファイル名やファイルサイズ(=1つのファイルの論理コード行数)から推測できます。そして、そういう重要な部分はそのドメインの専門知識が無いとソースコードを読んでも(仮に仕様書があってその仕様書を読んだとしても)意味がわからないから厄介なのですが・・・
今回何のためにソースから設計書を起こすことになったか存じませんが、誰が何のために読む仕様書なのか、狙いを外さない仕様書になることをお祈りします。
単にファイル名や関数の役割をだらだらと書き連ねた設計書はゴミです。労力の無駄。誰もそんなもの読みません。設計者の意図が、コンセプトがわかる仕様書を書いてくれ!と、言おうと思ったら私が仕様書を書く立場になっていました (^-^;A
この回答へのお礼
お礼日時:2008/07/03 18:33
丁寧な回答ありがとうございます。
そうですね、12万ステップ全部見ていこうとすると、どこから見たら・・・と途方に暮れてしまうのですが、概要から順々に理解していこうと思います。
No.1
- 回答日時:
Doxygenで
http://svn.wikimedia.org/doc/ のようなものを自動生成し、そこから設計書を作成していくのがよいかと思います。コードから関数などをリンクでたどれるようになるので解析の助けになりますし、作成する設計書のクオリティにもよりますが、クラス図とコラボレーション図はそのまま使えるかもしれません。
参考URL:http://www.fides.dti.ne.jp/~oka-t/doxygen.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで仕様書は書きますか?
-
XMLでyahooのAPIを叩きローカル...
-
C言語(gcc), Linux, FTPプログ...
-
自分の声が遅れて聞こえてくる...
-
正しい五十音順について
-
あるプログラムのコマンドライ...
-
C++ で、「)」が必要 というエ...
-
VBAにてメール作成した際、一部...
-
65536は2の何乗なのでしょうか?
-
Excelで4096点以上のFFTの方法
-
なぜオーバーフローになるので...
-
0除算して、落ちるプログラムと...
-
変数の値が勝手に変化する原因
-
関数を使わないで日付の計算を...
-
UWSCで指定のフォルダを開きたい。
-
Vba UserFormを前面に出す方法...
-
不要なインクルードファイルの検出
-
データを圧縮したい
-
C++でアボート(Abort)で処理が...
-
ドロップダウンリストの文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで仕様書は書きますか?
-
C言語プログラムを用いた画像表...
-
空elseの有無
-
プログラミングのコード量に関...
-
GDIとDIRECT-X
-
きれいなコード vba vbaを勉強...
-
XMLでyahooのAPIを叩きローカル...
-
ノベルゲームを作成中なのですが、
-
手順
-
ActiveXコントロールの作成(V...
-
Pukiwiki の WikiName を個別に...
-
VBとかC#とかC++とか
-
C言語の質問です
-
C言語(gcc), Linux, FTPプログ...
-
コピーすると 文字化けする仕組み
-
Javaのよさについて
-
他人が作ったプログラムのメン...
-
クリップボードを排他的に利用...
-
こんな感じのアプリを作りたい...
-
C♯の勉強法おしえてください
おすすめ情報