1.1 規模
| 指標 | App (実測) | Doc (実測) | TOTAL | 一般指標 (VB.NET業務系) | 評価 |
|---|---|---|---|---|---|
| LoC | 128,420 行 | 980 行 | 129,400 行 | 小=0〜5,000 / 中=5,001〜20,000 / 大=20,001 以上 | 大: 中規模の業務系目安を超える |
| ソースファイル数 | 1,024 本 | 12 本 | 1,036 本 | 小=0〜50 / 中=51〜200 / 大=201 以上 | 大: プロジェクト数が多い |
.vb ファイル数 |
612 本 | 0 本 | 612 本 | 小=0〜200 / 中=201〜600 / 大=601 以上 (一般目安) | 大: VB 画面/ロジック中心 |
Windowsフォーム数 (.resx) |
168 本 | 0 本 | 168 本 | 小=0〜40 / 中=41〜150 / 大=151 以上 (一般目安) | 大: 画面数が多い |
| App/Doc 平均ファイルサイズ | 5.4 KB / 3.1 KB | 3.1 KB | 5.3 KB | 小=0〜2.5 KB / 中=2.6〜6 KB / 大=6.1 KB 以上 | 中: レビュー可能な範囲 |
※指標値は業務系 VB.NET の一般的規模目安。サンプル値は営業資料用の仮置きであり、実測値ではない。
モジュール別規模 (App/Doc 区分)
| モジュール | 区分 | 総ファイル数 | LoC | .vb 本数 (行数) |
.resx 本数 |
.vbproj 本数 |
主な役割 |
|---|---|---|---|---|---|---|---|
| APP | App | 520 | 68,300 | 318 (42,800 行) | 98 | 26 | 受注・請求・在庫の WinForms 画面群 |
| CORE | App | 210 | 31,900 | 168 (21,600 行) | 12 | 10 | 業務ロジック/ドメイン層 |
| BATCH | App | 126 | 14,700 | 72 (9,300 行) | 0 | 8 | 夜間バッチ/集計/取込 |
| SHARED | App | 168 | 13,520 | 54 (7,900 行) | 58 | 12 | 共通 UI/ユーティリティ |
| doc | Doc | 12 | 980 | 0 | 0 | 0 | 説明資料/設計補助 |
| TOTAL | 1,036 | 129,400 | 612 | 168 | 56 |
考察
1.2 アーキテクチャ
1.2.1 全体構成図
1.2.2 依存関係
| カテゴリ | 採用ライブラリ/技術 | 出現 | 所見 |
|---|---|---|---|
| DB アクセス | System.Data.SqlClient / Dapper | 8 プロジェクト | ADO.NET と軽量 ORM 併用。接続管理の共通化が鍵 |
| UI/帳票 | CrystalDecisions.* | 3 プロジェクト | ランタイム依存あり。配布手順を明文化 |
| JSON | Newtonsoft.Json | 5 プロジェクト | バージョン差分による互換性に注意 |
| 暗号 | System.Security.Cryptography | 2 プロジェクト | 古いハッシュの利用有無を確認 |
1.3 構造解析
1.3.1 複雑度
| 複雑度帯 (近似 CC) | ファイル数 | 総複雑度スコア | 比率 | コメント |
|---|---|---|---|---|
| 小 (<=10) | 410 | 1,820 | 67% | 単純な CRUD 画面が中心 |
| 中 (11〜25) | 140 | 2,520 | 23% | 条件分岐が多い画面/バッチ |
| 大 (>=26) | 62 | 3,900 | 10% | 複雑な帳票/集計ロジック |
APP\Sales\frmSalesSummary.vb (2,140 行、近似 CC=140)。集計と帳票出力が混在。If/ElseIf/Select Case/For/While/Try/Catch のキーワード数で近似。1.3.2 コード品質
| 指標 | 件数 | 抽出方法サンプル | コメント |
|---|---|---|---|
| 未使用変数 | 82 | Dim 宣言後に参照されない変数 |
リファクタリングで削減可能 |
| Null 参照の可能性 | 210 | CType/DirectCast でガードなし |
If Is Nothing の共通化が必要 |
| デッドロジック | 6 | #If False ブロック |
仕様確定後に削除推奨 |
| メモリリーク懸念 | 12 | IDisposable 未解放 |
Using の徹底 |
| スレッド安全性 | 4 | Shared フィールドの非同期アクセス |
SyncLock 導入 |
| その他 (例外握り潰し) | 18 | On Error Resume Next |
ログ付き Try/Catch へ変更 |
総評: 重大な欠陥は少ないが、型安全性と例外処理の標準化に改善余地がある。
1.3.3 セキュリティリスクの検出
| リスク | 件数 | 抽出例 | コメント |
|---|---|---|---|
| SQL インジェクション懸念 | 24 | 文字列連結で SQL を構築 | パラメータ化を徹底 |
| ハードコードされた秘密情報 | 3 | app.config の固定 API キー |
秘匿情報の外出しが必要 |
| 不適切な入力検証 | 41 | TextBox.Text を未検証で利用 |
バリデーション層を追加 |
| 脆弱な暗号方式 | 2 | MD5 ハッシュ利用 | SHA-256 へ移行 |
| その他 (平文通信) | 5 | http:// 利用 |
TLS へ切替 |
総評: 重大なインシデント要因は限定的だが、SQL と秘匿情報の扱いは優先改善領域。
1.3.4 非推奨 API や非推奨メソッドの検出
| API/コンポーネント | 出現 | 影響と提案 |
|---|---|---|
| Microsoft.VisualBasic.Compatibility.* | 6 プロジェクト | .NET 5+ では非推奨。標準 API へ置換 |
| Oracle.DataAccess (ODP.NET unmanaged) | 0 | 該当なし |
| PowerPacks | 2 プロジェクト | 代替コントロールへ移行推奨 |
1.3.5 コード重複度
.vb ファイルのハッシュ比較で 28 グループ / 94 ファイル (15.4%) が重複。AssemblyInfo.vb 系で 12 ファイル。1.3.6 コーディング規約違反
| 検出項目 | 件数 | 代表ファイル | コメント |
|---|---|---|---|
Option Strict Off |
38 | CORE\Common\ModuleSettings.vb |
On を標準化 |
On Error Resume Next |
18 | APP\Order\frmOrderEntry.vb |
例外処理の統一 |
| 命名規約逸脱 | 27 | BATCH\Job\Job_01.vb |
命名規則の統一 |
最も逸脱が多いのは APP 配下の画面系で、テンプレートの見直しが有効。
1.3.7 コメント率
2.1 テストコード充足率
| 複雑度帯 | 対象ファイル数 | 推定必要テストケース (C0/C1=100% 前提) | 既存テストコード数 | 充足率 |
|---|---|---|---|---|
| 小 (<=10) | 410 | 1,820 | 120 | 6.6% |
| 中 (11〜25) | 140 | 2,520 | 48 | 1.9% |
| 大 (>=26) | 62 | 3,900 | 6 | 0.2% |
備考
doc/architecture/overview.md: モジュール構成と依存関係doc/db/schema.md: DB スキーマと主要テーブルdoc/operations/deploy.md: 配布/インストール手順doc/testing/strategy.md: テスト方針と優先度