アプリケーション基盤の標準化
当社が関わったお客様の多くは、現行システムの運用で以下の問題を抱えておりました。
- データの不整合、プログラムの不具合等の障害が頻繁に発生するため、日々の業務が滞る
- 障害発生時に障害箇所の特定に時間がかかり、修復までの間、運用の負担が大きい
- 障害対応・機能改修を行う度に、高い運用・保守コストがかかっている
これらの原因は、アプリケーションの品質、保守性が悪いプログラムによるものと考えられます。 プログラム(ソースコード)は、設計やプログラミングを理解しなくては、お客様自身で品質をチェックすることが難しいものです。往々にして、開発者が属人的なプログラムを作成し、プログラムの品質低下を招くことがあります。 このため、開発コストを抑えることができた場合でも、運用・保守で多額のコストが発生してしまいます。
お客様自身もアプリケーションを構成するアーキテクチャやプログラム構造の重要性を理解し、問題解決に取り組むことで、アプリケーションの品質、保守性の向上へつながると当社は考えています。
アプリケーションの品質、保守性向上への取り組み
アプリケーションの品質、保守性を向上させるには、主に以下を行う必要があると考えます。
- 処理毎の役割を明確化する
- 共通化部分の再利用性を向上する
- 回帰的なテストを実施する
当社ではこれらを担うフレームワークを組み合せ、標準化したアプリケーション基盤の構築に取り組んでいます。
利用する技術 - MVC(Model View Controller)アーキテクチャの採用
機能の各処理を 「Model:登録や検索などを行う、業務の処理」 「View:画面レイアウトを表現する処理」 「Controller:画面描画と業務処理とを仲介する処理」 に分離します。 これにより、以下のようなメリットが受けられます。
【保守性、品質向上】
- 機能拡張・機能変更を行う場合、プログラムを変更する箇所の特定が容易となる
- 障害が発生した場合、障害箇所が局所化でき、影響範囲の特定が容易となる
- 処理を分離することで、要員のスキルに適した処理を割り振ることができる
(例:画面描画処理はデザイナー担当、業務処理はプログラマー担当) - 処理を分離することで、処理の共通化が容易になり、品質のバラつきを抑えることができる
- 業務処理単体でテストが行えるため、複雑な処理やバグが多い処理を重点的にテストができる
【コスト削減】
- 処理の共通化により、開発に掛かるコストを削減できる
- 変更箇所・障害箇所の特定が容易になり、調査に掛かるコストを削減できる
利用する技術 - DI(Dependency Injection)の採用
プログラム間の依存関係をプログラムのソースコードではなく、外部設定ファイルに設定できるため、部品化されたプログラムを容易に組み替えることができます。 これにより、以下のようなメリットが受けられます。
【保守性、品質向上】
- 小さく部品化することで、部品毎の役割が明確になり、プログラムを変更する箇所の特定が容易となる(例: 画面の入出力を行う。計算処理を行う。データベースを検索する。)
- 障害が発生した場合、障害箇所が局所化でき、影響範囲の特定が容易となる
- テスト用の部品を組み合わせることで、プログラムモジュール毎のテストが容易になる
- 部品間の依存関係を設定ファイルで設定することができるため、部品の差し替えが柔軟にできる
- 部品化することで、共通化部分の再利用性が高まり、個別実装による品質のバラつきを抑えることができる
- 部品間の関係が疎結合となるため、部品単位で機能を強化することができる
【コスト削減】
- 共通化部分の個別実装を排除することで、開発に掛かるコストを削減できる
- 変更箇所・障害箇所の特定が容易のため、調査に掛かるコストを削減できる
- プログラム変更の影響が小さく済むため、プログラム変更に掛かるコストを削減できる
利用する技術 - テスティングフレームワーク/テスト自動化ツールの導入
回帰的なテストを自動化することで、以下のようなメリットが受けられます。
【保守性、品質向上】
- 同様のテストを回帰的に実施する場合、毎回簡単にテストを実行することができる
- 自動的にテストが行われるため、人的なミスが発生しにくい
- テストが容易なため、より多くのテストを実施することで、意図していない箇所の不具合を発見しやすくなる
【コスト削減】
- テストが自動的に行われるため、手動によるテストと比べてコストを削減することができる