システムの処理形態
<システムの構成方法>
●集中処理
1台のコンピュータにだけ処理をさせる
・メリット:管理が楽
・デメリット:ホストコンピュータに障害が発生したらアウト
●分散処理
複数のコンピュータに分散して処理をさせる
・メリット:どこかに障害が発生してもシステムは動く。
・デメリット:管理が大変
<処理のタイミング>
●リアルタイム処理
要求された処理をすぐに行う。
・ハードリアルタイムシステム
決められた時刻までに処理を終了できなかった場合に、システムやそれを扱う人に致命的なダメージが発生するシステム
例)エアバック
・ソフトリアルタイムシステム
決められた時刻までに終了できなくても大丈夫
例)バンキングシステム
ある程度まとまったデータを一括して処理する。
システムのテスト
<単体テスト>
ソフトウェア詳細設計時に分割したモジュール毎に正しく動作するかをテストすること
モジュールの内部構造に注目して、1つ1つの処理が正しく動作しているかをテストする。
https://wa3.i-3-i.info/word13078.html
ホワイトボックステストにおけるテストケースの設計方法は以下の4つがある。
・命令網羅
全命令を最低1回は実行する。
・判定条件網羅(分離網羅)
分岐の判定において、真と偽の分岐を少なくとも1回は実行
・条件網羅
分岐の判定文が複数ある場合に、それぞれの条件が真と偽の場合を組み合わせ
・複数条件網羅
判定文の条件が取りうるすべてのパターンを網羅
テストカバレージ分析
コード内のどれだけの割合の部分を実行できたかを評価するために行う分析
モジュールの機能仕様やインターフェースの仕様に基づいて、入力データに対して正しく出力されるかだけをテストする。
https://wa3.i-3-i.info/word13077.html
<結合テスト>
単体テストが終わった複数のモジュールを組み合わせ、正しく動作するかをテストすること。
●ボトムアップテスト
下位のモジュールから上位のモジュールへ順にテストする方法。
上位には、ドライバと呼ばれるダミーモジュールを使用する。
https://wa3.i-3-i.info/word14934.html
ダミーモジュール
中身が何もなく処理を行わないため、他に影響を及ぼさないモジュール。
●トップダウンテスト
上位のモジュールから下位のモジュールへ順にテストする方法。
下位には、スタブと呼ばれるダミーモジュールを用意する。
https://wa3.i-3-i.info/word14933.html
<システムテスト>
結合テストが完了したら、システム全体をテストするシステムテストを行い、要求された仕様の通りにシステムが動作するかをチェックする。
ストレステスト
システムに通常以上の負荷をかけて、要求されている処理能力の限界状態における動作が正常かを確認する為に行うテスト。
<運用テスト>
利用者に提供する視点で、運用環境と同じ条件で動作確認を行う。システムが要件定義の要求を満たしていることを確認する。
リグレッションテスト
プログラムにバグが見つかり修正を行った場合に、その修正が他の部分に影響を及ぼしていないか確かめるテスト
https://wa3.i-3-i.info/word12331.html
静的テストツール
ソースコードを解析して、プログラムの誤りを検出するツール
アサーションチェック
プログラム実行中の特定の時点で成立する変数間の関係や条件を記述した論理式を埋め込んで、そのプログラムの正当性を検証する手法
信頼度成長曲線(ゴンベルツ曲線)
テスト項目の消化件数と検出されたバグの件数を表したグラフ
オブジェクト指向
データとデータを操作するメソッドを1つのオブジェクトにまとめて、内部仕様を外から見えないように隠蔽すること。オブジェクトの内部仕様を変更しても、他のオブジェクトに影響を与えない。
オブジェクト同士は、メッセージを送ることで協調して動作する。
クラス
オブジェクトの設計図
クラスを元に作られた各オブジェクト
<クラスの階層構造>
オブジェクト指向では、他のクラスで流用できるように、クラスも部品化されている。
●汎化-特化
汎化
いくつかのクラスに共通している事柄をまとめて、1つの別のクラスを作ること
例)バス、トラック、タクシー → 車
特化
汎化したクラスから個々のクラスを考え出すこと
例)自動車 → トラック、バス、電気自動車
クラスAりクラスBが汎化ー特化の関係にある時、汎化されたクラスAのことを基底クラス(スーパークラス)といい、特化されたクラスBのことを派生クラス(サブクラス)と言う。
継承
サブクラスを作る際に、スーパークラスで決められた手続きやデータを受け継ぐこと
●集約ー分解
自動車というクラスは、タイヤ、ハンドル、ブレーキといったクラスを集約したものであると考えられる。
タイヤ、ハンドル、ブレーキというクラスは、自動車というクラスを分解したものである。
<UML>
オブジェクト指向を用いた開発では、オブジェクトの構成や関係性などをモデル化し、プログラムの設計図を作成する。その際に使われるモデリング言語をUML(Unified Modeling Language)と言う。
●クラス図
クラスの属性と操作、クラス間の関係を表した構造図。操作、属性、ロール名、クラス間の関係性が記述される。
●オブジェクト図
クラスの定義に基づいて生成されるインスタンス間の関係を表した構造図。クラス図に似ているが、オブジェクト図の属性には具体的な値が入っている。
多重度
関連するクラス間の数量的な関係を表現したもの
●ユースケース図
システムが提供する機能とサービスの範囲を表した図。
●シーケンス図
オブジェクト間の相互作用を時系列で表した図。
プログラミング
プログラミングの標準化
プログラムの処理内容を理解しやすくすることを目的に、変数名やコメントの付け方などに一定の規則を決めること
<プログラム言語>
●低水準言語
コンピューターが理解しやすいプログラム言語
・機械語
●高水準言語
人間が理解しやすいプログラム言語
・C
・BASIC
・C++
<言語プロセッサ>
コンピュータは機械語で書かれたプログラムしか理解できないため、人間が書いたプログラムである原始プログラム(ソースプログラム)は、そのままではコンピュータ上で実行できない。
そこで、言語プロセッサという翻訳プログラムを使って、機械語のプログラムである目的プログラムに変換する必要がある。
アセンブラ言語で書かれた原始プログラムを目的プログラムに翻訳する言語プロセッサ。アセンブラで翻訳することをアセンブルという。
高水準言語で書かれた原始プログラムを一括して目的プログラムに翻訳する言語プロセッサ。コンパイラで翻訳することをコンパイルという。
●ジェネレータ
入力・処理・出力などの必要な条件を設定値であるパラメタで指示することで、処理の目的に応じたプログラムを自動的に生成する言語プロセッサ。
高水準言語で書かれた原始プログラムを1行ずつ解釈し、実行する言語プロセッサ。機械語の目的プログラムは作成されないため、実行するたびに解釈が必要でプログラムの実行速度は遅くなる。インタプリタは、プログラムの途中で文法ミスがあってもその直前まで実行できる。
ある処理系用に書かれた原始プログラムを、他の処理系用の原始プログラムに変換するプログラムのこと
他のコンピュータ用のプログラムを解読し、実行するマイクロプログラム
<ソフトウェア実行までの手順>
高水準言語で書かれた原始プログラムを、コンパイラによって機械語の目的プログラムに翻訳する。
この時、原始プログラムを解析し、実行時の処理効率を高めるために最適化が行われる。
②リンク
ライブラリモジュール
ある特定の機能を持ったプログラムを他のプログラムから利用できるように部品化したプログラムの集まり
コンパイラによって翻訳された目的プログラムに必要なライブラリモジュールなどを付け加えて、実行可能なプログラムであるロードモジュールを生成する。この作業をリンクといい、リンクを行うプログラムをリンカという。
●静的リンク
プログラムを実行する前に、リンカによってあらかじめ必要な目的プログラムやライブラリモジュールをリンクする方法。
●動的リンク
プログラム実行中に別のプログラムモジュールの機能が必要になった時、そのプログラムを随時リンクする方法
DLL(動的リンクライブラリ)
動的リンクを前提としたソフトウェアモジュール群をまとめたライブラリファイル
③ロード
ロードモジュールを実行するために主記憶上に持ってくる作業。
ローダと呼ばれるプログラムが担当する。
ソフトウェアの保守性を高めるために、外部仕様を変更することなく、プログラムの内部構造を変更すること。
<プログラムの性質>
●逐次再利用可能(リユーザブル)
一旦実行が終わった後も、再度主記憶にロードし直さなくても実行できるプログラムを再使用可能なプログラムという。
そのうち、同時には1つのタスクだけしか使用できないプログラムを、逐次際使用可能プログラムと言う。
●再入可能(リエントラント)
際使用可能なプログラムのうち、2つ以上のタスクから同時に呼び出しても正しく動作するプログラムを再入可能なプログラムと言う。
再入可能なプログラムは、コード(手続き)部分とデータ部分が別の記憶領域に分かれているため、データ部分をタスクごとに用意することで並列して実行できる。
●再配置可能(リロケータブル)
主記憶上のどこの位置にロードしても実行できるプログラムを、再配置可能なプログラムと言う。
●再帰的(リカーシブ)
実行中に自分自身を呼び出せるプログラムを再帰的なプログラムという。
プログラムのソースコードを解析して、プログラムの仕様や設計情報を復元すること。
例えば、プログラムからUMLのクラス図を生成すること
ソフトウェア詳細設計
プログラム構造化設計
プログラムをモジュールというひとまとまりの機能を持った単位に分割する事。
モジュールに分割する事で、大勢の人で分担してプログラムを開発できるようになる。また、モジュール単位でテストができるので、問題が起きても原因を特定しやすく、修正もモジュール内だけで済む。
<モジュールの独立性>
プログラムの信頼性と保守性を高めるには、1つのモジュールに入れる機能をできるだけ少なくし、各モジュールの独立性を高くする。
モジュールの独立性は、モジュール強度とモジュール結合度で評価する。
●モジュール強度
1つのモジュール内の機能同士の関連の強さを示す。
・暗号的強度:内部の機能同士に関連性が無い(独立性・強度1)
・論理的強度:関連した複数の機能を持ち、その中からどれか1つを選択するモジュール(独立性・強度2)
・時間的強度:機能が時間順に実行されるモジュール(独立性・強度3)
・手順的強度:機能が順番に実行されるモジュール(独立性・強度4)
・連絡的強度:内部の機能同士がデータを共有するモジュール(独立性・強度5)
・情報的強度:データを共有する機能を1つにまとめたモジュール(独立性・強度6)
・機能的強度:1つの機能だけから成るモジュール(独立性・強度7)
●モジュール結合度
モジュール同士の関係の強さを示す。
・内部結合:他のモジュールの内容を直接参照する。(独立性1・結合度6)
・共通結合:共通領域に定義したデータを参照する。(独立性2・結合度5)
・外部結合:外部宣言しているデータを共有する。(独立性3・結合度4)
・制御結合:制御パラメータを引数として渡し、モジュールの実行順序を制御する。(独立性4・結合度3)
・スタンプ結合:データ構造を引数として受け渡す。(独立性5・結合度2)
・データ結合:データ項目だけを引数として受け渡す。(独立性6・結合度1)
ソフトウェア要件定義(外部設計)
ヒューマンインタフェース
ユーザとコンピュータをつないでいる部分の事。
ユーザビリティを考えて設計する必要がある。
ユーザに対する情報の表示にイラストを使用するユーザーインターフェースの事。
マクロ機能
一連のコマンドをひとまとめにして、1つのコマンドで実行する機能