<HOME

はじめに30分


プログラムを作る際に重要な作業が設計です。

  • 自分一人で、一時的に利用する小さなプログラムを作る場合は、ささっとソースコードを書いてプログラムを作ってしまえるかもしれません。

    しかし、中規模以上のプログラム作成や、複数名での開発プロジェクトでは、それではうまくいきません。

    あらかじめ、プログラムの設計を行うことで、開発を効率よく進めることができるようになります。


    設計を行い、インターフェースを定義したり機能の処理の流れを可視化することで、次のような効果を期待できます。

    • 設計方針を共有することで、多人数のチームでの開発が行いやすくなる

    • インターフェースを定義することで、他の開発チームと並行して開発を進めることができる

    • 機能の処理の流れを可視化することで、コーディングしやすくなる

  • 設計を行う上で意識するポイントとして次のようなものがあります。

    • 保守性

      不具合が発生した際や機能を変更する際にメンテナンスしやすいよう意識して設計しましょう。

    • 拡張性

      最初は必要なくても、プログラムのバージョンアップで機能追加が発生するかもしれません。

      モジュールを適切に分割する等して、後から機能追加しやすいよう意識して設計するのが好ましいです。

      (ただ、未来に必要になるかわからない機能を意識しすぎて設計が必要以上に複雑になると本末転倒です)

    • 再利用性

      機能の一部は別のプログラムに移植されるかもしれません。

      モジュールを適切に分割する等して、再利用しやすいよう意識して設計しましょう。

    • モジュール性

      プログラムを構成する一部の機能を部品(モジュール)化して分割することで、保守性や拡張性・再利用性を向上できたり、

      チームでの開発の場合はモジュールごとにメンバーを割り当てたり、といった効果が期待できます。

    • 耐障害性

      問題発生時のフェールセーフや、復旧方法を意識して設計しましょう。

    • セキュリティの考慮

      パスワードなど、機密な情報を扱うケースがあるかもしれません。

      暗号化を行う場合は、どういった暗号化方式が良いか、鍵はどう保持するか等も考える必要があります。

      セキュリティ面を意識して設計しましょう。

    • 割り込みの考慮

      タイミングや外的要因による割り込みに耐えられるように意識して設計しましょう。

    • パフォーマンスの考慮

      処理の実行時間やメモリ使用量など、プログラムが動作する媒体の条件やユーザビリティを意識して設計しましょう。

    • 実行スレッドの考慮

      マルチスレッドプログラミングの場合、処理が実行されるスレッドを意識して設計しましょう。

      例えば、時間のかかる処理をUIスレッドで実行してしまう設計にしてしまうと、長時間UIを操作できなくなってしまう等の問題が発生します。

  • 開発プロジェクトごとで、設計のやり方は異なります。柔軟に対応してください。

    • 成果物の違い

      手続型言語での開発が主流だった頃は、設計での成果物はフローチャートや関数仕様書が主でした。


      最近はオブジェクト指向言語での開発が主流となり、UMLを用いた設計が多くなっています。

      それに伴い、クラス図やシーケンス図を設計における成果物としているケースが多くなっています。

      関数仕様書は、Javadocやdoxygenを活用して作成するケースが増えています。


      昔ながらの開発を行っているプロジェクトでは、ExcelやWordベースのフローチャートや関数仕様書を作成しているケースがあります。

    • 粒度の違い

      設計は、細かければ細かいほど良い、というわけではありません。

      設計がソースコードレベルまで細かくなっていると、ちょっとした不具合の修正だけでも設計書のメンテナンスが必要となり大変です。


      ただし、言語知識やスキルが未熟なメンバーが多いチームでは、細かく詳細設計・レビューを行うことで品質の向上が見込めたりもします。


      設計の粒度をシステム全体や主要機能の基本設計ないし簡易的な詳細設計までとするケースもあれば、

      かなり細かい詳細設計を行うケースもあります。