• 締切済み

他人が作ったプログラムのメンテナンス方法

他人が作った、VisualBasicで開発されたスタンドアロンの会員管理アプリケーションソフトを、メンテナンス&カスタマイズすることになりました。 良くあることなのですが、その作った張本人は、退社して連絡が取れません。仕様書類は、一切なく、変数名管理表、フローチャート等は、当然、一切ありません。おまけに、コードには、一切コメントがありません。 上司と顧客のカスタマイズ要求も的を得ず、私自身の改良案も思いつかず、 コードの一部をいじくると全体にどんな影響がでるか分からず、手の出しようがありません。 とりあえず、今は、何らかのプログラムの流れが分かる図を書き起こそうと 思うのですが、どのような図を書き起こせば良いか分かりません。 また、私の実力では、何図といわれても、すぐに書き上げるだけの実力がありません。 とにかく、イベントドリブン型のVBのコードでは、上から下へ、素直に、イベントプロシージャ、サブプロシージャが記述されておらず、コードの判読に大変な時間がかかる上に、なかなか、理解できません。 どなたか、良い解決方法に限定せず、ご自身の経験談でも、よいので、回答いただける幸いです。宜しくお願いします。

みんなの回答

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.8

もう、半リタイヤなので 大変ですね、コメントもまともにかけない馬鹿のプログラムをいじるのは 基本として、細部から見ていった方がいいですよ。少なくとも全体像を把握することなどは二の次です。 実際問題として、顧客の要求のほとんどは細部の改良ですから、そのためにどこをいじるかに特化して考えた方がよいです。それですまないようなら、プロジェクトを見直して、組み直した方が早くすむ(能力にもよります)ことも珍しくありません。 イベントドリブンであれば、少なくともイベント単位では独立したプロシジャになってませんか、もしなって無いなら組み直した方がいいと思いますね。 まあ、非道い目に遭っているのだと思い同情は禁じ得ませんが。

kazkoido
質問者

お礼

適切なアドバイスありがとうございます。 「顧客の要求のほとんどは細部の改良ですから」は、目からウロコでした。 全体像の把握は、上司の指示であって、顧客の本当の要求では、ありません。 世の中一般に言われていることと、上司が言うこととが同じだから、 それを守っていた自分がバカみたいです。

全文を見る
すると、全ての回答が全文表示されます。
  • process9
  • ベストアンサー率29% (81/272)
回答No.7

process9です。 私のアプローチ方法を書きますね。 まず、外部設計書を起こします。 まず、画面一覧と帳票一覧を作成します そのあと機能一覧(ボタン、ファンクションキー毎ぐらいでいいでしょうね)を書き出す。 これら機能がなんのためにあるかをその一覧に書き出す。 わからない場合は、ユーザなり上司なりに聞きます。 (この帳票はなにに使うのですか?みたいな) そのあと各画面と帳票のIN/OUTを書き出します。 具体的には、 どうせ、初期設定ファイル、DB(SQL)、画面入出力項目、帳票出力項目ぐらいなので、  ・各初期設定ファイルの設定項目が設定が何に使われているか。  ・DBと画面・帳票の入出力の対応 を調べて書き出します。 このときソースは、あくまでIN/OUTを調べるために読む感じですね。 DBのER図を書きます。ここは、SQLと機能から類推します。 (ちょっと経験値がものいうところですね。) ここまで、整理すると、システム全体像がようやく見えてくるので、 ここから、上記機能一覧で重要な機能(ボタン?)から、 イベントスタートからソースを追っかけて詳細解析します。 これだとプログラムの上から下への追っかけができるはずです。 デバッグ実行で1行1行追っかけていけばいいはずですから。 その機能に使われている関数の目的、IN/OUT、共通関数の使用、グローバル変数の使用の有無などですね。 これを機能一覧にリンクさせる形式で書き出します。 ここまでやり終えるとほぼ全てが見えます。 システム規模にもよりますが、20画面10帳票なら 40H もあれば つくれるでしょう。 メンテナンスはともかく、カスタマイズになると ここまで把握しないと触れないはずですし、テストケースが漏れてバグが頻出するはずです。 かならず、ソースの詳細解析は後回しにしても基本設計書(外部設計書)に近いもの作る。この部分で顧客からお金とれないし、時間もとれないといわれるでしょうけど、ソースから全て全体を頭で把握しようとするよりは格段に早いでしょう→メンテナンスやカスタマイズが早くなることで相殺されます。 これが、私の経験上、遠回りのようで最短の道ですね。 また、次の人への引継ぎがスムーズに行えるメリットもついてきます。 (当然カスタマイズ部分の設計書も作るという前提ですが・・・)

kazkoido
質問者

お礼

大変、丁寧で、細かいご指摘・ご提案、ありがとうございました。 私のスキルでは、だいぶ時間がかかりそうですが、遠回りのようで最短の道を探ってみたいと思います。 上司にも、顧客にも、基本設計書(外部設計書)の重要性も、ニーズも無いのですが、私自身のスキルアップと、より高給なところへの転職ために、 作成したいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • don_go
  • ベストアンサー率31% (336/1059)
回答No.6

私の場合は、他人のプログラムのメンテナンス&カスタマイズ は数多くこなしているので、大抵のプログラムはなんとか なるという感覚でいますが .... コメントの無いプログラムの場合には、とりあえず 1)モジュールの処理内容、引数、戻り値等のコメント を入れる。 #モジュール内の処理の詳細が判らなくても、何の処理 #をしているモジュールか概要が判るだけでも、全体を #把握する助けになります。 2)長い処理の場合には、ブロック毎に適度に改行か、 コメントで仕切りを入れて、読み易くする。 例) '===================================== '------------------------------------- '------------------------------------- 3)解析の済んだ箇所、及びすぐに判ったところから 随時コメントを入れる。 とにかく、最初のうちは細かい所より、全体的な流れが どうなっているかを把握するようにしましょう。 そうしていくうちに、細かいところも次第に見えてくる はず.....見えたら良いですね...(^_^;A 思いきって、VBのベテランがいるソフト会社に外注で依頼 した方が早いような気がします。

kazkoido
質問者

お礼

大変、丁寧で、細かいご指摘・ご提案、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

とりあえず 関数、イベント APIを使っているなら Apiの定義部分を読んで どれを使っているか確認。 DBもADOかDAOどっちを どっちを使っているか確認。

kazkoido
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

 VB+WIN32API+データベースの組合せですか。ハードルが高いですね。VBの標準機能だけなら楽なのにね。  そうですね、、最善策ではありませんが、フォーカスを絞りましょう。  結果的に自分の首を絞めかねませんが、改良の対象部分の抽出を行ないます。ただスパゲッティAPらしいので、それすら難しいかもしれませんね。  対象を絞る事で、まず作業量が減らせますよね。  それでも1フォームに50のアイテムなんて聞くと、嫌になりそうですが、、進めるにはメモ資料を作りながら機能分解しないといけないでしょうね。    それからウルトラCで、新規開発の提案ですね。  改良に見込み工数と新規開発の見込み工数の比較、そして新規開発におけるメリット(例えばWEBベースにしてブラウザで利用できる、またはOSやツールの老朽化で今後刷新が避けられないなど、、ですね)を添えて提案ですね。  VBもVB.NETになり機能が追加されているでしょうから、機能・工数・利便性・今後の運用期間などから新規開発の方が効果が出るなら、提案可能です。

kazkoido
質問者

お礼

ご回答ありがとうございました。 メモ資料をつくりながら、機能分解に精を出したいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • ipsum11
  • ベストアンサー率21% (55/251)
回答No.3

私の場合は、ひたすらデバック実行! 何度も繰り返しているうちに何をしている処理なのかわかるようになり、その都度ソースにコメントを書き加えていきます。

kazkoido
質問者

お礼

回答ありがとうございます。 ですが、もうそれは、やっているのです。 やっているうちに、「自分が馬鹿だから、こんなに時間が、かかっても、先に進まないんじゃないか」という徒労感・情けなさ・失望感・悲観する気持ちが湧き出てきて、その一方で、「最初に作るときに、VBなんだから、外部設計書は簡単につくれるし、スタンドアロンだから、後々のメンテナンスのための書類くらい、簡単に作れたのに、どうして作らなかったんだぁ」という怒りにさいなまれながら、作業をしています。 「こんな職業につくんじゃなかった」とも思います、だから、OKWaveで実践的なテクニックや体験談を聞きたかったのです。

全文を見る
すると、全ての回答が全文表示されます。
  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.2

よくありますね、そういうの。 僕も色々苦労してきました。 今更仕様書を起こしても苦労するだけだし、またそれのメンテナンスに時間を取られてしまうので何か資料を作るのは諦めましょう。 一番いいのはソースをじっくり眺めて全体を把握することですが、コメントがないプログラムは他人が見るとホントに複雑ですね。 そこでポイントを絞ってみていくといいでしょうね。 今回修正する機能はどこのソースに当たるのか。 「A画面のボタンを押した時の機能」なら、そこのソースに行き着くのは容易ですよね。 そしたらそこのソースにだけ集中してください。 そしてそこの箇所での修正方法を考えてください。 もし修正箇所にグローバル変数が出てきてしまったらプロジェクト全体に検索をかけて、その変数を使用している箇所および処理の内容をひとつずつ追っていくしかありません。 と、まあ文章するまでもないことですが、こんな感じでやっていくしかないと思いますよ。 あとは幸いにもVBなのでデバッグ機能を多いに利用してソースの動きをじっくり把握してみてください。 それから最初に「資料は作らない」と書きましたが、余裕があれば何かしらまとめておくと、あとで自分のためになるかもしれません。 自分用のメモ程度でいいので、余裕があればお試しください。 では、がんばってください。

kazkoido
質問者

お礼

回答ありがとうございます。 1フォーム画面に、コントロールが50近くついているものもあり、一つの機能(1回の操作)に、集中して、そのソースだけを追いつづけるのも、やってみたのですが、あまりの徒労感に、仕事を放り出したくなる感じです。 普通、分からないことが分かるようになると、「喜び」を感じるのですが、 現在の作業には、それがありません。分かってみると、「(個人的なプログラマーの好みの差があるのでしょうが)どうして、これを実現するのに、こんなスパゲッティなことをして、メンテナンスしづらく作っているんだ」という「怒り」しか、覚えません。でも、ttyp03さんのように、地道にいくことが近道なのでしょうか。僕の性格がひん曲がっているのが、良くないのでしょうか。僕の個人的な印象では、自分で作ったアプリケーションではないので、標準モジュール部で、行なわれている処理に関しては、詳細な資料を作る必要があると感じています。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

まずは、、以下、こんな感じでしょうか? (1)作成された関数を全て洗い出す。 (2)概要のフローをメインから追う。APの機能と関数間の関係を把握する。 (3)関数のIN/OUTの確認。→関数の機能とエラー処理、入出力を把握する。 (4)関数の機能の確認。→場合によっては『関数別にソースファイルを分けて』動作確認する。

kazkoido
質問者

お礼

非常に簡潔で分かりやすい、ご指摘・提案をありがとうございます。 但し、私の能力では、VB+WIN32API+データベースの組合せが、複雑すぎて、うまく切り分けが出来ません。なぜ、WIN32APIの機能を、ここで使っているのかを知りたいがために、ヘルプファイルを使うのですが、WIN32APIのヘルプファイルが現状では、インストールされておらず、原因がわかりません。RDBの構成も、重複が非常に多く、なぜ一つの操作で3つのテーブルに書き込みが必要なのか、判断がつかない場所が多くあります。 「関数機能の切り分けから、デバッグを始めてみてはどうか」というご提案にうまくのって問題の解決に近づければ幸いと考えるのですが、何か良い方策がありましたならば、さらに、アドバイスをいただけると幸いです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラムを入れて他人に見られないようにするには

    PCはアドミニのみで使ってって、プログラムを入れてもコントロールパネル→プログラム追加削除に表示しないようにする方法ってありますか?

  • メンテナンス方法

    LP-S7100 を使っています。 カラー印刷が綺麗に印刷されない メンテナンス方法をご存知の方お教え下さい。 ※OKWAVEより補足:「EPSON社製品」についての質問です。

  • メンテナンス方法を教えて下さい

    リョービイクシオーネF300RFをオークションで落札したのですが、添付品などが何もない為メンテナンス方法がわかりません。教えて下さいお願いします。

  • メンテナンスの方法を

    写真集を作成する為今年2月にPIUSPRO-10Sを購入しましたがキャノンには両面用紙が無くコクヨのA4両面写真用紙を使用しています。当初は問題なく機能してましたが600枚位から上段50mm位に横に両サイドに筋が入る様になりました。どこかクリーニングが必要と思いますがマニアルが無く苦慮してますのでどうかお教え願います、さもなく入院が必要なのか!! 願いします ※OKWaveより補足:「キヤノン製品」についての質問です。

  • 他人を見極める方法。

    皆さんは他人をどの部分でどのように判断していますか?深く関わっていく前の段階でです。 「顔」、「表情」、「雰囲気」、「声」、「振る舞い」、「服装」、「髪型」、「体型」 などなど。色々とあるかと思います。人によって多少違うと思います。判断の仕方が違うかもしれません。 僕は上記に挙げた要素を総合的に見て、どのような人間か判断しています。特に顔と声と服装を重視しています。 人は他人に自分を見せる際、その対象によって少なからず演技している部分がありませんか?そこを判断してしまうと騙され誤ったイメージを持ったままその人に接してしまうことになりますよね。間違った固定概念を入れてしまいます。 何事も固定概念を入れてしまうのは危険です。だからといって固定概念を入れないのも難しいと思います。ですから出来るだけ正しく他人を見る視点を知りたいです。 関わっていくうちにその人のことを徐々に解かっていくのが普通なのだと思います。深く関わらないまま他人を知ろうなど、理想を追い求めすぎなのかもしれません。 だからある程度で十分です、関わる前から他人を解かりたいんです。出来るだけ正しく。少しでも勘違いを減らすために。自分なりの人を見る一番正しい視点を見つけていきたいです。 人と人とのいざこざは相手のことを理解してなかったから、もしくは相手を勘違いしてしまったから起きることだと思っています。 皆さんの相手と関わっていく前に相手を判断する視点がどのようなものか知りたいです。 自分は人をみる目があるんじゃないかと思う方おりましたら。そうでなくても経験談、意見など何でも大歓迎です。お手すきでしたら回答よろしくお願いします。

  • 他人とうまく付き合う方法

    私はうつ病ということもあり今は仕事をしていません。 そういうこともあり友だちがあんまりいません。 同級生とかでメールでやりとりする友達はいますが、一緒に遊びに行ったりする 友だちがいません。 最近まで親しい友だちがいたのですが、腹が立つことが続き喧嘩みたいになって 絶縁状態になってしまいました。 どうも私は物事を白か黒かで判断するところがあるようで 他人の嫌なところに気づくとその人自体を嫌いになってしまったりするようです。 仕事に行っても人付き合いでトラブルをかかえて辞めてしまうことが多かったです。 こんな私が他人とうまく付き合うにはどういうことに気をつければいいでしょうか?

  • 他人を裏切る方法

    いい人(子)でいるのは疲れるんです。 わかっているんです。 神経がすでに壊れているんです。 だいぶ回復してきましたが。 どうも人間関係を気にしすぎるようです。 リストラされない程度に、(ここ重要です) 他人の期待や信頼を絶妙に裏切るにはどうしたらよいのでしょうか。

  • 他人を太らせる方法はありませんか?

    性格が悪いことは百も承知です。 太らせたいのは30代の会社の女性です。 この女性は全ての男性に思わせぶりな態度を取って、いつまでもモテていようとする女性です。 見た目や性格は大人しい印象ですが、20代の女性への対抗心が強く、常に自分が特別扱いされるように、男性の気を引く努力を怠りません。 私は職場に彼氏がいるので、正直心配で仕方ありません。魅力的な女性なので。 この女性も私たちが付き合っていることは当然知っていますが、そんなこと関係なしに 私の彼氏にも思わせぶりな態度を取っています。 正直、「私の彼氏にだけはやめて~~~」とその女性に言いたいところですが、 先輩なので言いづらいし、言ったところでたぶんやめてはくれません。 その女性は最近、中年太りの時期に突入したのか、痩せたり太ったりを繰り返しています。 とにかく、その女性にもっともっと太ってもらいたいです。 でもダイエット中なので、食べ物を与えてもあまり食べないし、食事に誘ってもついてきません。 何かもっともっともっと確実に、太らせれる方法はないでしょうか? 間接的に食欲が沸くようにできる方法とかあったら教えてください。

  • 他人に怒ってることを悟られないようにする方法

    タイトルのとおり、他人に怒ってることを悟られないようにうまく対処する方法ってありますか? 31にもなってこんな質問する私がバカですが。 今日、母ともめた際、 ・敬語を使う ・余計な独り言を言う ・溜め息をつく との理由で怒っていることを見透かされました。 こんな感情的な性格を直せないなら、一度死んだ方がマシでしょうか?

  • 他人を蹴落とすのに一番有効な方法

    って犯罪者にしたてあげる事ですよね?