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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 置換ソフトで指定したファイルの1行目に入力できるものを探しています 7 2022/11/24 10:34
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- その他(Microsoft Office) エクセルのマクロについて教えてください。 5 2023/01/21 09:39
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Excel(エクセル) Excelで漢字人名が勝手に並び変わる(続) 4 2023/03/21 21:28
- その他(プログラミング・Web制作) ドローのソフト 薦めてください 6 2023/07/21 09:03
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで仕様書は書きますか?
-
C言語(gcc), Linux, FTPプログ...
-
空elseの有無
-
プログラム動作時のCPU処理時間...
-
(各種言語)自作関数化の基準...
-
SQLデータベースへのアクセスが...
-
正しい五十音順について
-
C++ で、「)」が必要 というエ...
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
0除算して、落ちるプログラムと...
-
Excelに埋め込んだVBAのプログ...
-
VBAの再計算が反映されない件に...
-
PICマイコンのコピー(クローン...
-
排他的論理和 BCC(水平パリテ...
-
Dijkstraて
-
65536は2の何乗なのでしょうか?
-
C++でアボート(Abort)で処理が...
-
自動クエリとはどういうもので...
-
コンパイルできない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで仕様書は書きますか?
-
C言語(gcc), Linux, FTPプログ...
-
プログラミングのコード量に関...
-
空elseの有無
-
変数・オブジェクト名に漢字使用
-
C++ソースからUMLの設計書を作...
-
きれいなコード vba vbaを勉強...
-
PCの時刻精度
-
VBからシャットダウンさせる方法
-
クリップボードを排他的に利用...
-
MFC,C++/CLI,C#の共存
-
逆フーリエ変換のプログラムに...
-
【VB】データグリッドビューで...
-
COBOLのCALL文がいまいちつかめ...
-
GDLでH8/3052Fのi2cプログラム...
-
プログラム動作時のCPU処理時間...
-
「ルーチン」という言葉の意味
-
例外処理があまり使われない理...
-
良いプログラムとは?
-
実行コマンドのプロセス管理
おすすめ情報