• ベストアンサー

他人の作ったソースの見方(どこがスタート?)

ソースを渡され『見ておいてね』と言われました。 とりあえず処理を順を追って見ているのですが 一つの難問にぶつかりました。 『ハテこのソースはどういう形で呼ばれるのだろう』と言う事 mainもなければ動作する環境すら整っていない現状なので どの変から動いてどのように流れるのかが追えません… もちろんプログラムの説明などはなく ただ漠然とこういう動作だ!と言う機能設計書があるだけです。 現段階で出来る事と言えば…やはりココの処理を理解する だけで良いのでしょうか… 正直帰りたくなってきましたが…帰っちゃっていいものかな…

noname#6248
noname#6248

質問者が選んだベストアンサー

  • ベストアンサー
  • 12m24
  • ベストアンサー率23% (193/817)
回答No.2

 main がないということは、たぶんウィンドウアプリケーションを作っているのかと思います。  Windows:VCの場合は、WinMainあるいは、_tWinMainが始まりとなります。  ほかのことはリファレンスや入門書などを見るとわかると思います。

noname#6248
質問者

お礼

回答ありがとうございます。 おそらくDLLを作成している物かと思います。 呼び出し元は不明ですが何とかしてみます。

その他の回答 (6)

noname#118114
noname#118114
回答No.7

それは、ただ見るだけならそれでもかまわないですけど、 そのプログラムがどんな機能について分からないと全く意味がないです。 指示を出した人に細かく聞くのが良いでしょう。 必要事項としては 1:作業の意味 2:ソースの開始位置 3:機能の詳細事項 4:受け取る引数の有無。あるのなら型と個数の情報 5:送る引数の有無。あるのなか型と個数の情報 です。 特に1は重要です。 もし指示を出した人が作業の意味に答えられなかったら嫌がらせの可能性があります。

noname#6248
質問者

お礼

回答ありがとうございます。 そして御礼が遅れてしまいもうしわけありません。 >指示を出した人に細かく聞くのが良い 聞けば聞くほど自分の未熟さが見えますね… 上への不満を酒の肴にしていた自分が情けない… つき上げれば良かったんですよね。 しっかし上は今日もいないんだよなぁ…まいっか それではっ。

noname#6248
質問者

補足

この場を借りて皆様へ… 質問から一ヶ月以上が過ぎたんですね… 結果から申し上げますと、この作業は単なる場つなぎだったようです。(遊ばせておくだけでは損と言う事ですね) ただ嫌がらせと言うわけではないと思います。(そう思いたいだけかもしれませんが…) 今までjava+web系一本だったので、要は『Cを理解しろ』と言う事だったらしいです。 本当にありがとうございました。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.6

もう帰られたかな? 汎用のライブラリということもありますね。 そうであれば、どこから呼ばれているということではなく、 どこから呼ばれても動くように作られていなければいけません。 (例:sin()はどこから呼ばれてもサインの値を返す。) まあ、呼び出し方に一定のルールがある場合もありますが。 (例:fprintf()を呼ぶためには、予めfopen()が呼ばれていなくてはいけない。) そこら辺は機能設計書があるのなら、そこに書いてあるはずです。 (手抜きの設計書でなければ。) まずは設計書を見て、何をするプログラムなのかを理解すべきだと思います。

noname#6248
質問者

お礼

>汎用のライブラリ その可能性が強いです。 これ単体ではどうしようもないと言う事と、大まかな流れは見えてきました。 >そこら辺は機能設計書があるのなら、そこに書いてあるはずです。 >(手抜きの設計書でなければ。) 設計書…あれば良いんですけどね… ただ漠然と機能が書いてある設計書(要求定義に近いですかね…)のみで、プログラムの設計書はありません。 実際に動作させてみれば確認もできるのですけれど、データベースもまだ全然なんですよね… まぁ上に『何とかしてくれぇ』と言うための資料でも書き並べてまとめてみます… 回答ありがとうございました。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.5

関数の呼び出し関係だけでも把握するのなら、以下のようなソフトにぶち込んでみるというのは? EPTREE 1.09d http://www.vector.co.jp/soft/win95/prog/se119765.html CEDIT for Windows95/98/NT 5.07 http://www.vector.co.jp/soft/win95/prog/se105857.html C++ソ-スファイル解析ツ-ル Cmap+ 5.60 http://www.vector.co.jp/soft/win95/prog/se147595.html

参考URL:
http://www.vector.co.jp/soft/win95/prog/se119765.html, http://www.vector.co.jp/soft/win95/prog/se147595.html
noname#6248
質問者

お礼

回答ありがとうございます。 なるほどツールを使えば上手くいきそうですね。 その線で探ってみます。

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.4

#2の方がおっしゃるように、多分WindowAPPでしょうね。 ただ、どこから始まっているかわからないのならその旨を上司に聞いた方が早いです。 人間はコンパイラじゃないんですから、人の作ったソースのみをおっかけて処理を完全に理解することは不可能に近いです。 上司に聞くポイントをまとめて、これらの回答をください!と直接言った方がよいです。 (その上司の人格にもよりますが、私は質問をどんどんしてくれる部下がいるととても頼もしく感じて嬉しいです) ポイントの例として ・Startはどこからか? ・このプログラムは何をするものなのか? ・このプログラムの中でどこの処理を理解すればよいか? ・また、どれくらいの期間で理解すればよいか? ・それを理解したあと、その後の作業で自分はどのような担当になるのか? (そのプログラムをどのように生かした作業をするのか? 効率向上、不具合解消、VerUP、似たような処理のものを新規作成) ・このプログラムを理解するのに最適な資料はないか? #1の方がおっしゃるように「丸投げ上司」は無能です。 でも、問題を一人抱えてしまう部下も周囲から見たら無能扱いになってしまいます。 問題があったら上司に相談する。このスタンスを守っていれば大丈夫です。 質問をどんどん投げるのはOKですが、同じことを何度も聞いたり、 調べればすぐわかることをすぐに質問したりするのはNGですね。 ちなみに… > 正直帰りたくなってきましたが…帰っちゃっていいものかな… 契約違反にならない&予定・実績がオンスケなら帰ってもいいんじゃないですか? 明日から連休ですからねw

noname#6248
質問者

お礼

具体的な例まで頂きありがとうございます。 『スタートはどこか?』以外は一応の資料はあるんですよね、要求&機能のみですが… 私の判断なのですがおそらく各々DLLを作っているのかなぁと言う所で落ち着いています。 だから関数のみで肝心の実行部分が不明なのだと… 守秘義務の関係上根幹のexeを作っている部分は見られなくとも、呼び出す方法等の仕様書が欲しかったですかね… 一応フレックスで15時までコアタイムなので帰ろうと思えば帰れますが… とりあえずは呼び方等、質問事項をまとめて帰ろうかと思います。 でないと週明け路頭に迷いそうなので… 回答ありがとうございました。

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.3

一応…プログラムがどのように動いくか解析して 恐らく、足りないモジュールがあると思うので それが指摘できる程度には読んでおきましょう 完全な正しいソースがあれば、そこからプログラム仕様書はかけますから… めちゃくちゃ面倒ですけど

noname#6248
質問者

お礼

>足りないモジュールがあると思うので これが呼び出し元なのでしょうね。 やはり読み取るしかないのでしょうね… ファイル数にして20数個だからまだ軽い方で素から何とかしてみますか… 回答ありがとうございました。

  • mld_sakura
  • ベストアンサー率20% (264/1282)
回答No.1

あなたが悪いのではなく、指示したひとが悪いです。 一般的にソースの解析を行うには最低でもプログラム仕様書が必要です。 いきなりソースと機能設計だけなら、ほんとに「見るだけ」でいいのでは?? まぁ上司が新人に仕事を与えるワザだとも思えます。

noname#6248
質問者

お礼

回答ありがとうございます。 確かにその通りなんですよね。ですがその人ではなく、その上がマズイというが私の考えです… のんびりとC++のサイトでも眺めつつ時ガ来るのを待ちます。 やっぱり今は学ぶべき期間なのでしょうね…

関連するQ&A

  • ソースコードの読み方

    ソースコードの読み方 いま基幹システムのプログラム開発の仕事をしてるんですが、 今度の仕事ではソースコードを読んで、 プログラム全体を理解することが求められてます。 で、質問なんですが、ソースコードと詳細設計書を読んで そのプログラムの一個一個の処理とその目的を、 完全に理解するにはどうすれば良いでしょう? いま現場にはそのシステムの設計についての知識のある人はおらず、 (したがって人に聞くことは出来ない。) 前任者から一切の引継ぎを行えず、 手元の資料はあくまでソースコードと詳細設計書のみです。 おまけに、この作業担当を一人でやらなければなりません。 したがって、 ソースコード解読のノウハウを伝授して頂きたいです。 いまのところ、ソースコードの処理の流れ自体は プログラムの概要説明等からなんとなく掴めるのだが、 (そんなの当然ですが) ある一つの処理について、 その処理をしたところでそれがどんな要件を満たしているのか? ってことがわからないことがよくあります。 例えば、いま見てるプログラムでは、 タイムスタンプのためのテーブルを読み込んで、 処理の制御をするといった事があるのですが、 いまの能力だとそのテーブルの時刻が、 何を意味しているのか掴む事が出来ないとか、 そういうこまごましたナゾが沢山あって、それらが積み重なって、 プログラムに対する理解というのが不完全なものとなっています。 コーディングの技術的な事柄に関しては、 ほかの現場にいる先輩に聞いてみたり、 何とか書物等で問題を解決するものという前提で、 どのようにすればプログラムの詳細な業務要件を掴む事が出来るか というところまわりをご教示頂けると幸いです。 回答をお待ちしています。 よろしくお願いします。

  • ソーストレースの仕方

    現在、業務でVBのソースを見ています。 ソースからプログラム構造や動作を理解しようと思い ソーストレースを試みているのですが、 思うように成果を挙げることができません。 ソーストレースをするにあたり、 どのような手順を踏まえて行えばいいのかを 知りたく、掲示板に記載を致しました。 自分が行っているソーストレース方法は、 VB6.0を使って、プログラムを1ステップずつ実行し、 動作を確認しております。 ※尚、詳細設計などの仕様書は一切ない状態です。 ※ソースコードのみでプログラム構造や動きを確認します。 以上です。

  • バッチプログラムについて(編集不可・ソース参照不可)

    あるバッチプログラムを作成しました。 upload.bat:ファイルをアップロードするプログラム そのバッチプログラムをユーザに配布して使用してもらう予定でおりますが、セキュリティ等の観点から ・そのソースを編集できないようしたい ・ユーザからはソースを見れないようにしたい と考えております。 また動作としては、 ・アイコンをダブルクリックすれば処理が走る ・タスクに登録すればスケジュールで処理を走らせる事が出来る といったようにbatファイルと同じように動くようにしたいと考えております。 何か良い方法はありますでしょうか? 宜しくお願い致します

  • AWT Frameを利用するプログラムのmainメソッドを含むクラスについて

    AWTのFrameを継承してWindowプログラムを作成する際に、どんな書籍のサンプルプログラムを見ても、メインクラスがFrameを継承し、その中にmainメソッドが有って、そのmainメソッド内で自分自身のクラスのインスタンスを作成してshowする、といった事を定石のように行っています。 しかし私が思うに、mainメソッドなど含まずFrameを継承してWindow周りの処理を純粋に行うクラスを作成し、プログラムのメインとなるクラス内のmainメソッドからFrameを継承した別クラスのインスタンスを作成・showする方が、よほどスッキリして理解し易いような気がするのですが、どうなんでしょ? そういったサンプルプログラムを作成してみましたが問題なく動作します。ただそういう事をやっている他のサンプルソースが見当たらないので、何となく不安です(笑)

    • ベストアンサー
    • Java
  • ブラウザ内でhtmlソースがレタリングされるまで

    ブラウザ内でhtmlソースが解析からレタリングされるまでの仕組みがよくわかりません。 http://www.atmarkit.co.jp/fwcr/rensai/imasara11/imasara11_3.html ↑ここのサイトの図2の説明では 「パーシング(解析)」→「整理」→「レンダリング(表示)」 という工程で処理される流れになってますが (1)htmlソースコードの上から順に一要素ずつ上の工程に流すのか (2)htmlソースコード全体を一度まるごと解析し終えてから、次の整理の段階に進むのか よくわかりません。

    • ベストアンサー
    • HTML
  • このソースコードの意味が分かりません

    「次の演算を記載順に処理し、演算の結果を出力するプログラムを作成しなさい。ただし、出力は10^-7までとする。プログラムは複数のクラスを定義して作成すること。1-1/2+1/3-1/4+・・・・・+1/9999-1/10000」という問題です。 import java.math.BigDecimal; class Sample{ public static double a(){ double sum=0; for(int i=1;i<=10000; i++){ double div=(double)i; if(i%2==0){ div*=(-1); } sum+=1/div; } return sum; } } class Sample17{ public static void main(String args[]){ System.out.print(ensyu.a()+""); BigDecimal bi = new BigDecimal(String.value0f(ensyu.a())); double sum0 = bi.setScale(7.BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(+sum0); } } 学校の先生に何回も質問しにいってようやく実行できるソースコードは分かったのですが どういう処理をしているのかがよく理解できません。理解できないところを細かく書こうともした のですがそれさえも分からない状態です。 どうか皆様の力をお貸し下さい。よろしくお願いします。

  • 優秀なソースを見られるサイト

    プログラムの勉強をかじり始めた者です。独習を進めるにつれ、自分の思いを「形にする」事の難しさをホトホト感じております。どこかに優秀なソースを見て勉強できるサイトをご存知の方ご教示ください。よろしくお願いします。

  • RPGでプログラムからソースファイルに復元したい

    最近、RPGプログラムを使う事になったので、 プログラムの処理内容を見たいのですが、 コンパイルした後のプログラムファイルしかなく、 ソースファイルがない状態です。 プログラムファイルから、ソースの中身を見る方法がもしあれば、教えて頂きたいです。 よろしくお願いします。

  • C言語ソースコードの解析

    私は現在組み込みのプロジェクトに参加おります、新米プログラマです。 既存の処理を理解したうえで設計しなければならないのですが、 元のソースコードに対して設計書が1つもなく、 ソース、ヘッダともにコメントなし、と言う状況です。 動作環境が無いので、ソースコードを解析して動作を理解しようとしています。 しかし、やっていることが複雑でなかなか進みません。 ■ポインタ/関数ポインタの嵐で、ポインタの実体を追っていくと、  30~40階層ほど上まで見なければならない。  (関数コールに、コールバックに、メッセージのやり取り)  関数ポインタを32bit整数の変数にキャストして代入し、  整数から関数ポインタに直したりしている。 ■構造体のメンバに他の構造体へのポインタがあり、  さらにその構造体は他の構造体のポインタを持っていて、  そのポインタが他の構造体の・・ などなど。 こういう複雑な他人のコードをどういう風に解析していますでしょうか? ご教授願います。

  • 例外処理をするソースコードについて

    例外処理するソースコードについて質問があります。 まず例外処理される前のファイルのソースコードを見てください。 public class JTest13 { public static void main(String[] args) { System.out.println("実行開始"); long lngTmp; //以下を実行した瞬間に引数が無いか、整数に直せなかったら例外がスローされる lngTmp = Long.parseLong(args[0]); //割り算を実行する(小数点以下の数値を管理する必要がある)ため、double型に変換します System.out.println(Double.parseDouble(args[0]) / 2); System.out.println("tryブロック終了"); System.out.println("実行終了"); } } ここでアルファベットを入力すると、 実行開始 Exception in thread "main" java.lang.NumberFormatException: For input string: "a" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Long.parseLong(Unknown Source) at java.lang.Long.parseLong(Unknown Source) at JTest13.main(JTest13.java:20) これで例外処理クラスがNumberFormatExceptionだと分かるんですが、 こういう結果がでなければいけません。 実行開始 例外:java.lang.NumberFormatException For input stirng:"a" 引数を整数で入力して下さい。 実行終了 これで問題なのがmainメソッドで例外処理するのではなく、整数チェック用のメソッド内でエラー処理するプログラムを作らなければならない事です。 変数がargs[0]なのでどうやってメソッドを作っていいのか分かりません。 ヒントだけでいいので、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう