#稼働中システムのコードリーディングについて。
現行稼働中のシステムについて、引継ぎ作業を行っているのですが、
既存のソースが大変汚く読み解くのに苦労しています。
該当のコードは以下のような特徴を備えています。
- 仕様書も要件定義書も存在しない。
- 当然他のドキュメントも存在しない。
- どう動くべきなのか知っているのはお客様のみ(またはお客様も分からない)
- 変数宣言が強制されておらず、未宣言の変数だらけ。
- 宣言されているが、未使用の変数が沢山残っている。
- いつコメントアウトされたか分からないコード片が散乱している。
- 一つの関数内に様々な処理が詰め込まれている。
- コードのブロックが表現されておらず、コードとコードの間に1行ずつ空行がある。
- 至る所でexitされている。
- コピペしたであろうコードが大量にある。
- IFやSELECTのネストが深い。(最低3~4ぐらい?)
- インデントがずれている。
- エラーは全て同じメッセージを表示して握りつぶす。
- 至る所でDBへのコネクションを生成している。
- 同じ変数をやたらと使い回す。
- 変数名は2~3文字の省略形
- DBのカラム名はローマ字省略形
- etc...
稼働中のシステムなので具体的なコードは書けませんが、
例えば以下のようなコードです。
VBA
1 2private sub cmd1_Click() 3On Error Goto Err 4 5変数名1 = Function1 6 7IF 変数名1 = -1 then 8 9 変数名2 = コントロール1.Value 10 11 SELECT CASE 変数名2 12 13 CASE -1 14 Goto Err 15 16 CASE 1 17 18 IF 関数名2 = 1 then 19 20 ---何かの処理が数十行書かれている--- 21 22 IF コントロール2.value = 1 23 24 exit sub 25 26 Else 27 28 ---何かの処理--- 29 30 End IF 31 32 IF コントロール3.value = 1 33 変数名4 = コントロール.value 34 SELECT CASE 変数名4 35 36 CASE 1 37 Sub1 38 exit function 39 CASE 2 40 SQL = "DELETE ~~~~~~" 41 42 Docmd.RunSQL SQL 43 44 SQL = "INSERT INTO ~~~~~~" 45 46 Docmd.RunSQL 47 48 Else 49 50 ---何かの処理--- 51 52 End IF 53 54 Else 55 56 ---上の処理のコピペ(一部だけ違う)--- 57 58 Sub1 59 60 exit sub 61 62 End IF 63 64 CASE 2 65 ---何かの処理--- 66 ---以下続く--- 67 68 End Select 69Exit Sub 70Err: 71 MsgBox "エラーが発生しました。" 72 Exit Sub
正直どこから手をつければ良いのかさっぱり分からない状態です。
皆さんはこういったコードを読み解くとき、どのような方法を採用されていますか?
すみません。泣いていいですか?
前任者よりも前の人が作ったシステムってことでしょうか? 前任者はどう管理していたんでしょうか?
多数の開発者の手を経て複雑怪奇なものになっていったのかなぁ?と思いますが...。
まさに秘伝のソース状態になっています。
VBAなのでバージョン管理というかはファイルやフォルダに日付を付けて管理という感じになっております...。
> VBAなのでバージョン管理というかはファイルやフォルダに日付を付けて管理という感じになっております...。
バージョン管理ではなく、運用管理という意味で質問しました。ドキュメントもない中で今まで使用者からの問い合わせや、不具合発生時の対応は一体どうされていたのか??と。正直、問い合わせや不具合発生もないのであれば様子見するのもありなのではと。。質問者さんが引き継いだ経緯が不明なので無責任な独り言ですが。
なるほど。
運用管理のほうでしたか。
システムの稼働期間自体は長いので、致命的なバグなどはないんじゃないかと思われるのですが、
定期的に数字がおかしいだのなんだのとちょこちょこ問い合わせはある状態です。
その際はお客様に不具合の発生状況などをヒアリングし、該当しそうな箇所のコードを読み解いて回答するような形を取っています。
その中でほぼ全てのコードがこんな感じだったので、皆様どんな風にコードを読んでおられるのかなぁと思いまして、質問させて頂いた状態です。
回答6件
あなたの回答
tips
プレビュー