Blog

戦略的なソフトウェアのモジュラー化

より優れたソフトウェアをよりアジャイルに開発

By Karl Bråtegren

戦略的ソフトウェアモジュールとは何ですか?

-戦略的ソフトウェアのモジュール化の概要

今日のソフトウェアシステムは大量のコードで構成されており、通常は独自のソフトウェアとサードパーティのソフトウェアが混在しています。

コードの量は人間の脳にとって管理できるかどうかの課題であり、私たちが扱うには情報が多すぎます。

システムを効率的に開発、テスト、保守するためのツールが必要です。

システムのモジュール化はそのようなメソッドツールであり、ソフトウェアの世界ではモジュラープログラミングとして一般に知られています。モジュール化は、システムをモジュールと呼ばれる明確に定義された小さな部分に分解します。モジュールのサイズは人間が管理できるようにします。また、プログラマーだけでなく、組織にとって他にも多くのメリットがあります。ソフトウェアシステムのモジュール性を高めると、時間の経過とともにモジュラーシステムのアジャイル性、フレキシビリティと効率化が加速されます。 

この記事では、ソフトウェアモジュールとは何か、およびソフトウェア用のモジュラーシステムの利点について説明します。

New call-to-action


ソフトウェアモジュールとは何ですか?

ソフトウェアでは、モジュールという用語には、コンポーネントという用語と同じように、さまざまな定義があります。それは多くの異なる定義を持つ用語ですが、説明には共通点があります。これらの説明のいくつかを見てみましょう。

まず最初に、このように表現されている資料があります:

モジュールは、さまざまなシステムで(再)使用するために独立して作成および保守できるコードの一部です。

そして、ウィキペディアでは、モジュールを次のように記述しています:

「モジュラープログラミングは、プログラムの機能を独立した交換可能なモジュールに分離することを強調するソフトウェア設計手法です…」

これらに共通して表現されているポイントは何でしょうか?

ソフトウェアモジュールは独立しています

モジュールは、他のモジュールに影響を与えることなく、またはほとんど影響を与えずにモジュールを開発および保守できるという意味で、他のモジュールから独立している必要があります。プログラムの実行時に、モジュールが他のモジュールに依存していないことを意味するものではありません。

これは、生産性の向上に役立つため、ソフトウェアモジュールの重要な側面です。独立したモジュールにより、コードを作成、保守、およびテストするときに、エンジニアリングチームが互いにより独立したものになります。

ソフトウェアモジュールは再利用可能で交換可能です

モジュールはさまざまなシステムで再利用でき、システム内でも互換性(交換可能)があります。モジュールを変更せずにさまざまなシステムや製品で再利用できることは非常に有益であり、市場投入までの時間を短縮するのに役立ちます。

交換可能とは、システムの他の部分に影響を与えることなくモジュールを交換できることを意味します。これは、新機能やバグ修正のため、システムをアップグレードする際の重要なプロパティです。変更を1つまたはいくつかのモジュールに制限できる場合は、変更の実装とテストに必要な時間が短縮されます。システムの影響を受ける部分に関して、より頻繁でより小さなリリースは、アジャイル性を可能にします。リリースが小さいということは、新機能をリリースする際のリスクが少ないことも意味します。

 


ソフトウェアモジュールは、コードと関数の一部です

モジュールは、より大きなシステムの一部です。上記の最初の説明はコードの観点から分解を定義し、2番目の説明は機能の観点から分解を定義します。この分解の定義とは類似点の観点からでしょうか、それとも相違点でしょうか?

-両方とも言えます。これは、システムをより小さな部分に分解することですが、次のようになります。

  • コードに関する分解とは、モジュールが構造単位であるコードを編成することです。さまざまなプログラミング言語がソフトウェアのモジュール化の概念をサポートしていますが、まったく同じ方法ではありません。たとえば、Pythonモジュールはファイルですが、Javaモジュールはそれだけではありません。Javaモジュールは、一つまたは多数のパッケージ(他の構造単位)とそれを動作させる必要があることモジュール及び他のモジュールからエクスポートされたパッケージを定義する記述から成ります。他のモジュールからアクセスして使用できるのは、エクスポートされたパッケージのみです。

  • 機能の分離とは、論理機能を論理ソフトウェアモジュールに編成することです。これは、システムのアーキテクチャを指定して文書化するときに役立ちます。論理モジュールは、コードモジュールまたはパッケージなどの別の構造単位によって実現できます。UML(統一モデリング言語)モジュラーシステムは、UMLコンポーネント図を用いて説明することができます。

ソフトウェアモジュールを独立させ、再利用可能にし、交換可能にするにはどうすればよいですか?

ソフトウェアモジュールを独立させ、再利用可能にし、交換可能にするにはどうすればよいですか?
ソフトウェアモジュールには、チームが独立して作業できるようにする重要なプロパティがいくつかあり、ソフトウェアモジュールを多くのシステムで再利用可能にし、交換可能にします。

モジュール…

  1. 機能とデータをカプセル化します。カプセル化とは、モジュールの実装の詳細を隠すことです。モジュールが他のモジュールについて認識していることが少ないほど、他のモジュールの変更への依存度が低くなります。他のモジュールは、提供されたインターフェース(API)を介してのみ機能とデータにアクセスできます。一般的に、可能な限りカプセル化することをお勧めします。
  2. その機能とデータにアクセスするための他のモジュールへのインターフェースを提供します。ソフトウェアモジュールインターフェースは、できるだけ抽象化して小さくする必要があります。詳細が少ないほど、ソフトウェアモジュール間の結合が緩くなり、ソフトウェアモジュールの独立性、再利用性、交換性が向上します。
  3. 他のソフトウェアモジュールによって提供されるインターフェースが必要です。ソフトウェアモジュールの機能を実現するには、他のモジュールの提供されたインターフェースを使用してアクセスする必要がある場合があります。インターフェースを介して別のモジュールを使用するソフトウェアモジュールには、その別のモジュールへの依存関係があります。依存関係が少ないほど良いでしょう。下位互換性のないインターフェースの変更は、ソフトウェアモジュールのライフサイクルで発生する可能性があるため、モジュールの更新は、パフォーマンス、機能、品質の向上などの顧客へのメリットなしによって強制される可能性があります。顧客の利益を改善しない強制的なソフトウェア更新はソフトウェア開発の複雑さのコストと見なされるべきです。

次の図を使って説明しましょう。

Software Module 1ソフトウェアモジュールはインターフェースを提供し、必要とします

 

モジュールB1は、モジュールAへのインターフェースBを提供し、2つのインターフェースCとDが必要です。パフォーマンスが向上した新しいモジュールB2があるとします。モジュールB2が同じインターフェースを提供し、B1と同じインターフェースを必要とする場合、それはB1と交換可能です。

Software module 2

同じインターフェースを提供および必要とする2つのソフトウェアモジュールは交換可能です

 

提供された必要なインターフェースを定義するモジュールは、他のシステムで再利用可能になります。たとえば、モジュールB1は、必要なインターフェースが提供されている限り、別のシステム提供された必要なインターフェースを定義するモジュールは、他のシステムで再利用可能になります。たとえば、モジュールB1は、必要なインターフェースが提供されている限り、別のシステムで再利用できます。

UML-example

UMLコンポーネント図を使用して、提供された必要なインターフェースを備えたモジュールを文書化できます。


戦略的ソフトウェアモジュールとは何ですか?

ソフトウェアモジュールを形成する上で見過ごされがちな側面は、企業戦略に従っているか、です。上記のプロパティを使用してモジュールを作成する場合、通常は特定の意図を念頭に置いており、これは明示的である必要があります。意図は、次のような戦略的な質問に答えることによって表現されます。

 

  • モジュールは、頻繁に変更されるシステムの側面を集約できるように設計されていますか?
  • モジュールは、戦略的パートナーからコードを調達できるように設計されていますか?
  • モジュールは、ごく少数の人しか持っていない開発のための特定のスキルセットを必要とするような設計になっていませんか?

 

ソフトウェアアーキテクチャはコーダーによって簡単に回避されたり誤解されたりする可能性があるため、繰り返し戻って、特定の機能がモジュールにグループ化された理由を確認することが重要です。このため、モジュールの戦略的意図を述べて文書化することが重要であると考えています。定義されたモジュール戦略は、何かをモジュールと呼ぶための基準と見なすことさえできます。モジュール戦略が定義されたソフトウェアモジュールは、戦略的ソフトウェアモジュールです。

 

同僚のブログ投稿「優れたモジュラーシステムは何をもたらすのか」で、モジュラーシステムは広い範囲で柔軟であり、長期間使用できる必要があると説明しています。戦略的なソフトウェアモジュールを作成することで、寿命が長くなる可能性が高くなります。堅牢性は人に依存しなくなります。

 


戦略的ソフトウェアモジュールを文書化する方法

戦略的ソフトウェアモジュールの文書化は、従来のソフトウェア文書化とは異なります。戦略的ソフトウェアモジュールは、機能をカプセル化し、インターフェースを定義し、戦略によって推進される必要があります。これは、簡単に伝達、議論、説明できる方法で文書化する必要があるものです。これを行う1つの方法は、ドキュメント管理システムに保存されている1ページの戦略的ソフトウェアモジュール仕様を作成することです。これらの側面を文書化するもう1つの柔軟な方法は、wikiです。

Strategic software module specification template1ページのスライドの戦略的ソフトウェアモジュール仕様の例

戦略的ソフトウェアモジュールは、時間の経過とともにその価値を高めます

効率的でフレキシビリティ、アジャイル性を実現するには、大規模で複雑なシステムをより小さなパーツまたはモジュールに分解する必要があります。独立したモジュールにより、開発チームの自律性が高まり、効率が向上し、市場投入までの時間が短縮されます。モジュールはさまざまな製品で再利用可能であり、モジュール化された製品ポートフォリオを持つ企業は、一般的な再利用可能なモジュールの組み合わせから製品を構築します。

ソフトウェアモジュールの戦略的意図を定義することにより、戦略的ソフトウェアモジュールを作成します。これは、モジュールが形成された理由が文書化されているため、変更に対してより回復力があります。

カプセル化、インターフェース、戦略の3つの単純な属性しかないモジュールが非常に多くの価値を提供できることは魅力的です。 以下の戦略的ソフトウェアモジュール仕様を文書化するためのPowerPointテンプレートをダウンロードしてください。New call-to-action

 

 

KB_thumb2-180x180

作者

Karl Bråtegren

Senior Manager 

 +46 8 456 35 00
 karl.brategren@modularmanagement.com