応用情報 システム構成&システム開発(フォールトトーレラント、モジュール結合・分割・強度、レビュー、ヒューリスティック法)


⭐️システム構成⭐️

1.システムを処理の仕方によって分類

従来は…
○集中処理

○分散処理


今は…

○クライアントサーバシステム

クライアントとサーバでやり取りをする
分散型である

✅シンクライアント(thin client)

サーバ→情報処理や保管をする。中枢
クライアント→入力や表示するだけ

サーバを防御でき、情報漏洩などのリスクを軽減できる

✅ピアツーピア

完全な分散処理型
サーバがない

クライアントサーバシステムの機能

✅3層クライアントサーバシステム

○プレゼンテーション層
クライアントが、ユーザインターフェス(GUI)を使用できるように実装する

○ファンクション層
サーバ側が、業務を実現するための処理(ビジネスロック)をできるように実装する

○データ層
サーバ側が、データ管理の機能を使用できるように
実装する


サーバ側で処理が完結する(シンクライアント)
そのため、サーバを防御でき、情報漏洩などのリスクを軽減できる

✅2層クライアントサーバシステム

○プレゼンテーション層&ファンクション層
クライアント側が、ユーザインターフェス(GUI)とビジネスロックを使用できるように実装する

○データ層
  〃

もしビジネスロックに変更があると、すべてのクライアントに修正が必要になる…面倒臭い

2.システムを構成によって分類

📌並行システム📌

2系統のシステムで常に線で繋いだ状態で並列処理をすることで、性能を上げる

📌デュアルシステム(2者)📌

一つの処理を、2系統のシステムで独立に行う
ただの並列処理と異なるのは、最後に繋ぎ結果を照合する

📌デュプレックスシステム(2連式)📌

メインのシステムと、サブのシステムに分ける

・ホットスタンバイ

データを分散させておく

◆ウォームスタンバイ

サブの施設に、予め機材を搬入しておく

◆コールドスタンバイ

サブ施設の場所だけ確保
災害時にようやく機材を搬入

📌クラスタ構成📌


・シェアドエブリシング

1つのデータを複数のサーバで共有・管理

✖ データベースの負荷が増大

・シェアドナッシング

データベース共有せずサーバごとに保有
データは複数のデータベースに分散

✖ サーバが1台でも使えなくなると、システム全体に影響

3.システムの性能指標

会社によって、システムの性能が異なる。
性能を分かりやすく比較するために、指標がある

以下の3つの指標がある

〇スループット

単位時間あたりに処理できる仕事量

〇レスポンスタイム

処理にかかる時間

〇ターンアラウンド

入力+処理+出力にかかる時間

キャパシティプランニング

システムの稼働状況を定期的に評価して、処理能力を計画すること

✅スケールイン

サーバの台数を減らす
サーバリソースの最適化できる

✅スケールアウト(サーバをアウトする、つまり分散させる)

サーバの台数を増やす
並列処理に適している

☑スケールアップ

個々のサーバの処理能力を上げる。
一括処理に適する

☑スケールダウン

個々のサーバの処理能力を下げる
サーバリソースの最適化できる



4.強いシステムを作る設計

📌フォールトトレラント fault tolerant

故障に対して寛容であること
※tolerant=寛容な

システムが部分的に故障しても、システム全体としては必要な機能が存在する設計

フェールソフト

障害発生時に、稼働を継続できる設計
(例)飛行機のエンジンは、片方が故障しても大丈夫

ただし、機能は低下しながら稼働
(フォールバック)

フェールセーフ

障害発生時に、安全を優先させる設計

フェールオーバー

障害発生時に、バックアップで残したシステムに切り替える設計

フールプルーフ

人間が間違った操作をしても問題ない設計

フォールトマスキング

障害発生時に、影響が外部に及ばないようにする


📌フォールトアボイダンス

そもそも障害発生させないようにする考え方


5.信頼性の指標(RASIS)

R:信頼性

システムが故障せずに、どれだけ長く稼働できるか
平均故障間隔(MTBF)を用いる

A:可用性

ある期間でどれくらいの割合で稼働しているか
稼働率を用いる
平均故障間隔/(平均故障間隔+平均修理時間)

S:保守性

修理のしやすさ
平均修理時間を用いる

I:保全性

データが正常に保存できているか

S:機密性

データが安全に保存できているか

MTBF・MTTR・稼働率 計算方法

・MTBF Mean Time Between Failures (平均故障間隔)

稼働時間の合計 ÷ 故障回数の合計

・MTTR Mean Time To Recovery (平均修理時間)

修理する時間の合計 ÷ 故障回数の合計

・稼働率

平均故障間隔/(平均故障間隔+平均修理時間)
つまり、MTBF/(MTBF + MTTR)

⭐️システム開発の流れ⭐️

①企画→②要件定義(基本計画)→③調達→④開発→⑤テスト→⑥運用と保守の繰り返し
※各工程で必ず、レビューを行う(最後に詳しく記載)

共通フレームがこれらを定義している

①企画でやること

経営者に、経営上のニーズを聞く
経営・事業の目的を達成する上で、要求される内容を、定義すること

1,プライバシーバイデザイン

予防的に、システムから個人情報が漏洩するリスクを減らすこと

2,システム化構想の立案プロセス

新たなシステムの構想を立案する

具体的に…
経営上の課題・ニーズを確認したり、仕事をする環境の調査をしたりする

全体最適化(P549)を実現するシステムを開発するために必要
経営戦略を無視すると、部分最適化になる恐れがある

3,システム化計画の立案プロセス

上のシステム化構想を実現するために、計画をする

具体的に…
ITポートフォリオを用いて、投資配分を考える(ROIも考慮する)

②要件定義(基本計画)でやること

ベンダーに対して発注する前に、システムが持つべき機能や性能を予め決める

1,ユーザー、利害関係者(ステークホルダー)のニーズを知る

2,要件定義に必要な3つの要素を定義する

☑️業務要件
業務について行うべき要件

✅機能要件
ユーザーから聞いてわかった、必要な機能

✅非機能要件
表面にはない裏の要件
試験によく出るのは、「開発基準の技術要件

☑️組織及び環境要件

③調達

開発を担当するシステムベンダーに対して、発注をかけること

1,発注側が情報提供依頼書(RFI)を書く

RFI→リクエスト for インフォメーション

ベンダーに対して、ベンダーの情報(実績等)を送るように、要求すること

2,発注側が提案依頼書(RFP)を書く

RFP→リクエスト for プロポーサル

ベンダーに対して、システム設計や機器構成の内容、受注条件などを記載した提案書を提出するよう、要求すること

※RFPを作成するメリット
・認識の相違による開発手戻りが減る
・発注先の選定基準が明確になるので、価格が適正になりやすい

3,ベンダーが、提案依頼書に答える形で、提案書を返送する

4,発注側がシステムベンダーを選定する

5,契約

6,調達開始

✅CSR調達
社会的責任(調達先の労働環境など)を果たした調達の仕方を求めること

✅グリーン調達(グリーン購入)
発注側が調達先から製品を購入する時に、環境にやさしい製品を優先して買うこと
調達先は、ISO14001という規格を取得して、環境にやさしい製品を作る

④開発

1,システム要件定義

ベンダー側(調達先)が、現状の業務を分析し、システムが持つべき機能や性能(システム要件)を整理する

◆システム要件定義〜テストで行う開発の手法

✅ウォーターフォールモデル

上記の開発工程を順番に進めること

✅プロトタイピングモデル

開発初期の段階で、試作品(プロトタイプ)を作り、利用者に確認してもらう

✅スパイラルモデル

システム設計から後を、細かく分解して、最後に繋げる

☑️RAD (rapid application development)

とにかく短期間で開発を行うための手法
プロトタイプ(試作品)を作って、それを評価するサイクルを繰り返す。

ただし、期限を設けないと無限になるので
期限(タイムボックス)を作る必要がある。

☑️ラウンドトリップ開発

設計とプロトタイピングとを繰り返しながら開発を行うこと

※ラウンドトリップ=往復

☑️クロス開発

ソフトウェアを実行する機器とは
CPUのアーキテクチャが異なる機器で開発を行う

☑️XDDP (extreme derivative development process)

派生開発を、変更プロセスと追加プロセスとに分けて開発を行う

📌アジャイル

スパイラルモデルの派生
より短い反復単位で開発をする手法の総称

・XP(エクストリーム プログラミング)

アジャイルの代表的手法
少人数で素早く開発を進める開発手法

以下、XPの開発の具体的手法

✅ペアプログラミング

2人一組でプログラムを組む手法
1人がコードを書いて、もう1人がそのコードの検証役となる

✅リファクタリング

外部からの見た目を変えず、内部のコードだけを改善し続けること

リファクタリング後は、回帰テストをして、他機器に悪影響がないか検証

✅継続的インテグレーション

単体テスト後、すぐに結合テストする手法

問題点を修正していく

👍バグを早期発見できる
👍ソフトウェアの品質向上が見込める

☑️テスト稼働開発

テストを決めてから、ソフトウェアを作り込む手法

☑️ソースコードの共同所有

コードの作成者だけでなく、チーム内全員が修正できること


・XP以外の開発手法

✅リーンソフトウェア開発

トヨタ生産方式を、ソフトウェア開発に応用したもの

・バリューストアマップ

トヨタ生産方式で使われたマップ
付加価値を生み出す流れを、プロセスと共に図示されたもの

☑️YAGNI
You Aren’t Going to Need It.の略
あなたはそれを必要とする予定ではない

言い換えると
今必要とされる機能だけの、シンプルな実装に留めること

☑️マッシュアップ
公開されているサービスを組み合わせて、新しいサービスを作る手法
各サービスがAPIを公開しており、これを利用して組み合わせる


📌スクラム(アジャイルでの管理手法)

スプリントと言う単位でプロジェクト管理すること

◯スプリントの具体的イベント
割愛

◯スクラムで関わる人物
・責任者(プロダクトオーナー)
作業内容に優先順位をつけたプロダクトバックログを作成

スクラムマスタ
全体の進捗度の管理 & 意思疎通の円滑化
メンバーが自律的に協働できるようにする

・開発者
実際に開発
成果物をインクリメントという

◆グラフを用いた、具体的手法

バーンダウンチャート

残り作業量と、予定との差を把握できる


バグ管理図

発見されたバグの累計が一定になれば、「これ以上バグが発見されていない」ことがわかる

以下のような信頼度成長曲線になることが理想


要因ヒストグラム



EVM(アーンドバリューマネジメント)

プロジェクトの進捗度を、お金に換算したもの
※実際にかかったお金ではない

詳しい計算方法は、以下の記事で


2,システム設計

(1)システム方式設計

・データ中心設計

データこそが、最も安定した共有資源であるため、データを中心に設計

・プロセス中心設計

業務手順・機能を中心に設計
業務の流れを、そのままプログラミング言語で記述

(2)ソフトウェア要件定義

顧客に意見を求めて、仕様を定義する
業務モデル(DFD データフロー図)を作成して定義

(3)ソフトウェア方式設計

ソフトウェア要件定義の後に行う
ソフトウェア品目に対する要件を,最上位レベルの構造を表現する方式であって、かつ,ソフトウェアコンポーネントを識別する方式に変換する。

(4)ソフトウェア詳細設計

ソフトウェア方式設計で、プログラムを、モジュールに分割すること

モジュールの分割方法

✅STS分割法

入力処理、変換処理、出力処理に分ける方法

✅トランザクション分割法

一連のトランザクション単位に分ける方法

✅共通機能分割法

共通機能をモジュールとして分割する方法

類似機能を重複して作らなくても良い

3,開発工程

✅フォワードエンジニアリング

プログラムの仕様から→新しいソフトウェアを開発
通常の工程

✅リバースエンジニアリング

既存のソフトウェアの解析で、プログラムの仕様・ソースコード(UMLのクラス図やE-R図など)を導く
通常の工程とは逆なのでリバース

☑️リエンジニアリング

フォワード+リバース

※ソフトウェア権利者の許可なく行うと、知的財産権の侵害にあたる可能性


⑤テスト

モジュール

プログラミングにおいて、部品のこと

◆モジュールの性質

・独立性

他モジュールと直接関わらずに動作できる

・再利用性

作成したモジュールは、他のプログラム等で使用できる

・管理しやすい

モジュールとして細かく分けるため、管理しやすい

◆モジュール分割

✅STS分割

源泉S、変換T、吸収S、ごとに分割する方法
(DFDの源泉、吸収のこと)
つまり、入力処理、変換処理、出力処理のこと

✅(TR)トランザクション分割

切り離せない、一連の処理で分割する方法

✅共通機能分割法

共通機能をモジュールとして分割する方法

類似機能を重複して作らなくても良い


◆モジュール分割の評価


◆モジュール結合

・内部結合

モジュールの内部を、直接参照する

・共通結合

大域宣言されたデータ構造を、複数のモジュールが参照

・外部結合

大域宣言された単一のデータを、複数のモジュールが参照

・制御結合

モジュールの動作を制御するための要素を受け渡す

・スタンプ結合

処理に必要なデータのみ、データ構造として受け渡す

・データ結合

処理に必要なデータだけ
⭕️データ結合が、最も結合度が弱い


〇静的テスト

プログラムを実行しないで行うテスト

〇動的テスト

プログラムを実行して行うテスト

📌単体テスト

各モジュールごとにテストを行うテスト

✅ホワイトボックステスト

モジュールの内部構造が正しく作られているか検証するテスト

以下の網羅性のレベルに基づきテストケースを設計

・命令網羅

⬜︎(命令)を一回でも通れば良い

・判定条件網羅

◇で、真と偽の両方を一回は通る必要がある

📌結合テスト

スタブやドライバを使用し
モジュールをつないで、モジュール間のインターフェースを検証

✅ブラックボックステスト

同値分割
データ範囲を種類ごとに分けて、その中からテストデータに用いるものを抜き出す

限界値分割
境界値前後の値をテストデータに用いる

✅トップダウンテスト

スタブ
下にあり、上位モジュール(ドライバ)から呼び出されるもの

上位モジュール(ドライバ)から開発するので、上位モジュールに対してテスト回数が多くなる
上位モジュールの信頼性が高くなる


✅ボトムアップテスト

ドライバ
上にある、引数を渡して下位のモジュールを呼び出す(下位のモジュールからテストをおこなう)もの

✖上位(ドライバ)に問題があると、下位(スタブ)もすべて修正しなきゃいけない

📌システムテスト

システム全体が正常に作動するか確かめるテスト
本番環境とは隔離された環境で行う
全ての要件事項を網羅するように設計する

📌運用テスト

システムを、本番と同じ環境で作動して、正常に作動するか確かめるテスト

📌リグレッションテスト(退行テスト)

プログラムを修正したときに、修正したものが逆に悪影響を与えていないか確かめるテスト

※グラフ

バスタブ曲線

◯初期故障期
材料の欠陥、設計時のミスが原因で、故障率は高い

◯摩擦故障期
疲労によって高い


バグ管理図

発見されたバグの累計が一定になれば、「これ以上バグが発見されていない」ことがわかる

これを表した図が、バグ管理図。以下のような信頼度成長曲線(ゴンペルツ曲線)になることが理想


逓減課金方式

システムを使えば使うほど、課金額が減っていくこと

※レビュー

各工程で必ず行う、振り返り作業のこと

レビューの種類

✅デザインレビュー

成果物の問題点の早期発見を、組織内で行う

✅コードレビュー

コードの内容のチェックを、組織内で行う

✅コードレビュー(Code Review)

• 目的: プログラムコードに対して、他の開発者がチェックを行うことで、品質を向上させる。

• 特徴: ソースコードの可読性、パフォーマンス、保守性を確認し、バグや設計の問題を発見する。

• 重要点: ペアプログラミングのように対面で行う場合や、ツールを使ってリモートで行う場合もある。

✅ピアレビュー(Peer Review)

• 目的: 同じプロジェクトや同じ分野のメンバー同士が成果物をレビューし合う。

• 特徴: 比較的インフォーマルな方法で、レビュー対象がドキュメント、コード、設計など多岐にわたる。

• 重要点: 同僚やチームメンバーによって行われるため、専門知識を共有でき、学習機会が増える。

✅アドホックレビュー(Ad-hoc Review)

• 目的: 非公式なレビュー方法で、特別な手順や役割分担なしに行われる。

• 特徴: 事前の準備を必要とせず、簡単に開始できる。例えば、同僚に成果物を見てもらうようなカジュアルなやり方。

• 重要点: 柔軟で迅速に行えるが、体系的ではないため見逃しが発生する可能性もある。


✅パスアラウンド

成果物を複数のレビュアーに回す

コメントさせる

✅ウォークスルー

会議形式
成果物を説明

質問

✅インスペクション (inspection、つまり検査)

モデレータ(責任者)が、作業全体をコーディネート
明確な役割に分けられチェックリストに基づく

チェックリストに基づいて検査をすると覚えよう

✅ラウンドロビン

発言者を回していく方式


※ユーザビリティの評価

ユーザビリティとは

有効性・効率・満足度

✅インタビュー法

満足度を聞くときに、直接顧客に聞くこと

✅ヒューリスティック評価法

ヒューリスティック=経験則
複数の専門家が、自分たちの経験則とプロトタイプを照らし合わせて評価

✅ログデータ分析法

被験者に製品を操作してもらい、その操作ログ(履歴)から利用パターンを分析

ユーザビリティを向上させる機能

✅入力チェック

ユーザがコンピュータに入力したデータが適切か調べること

⚪︎論理チェック
入力したデータが論理的に正しいかチェック
(例)商品の注文日が未来の日付になっているのは不適

⚪︎重複チェック
重複していないかチェック

⚪︎フォーマットチェック
正しい形式になっているかチェック

⚪︎シーケンスチェック
正しい順番で並んでいるかチェック

✅Undo機能

✅マクロ機能

✅ショートカットキー


この記事が気に入ったらサポートをしてみませんか?