Software-engineering-software-implementation

提供:Dev Guides
移動先:案内検索

ソフトウェア実装

この章では、ソフトウェアの実装におけるプログラミング方法、ドキュメント、および課題について学習します。

構造化プログラミング

コーディングのプロセスでは、コードの行が増え続けるため、ソフトウェアのサイズが大きくなります。 徐々に、プログラムの流れを覚えることはほとんど不可能になります。 ソフトウェアとその基礎となるプログラム、ファイル、手順の構築方法を忘れると、プログラムの共有、デバッグ、変更が非常に難しくなります。 これに対する解決策は、構造化プログラミングです。 開発者がコードで単純なジャンプを使用する代わりにサブルーチンとループを使用することを推奨します。これにより、コードを明確にし、効率を向上させます。構造化プログラミングは、プログラマーがコーディング時間を短縮し、コードを適切に編成するのにも役立ちます。

構造化プログラミングには、プログラムのコーディング方法が記載されています。 構造化プログラミングでは、3つの主要な概念を使用します。

  • トップダウン分析-ソフトウェアは常に合理的な作業を行うために作成されます。 この合理的な作業は、ソフトウェア用語では問題として知られています。 したがって、問題の解決方法を理解することが非常に重要です。 トップダウン分析では、問題は小さな部分に分割され、それぞれに重要性があります。 各問題は個別に解決され、手順は問題の解決方法について明確に述べられています。
  • モジュール式プログラミング-プログラミング中、コードは命令の小さなグループに分解されます。 これらのグループは、モジュール、サブプログラム、またはサブルーチンと呼ばれます。 トップダウン分析の理解に基づいたモジュール式プログラミング。 プログラム内で「goto」ステートメントを使用してジャンプを阻止します。これにより、多くの場合、プログラムフローが追跡不可能になります。 構造化プログラミングでは、ジャンプは禁止されており、モジュール形式が推奨されます。
  • 構造化コーディング-トップダウン分析に関連して、構造化コーディングは、モジュールを実行順にさらに小さなコード単位に細分化します。 構造化プログラミングでは制御構造を使用してプログラムのフローを制御しますが、構造化コーディングでは制御構造を使用して命令を定義可能なパターンに編成します。

関数型プログラミング

関数型プログラミングは、数学関数の概念を使用するプログラミング言語のスタイルです。 数学の関数は、同じ引数を受け取ったときに常に同じ結果を生成する必要があります。 手続き型言語では、プログラムのフローは手順を実行します。 プログラムの制御は、呼び出されたプロシージャに転送されます。 制御フローがあるプロシージャから別のプロシージャに転送されている間、プログラムはその状態を変更します。

手続き型プログラミングでは、同じ引数で呼び出されたときにプロシージャが異なる結果を生成する可能性があります。プログラム自体は呼び出し中に異なる状態になる可能性があるためです。 これは、プロシージャプログラミングの欠点であると同時にプロパティであり、プロシージャ実行のシーケンスまたはタイミングが重要になります。

関数型プログラミングは、プログラムの状態に関係なく結果を生成する数学関数として計算の手段を提供します。 これにより、プログラムの動作を予測できます。

関数型プログラミングでは、次の概念を使用します。

  • ファーストクラスおよび高次関数-これらの関数は、別の関数を引数として受け入れるか、結果として他の関数を返す機能を備えています。
  • 純粋な関数-これらの関数には破壊的な更新は含まれていません。つまり、I/Oやメモリに影響を与えず、使用されていない場合は、プログラムの残りの部分を妨げることなく簡単に削除できます。
  • 再帰-再帰は、関数がそれ自体を呼び出し、事前定義された条件が一致しない限り、その中のプログラムコードを繰り返すプログラミング手法です。 再帰は、関数型プログラミングでループを作成する方法です。
  • 厳密な評価-関数に引数として渡された式を評価する方法です。 関数型プログラミングには、厳密(熱心)または非厳密(遅延)の2種類の評価方法があります。 厳密な評価では、関数を呼び出す前に常に式が評価されます。 厳密でない評価では、必要でない限り式は評価されません。
  • λ-calculus-ほとんどの関数型プログラミング言語は、型システムとしてλ-calculusを使用します。 λ式は、発生時に評価することで実行されます。

Common Lisp、Scala、Haskell、Erlang、およびF#は、関数型プログラミング言語の例です。

プログラミングスタイル

プログラミングスタイルは、すべてのプログラマがコードを記述するためのコーディングルールのセットです。 複数のプログラマーが同じソフトウェアプロジェクトで作業する場合、他の開発者が作成したプログラムコードを頻繁に使用する必要があります。 すべての開発者が標準のプログラミングスタイルに従ってプログラムをコーディングしないと、これは退屈になり、時には不可能になります。

適切なプログラミングスタイルには、目的のタスクに関連する関数名と変数名の使用、適切なインデントの使用、読者の利便性のためのコードのコメント、およびコードの全体的な表示が含まれます。 これにより、すべての人がプログラムコードを読みやすく、理解しやすくなり、デバッグとエラー解決が容易になります。 また、適切なコーディングスタイルは、文書化と更新を容易にします。

コーディングのガイドライン

コーディングスタイルの実践は、組織、オペレーティングシステム、コーディング自体の言語によって異なります。

次のコーディング要素は、組織のコーディングガイドラインの下で定義できます。

  • 命名規則-このセクションでは、関数、変数、定数、グローバル変数の命名方法を定義します。
  • インデント-これは行の先頭に残っているスペースで、通常2〜8個の空白または単一のタブです。
  • 空白-通常、行末では省略されます。
  • 演算子-数学演算子、代入演算子、論理演算子の記述規則を定義します。 たとえば、代入演算子「=」には、「x = 2」のように前後にスペースが必要です。
  • 制御構造-if-then-else、case-switch、while-untilの記述規則、および制御フローステートメント専用のネストされた形式。
  • 行の長さと折り返し-1行に含める文字数を定義します。ほとんどの場合、行は80文字です。 折り返しは、長すぎる場合に行を折り返す方法を定義します。
  • 関数-これは、パラメーターの有無にかかわらず、関数を宣言および呼び出す方法を定義します。
  • 変数-さまざまなデータ型の変数がどのように宣言および定義されるかについて言及しています。
  • コメント-これは重要なコーディングコンポーネントの1つです。コードに含まれるコメントは、コードが実際に行うことと他のすべての関連する説明を記述するためです。 このセクションは、他の開発者向けのヘルプドキュメントの作成にも役立ちます。

ソフトウェアドキュメント

ソフトウェアのドキュメントは、ソフトウェアプロセスの重要な部分です。 よく書かれたドキュメントは、ソフトウェアプロセスについて知るために必要な情報リポジトリの優れたツールと手段を提供します。 ソフトウェアのドキュメントには、製品の使用方法に関する情報も記載されています。

よく管理されたドキュメントには、次のドキュメントが含まれている必要があります。

  • 要件のドキュメント-このドキュメントは、ソフトウェア設計者、開発者、およびテストチームがそれぞれのタスクを実行するための重要なツールとして機能します。 このドキュメントには、対象ソフトウェアの機能、非機能、および動作に関するすべての説明が含まれています。 +このドキュメントのソースは、ソフトウェアに関する以前に保存されたデータ、クライアント側で既に実行されているソフトウェア、クライアントのインタビュー、アンケート、調査などです。 通常、それは、ハイエンドのソフトウェア管理チームとともにスプレッドシートまたはワープロ文書の形式で保存されます。 +このドキュメントは、開発されるソフトウェアの基盤として機能し、主に検証および検証フェーズで使用されます。 ほとんどのテストケースは、要件ドキュメントから直接構築されます。
  • ソフトウェア設計ドキュメント-これらのドキュメントには、ソフトウェアの構築に必要なすべての必要な情報が含まれています。 (a)*高レベルソフトウェアアーキテクチャ、(b)ソフトウェア設計の詳細、(c)データフロー図、(d)*データベース設計 +これらのドキュメントは、開発者がソフトウェアを実装するためのリポジトリとして機能します。 これらのドキュメントには、プログラムのコーディング方法に関する詳細は記載されていませんが、コーディングと実装に必要なすべての必要な情報が記載されています。
  • 技術文書-これらの文書は、開発者と実際のコーダーによって管理されています。 これらのドキュメントは、全体として、コードに関する情報を表しています。 また、プログラマーは、コードの作成中に、コードの目的、コードの作成者、必要な場所、実行内容と実行方法、コードが使用する他のリソースなどにも言及します。 +技術文書は、同じコードで作業するさまざまなプログラマー間の理解を深めます。 コードの再利用機能を強化します。 デバッグが簡単で追跡可能になります。 +利用可能なさまざまな自動化ツールがあり、一部はプログラミング言語自体に付属しています。 たとえば、javaにはコードの技術文書を生成するJavaDocツールが付属しています。
  • ユーザーマニュアル-このマニュアルは、上記のすべてのマニュアルとは異なります。 以前のすべてのドキュメントは、ソフトウェアとその開発プロセスに関する情報を提供するために維持されています。 ただし、ユーザーマニュアルでは、ソフトウェア製品がどのように機能し、目的の結果を得るためにどのように使用されるべきかを説明しています。 +これらのドキュメントには、ソフトウェアのインストール手順、ハウツーガイド、ユーザーガイド、アンインストール方法、およびライセンスの更新などの詳細情報を取得するための特別な参照が含まれる場合があります。

ソフトウェア実装の課題

ソフトウェアの実装中に開発チームが直面するいくつかの課題があります。 それらのいくつかを以下に説明します。

  • コードの再利用-現在の言語のプログラミングインターフェイスは非常に洗練されており、膨大なライブラリ関数が装備されています。 それでも、最終製品のコストを下げるために、組織管理者は、他のソフトウェア用に以前に作成されたコードを再利用することを好みます。 プログラマーは、互換性チェックと再利用するコードの量を決定するために、大きな問題に直面しています。
  • バージョン管理-新しいソフトウェアが顧客に発行されるたびに、開発者はバージョンおよび構成関連のドキュメントを維持する必要があります。 このドキュメントは、非常に正確で、時間通りに利用できる必要があります。
  • ターゲットホスト-組織で開発されているソフトウェアプログラムは、顧客側のホストマシン用に設計する必要があります。 ただし、ターゲットマシンで動作するソフトウェアを設計することは不可能な場合があります。