基本情報処理5
問題一覧
1
モジュールの独立性を測る尺度として用いられるのがモジュール強度とモジュール結合度です。
モジュール強度。
モジュール内の機能が、内部でどのように関連付いているかを示す尺度です。要するに「どれだけ機能的に特化できているか」をあらわすもので、これが高いものほど、「モジュールの独立性が高くて好ましい」となります。
2
モジュール結合度。
モジュールが、他のモジュールとどのように結合するかを示す尺度です。具体的には、「どんなデータをやり取りすることで、他のモジュールと結合するか」をあらわすもので、これが弱いほど、「モジュールの独立性が高くて好ましい」となります。
この結合度を理解するには、次の言い回しを知っておく必要があります。
3
作成したプログラムのテストの流れ。
まず、モジュール単位で単体テストを行う。
そして、モジュール同士を結合させて、結合テストを行う。
そして、システム全体を検証する、システムテストを行う
4
単体テストで、モジュールを検証する手法として用いられるのがブラックボックステストとホワイトボックステストです。
ブラックボックステストとは、とりあえず、要求に対して、ちゃんと返してくれるかを見る。
ホワイトボックステストとは、どのような仕組みで動いているのかを確認しなかまら、みる。
5
ブラックボックステストを行うにあたり、入力として用いるデータは、漫然と決めても効果がありません。ちゃんと、「何を検証するため」に与えるデータなのか、その意味を明確にしておくことが大切です。そのためテストデータを作成する基準として用いられるのが、同値分割と限界値分析です。
例えば体脂肪を入力すると、ちょい痩せ、標準、ちょい肥満という結果を返してれるモジュールがあったとする。画像参照。
同値分割では、これをデータの範囲内で分けてくれるかを見るテストを行う。
限界値分析では、範囲の境目をチェックします。境界前後の値をテストデータにする。
このようにチェックを行うことで、(15<値)と判定すべきところを
(15<=値)と判定してしまっているミスなどが発見できます
6
ホワイトボックステストを行うにあたっては、「どこまでのテストバターンを網羅するか。
を定めた上でテストケースを設計します。それぞれの網羅基準で、必要とされるテストデー夕がどのように変化するか覚えておきましょう。画像参照。
命令網羅。
すべての命合を最低1回は通すようにする
テストです。命今が1度実行できれば良いので、この場合は
Yesの分岐を通る
テストパターンがあればOK!
判定条件網羅。
すべての分時を最低1回は通すようにする
テストです。yesの分岐とNoの分岐
2っ分のテストパターンが必要。
条件網羅。
個々の条件が真と偽の値も最低1回は満たすようにするテストです。それぞれで1度ずつ真と個を試せていれば良い。
複数条件網羅。
複数の条件がとりうる。真偽値
全ての組み合わせを網羅するテストです。
とにかで全ての細み合わせを検証する。
7
結合テストでモジュール間のインタフェースを確認する方法には、トップダウンテストやボトムアップテストなどがあります。画像参照。
上位モジュールから、先にテストを済ませていくのがトップダウンテストです。
既存の流用とかでない限り
下位のモジュールは未テストだったりするのでその場合はスタブと呼ばれる仮のモジュールをくっつけて、インタフェースの確認を行います。
それとは逆に、下位モジュールからテストを行うのがボトムアップテストです。
この場合は上位がまた未テストなので、ドライバと呼ばれる仮のモジュールをくっつけて、インタフェースの確認を行います。
結合テストには他にも、トップダウンテストとボトムアップテストを組み合わせて行う折衷テストや、すべてのモジュールを一気につなげてテストするビックバンテストなどがあります。
8
リグレッションテスト(退行テスト)というのは、プログラムを修正した時に、新たにバグを誘発することになっていないか)を確認するためのテストです。
9
リグレッションテストの、永久ループを無くすために、どこでけじめをつけるのか、「もうこれでバグは100%ありません」と言える指標はありません。そこで用いるのがバグ管理図です。画像参照。
横軸でテスト項目の消化件数(や時間)、縦軸で発見したバグの累積件数をあらわしたのがバグ管理図。
一般に、キチンとテストされて品質が高まっていれば、左図の信頼度成長曲線みたいな形状の線ができるとされています。逆にそうした傾向の線にならず、たとえば下図のような線が描けてしまう場合は、プログラムの品質を疑わないといけません。
10
プロジェクトマネージャーは、プロジェクトの納期や予算、品質といったものを管理する。プロジェクトマネジメントの技法を体系的にまとめたのが、米国プロジェクトマネジメント協会がまとめたPMBOK (Project Management Body of Knowledge) です。従来、マネジメントといえば「QCD(品質、コスト、納期)」の3つに着目した管理手法が一般的でしたが、PMBOKでは次の10個の知識エリアをもとに管理すべきであるとしています。
11
WBSとはWork Breakdown Structureの路。プロジェクトに必要な作業や成果物を、階層化した図であらわすものです。PMBOKでいうスコープ管理に活用されます。
たとえば、いきなり「Googleみたいな検索システムを作れ!」と言われても途方に暮れるしかないですよね?
でも、これ以上ないくらいに作業を細分化することができたとしたら…・?
複雑な作業であっても細かい単位に分割していくことで、個々の作業が単純化できて、把握しやすくなるというわけです。
12
ソフトウェアの世界は「ネジや釘みたいな原価のはっきりした部品」が揃ってるかけじゃない。そのための見積り手法として代表的なのが次の2つです。
プログラムステップ法
従来からある見積り手法で、ソースコードの行(ステップ)数により開発コストを出す手法です。
例えば、このシステムを作るためには、何万行のプログラムを書く必要があり、弊社の基準は1日に何行製造なので、何万÷何行で、開発コストを算出する。
ファンクションポイント法。
表示画面や印刷する帳票、出カファイルなど、利用者から見た機能に着目して、その個数や難易度から開発コストを算出する手法です。利用者にとっては、見える部分が費用化されるため、理解しやすいという特徴があります。例えば、このシステムを作るためには、画面の数はいくつで入出力はいくつなどと洗い出し、機能ごとの難易度にあわせて点数化したりして、最後に独自の係数をかけめ、開発コストを出す。
13
アローダイアグラムと同じく作業スケジュールを表現する図法の一種にプレシデンスダイアグラム法(PDM) があります。この図法では、個々のアクティビティ(作業)を四角で囲み、それらを矢印でつなぐことによって、アクティビティの所要期間と順序、依存関係を表現し
ます。
14
スケジュール短縮のために用いる代表的な手法が、クラッシングとファストトラッキングの2つです。
グラッシングとは、コストの増大を最小限に抑えながら、資源を追加投入して、スケジュールの所要時間を短縮する方法。例えば、3人でやっていたものを、1人追加して、作業完了に必要な日数を短縮する。
画像参照。ファストトラッキングとは、「通常は順番に実施されるアクティビティやフェーズを並行して遂行するスケジュール短縮技法」です。ただし、手戻りが発生する要因となる恐れ
15
「サービスを提供するにあたっての、管理・運用規則に関するベストプラクティス(最も効率の良い手法・プロセスなどのこと。ようするに成功事例)が、発国において体系的にまとめられました。これをITIL(アイティル: Information Technology Infrastructure
Library)と呼びます。
ITILは大きく分けて、ITサービスの日々の運用に関する作業をまとめたサービスサポートと、長期的な視点で「ITサービスの計画と改善と図るサービスデリバリの2つによって構成され、「サービスマネジメントの標準的なガイドラインとして使われています。
16
サービスレベルアグリーメント(SLA)とは、日本語にするとサービスレベル合意書、サービスの提供者とその利用者との間で、「どのような内容のサービスを、どういった品質で提供するか」を事前に取り決めて明文化したものをいいます。
サービス品質の目標設定を、両者合意のもとで行うわけです。この時その項目は、漢然とした表現ではなく、具体的な数値を用いて定量的な判断ができるようにしておく必要があります。「問い合わせに対しては・〇時間以内に返答する」などとするわけですね。
なんでそれが大事なのかというと...
まあそれは極端な話だとしても、表現があいまいでは目標が達成できたかもわかりませんから、困るわけですね。
ちなみに、設定した目標を達成するために、計画一実行一確認一改善というPDCAサイク
<ル(P.760) を構築し、サービス水準の維持・向上に努める活動を、サービスレベルマネジメント(SLM: Service Level Management)といいます。
17
ITILの中で、「ITサービスの日々の運用に関する作業」をまとめたものがサービスサポート。
次の1機能と5つの業務プロセスによって構成されています。
機能。
サービスデスク(ヘルプデスク)。ITサービスを利用する顧客と、ITサービスを提供する組織の間の一元的な窓口として活動する。
プロセス。
インシデント管理。発生したインシデントに対し、可能な限り迅速に通常のサービス運用を回復して、ビジネスへの悪影響を最小限に抑える。
問題管理。
インシデントや問題の根本原因を最小限
に抑制し、また再発を防止する”
構成管理
構成管理データベースを用いてITサービス提供に必要な構成アイテム(Cl)を常に正しく把握し、各プロセスに効果的な情報を提供する。
(システムに変更が入ったら
この中身もちゃんと更新する)
変更管理。
変更要求(RFC)の内容について、変更に伴う影響を検証してインパクトや優先度の評価を行い、認可または却下を決定する。
リリース管理
承認の得られたコンポーネントを、正しい場所に、適切な時期にリリースする。
18
サービスデスクは、その組織をどこに置くか、によって次のように分類する。
ローカルサービスデスク。支社に窓口を置くことで、ユーザの拠点内、もしくは物理的に近い場所に設けられたサービスデスクです。メリット、現地で直接対応することが可能なので、問題の把握が容易となる。
中央サービスデスク。
一箇所に窓口を集約させたサービスデスク。メリット、最小限のスタッフで済むようになりコストが抑えられる。情報管理しやすい
バーチャルサービスデスク。
インターネットなどの通信技術を利用することによって、実際は各地に分散しているスタッフを擬似的に一箇所の拠点で対応しているように見せるサービス。
その他にも、時差のある複数の地域に拠点を設けることで24時間対応を可能にする、フォロー・ザ・サンなどがあります。
19
ITILの中で、長期的な視点でITサービスの計画と改善を図る」のがサービスデリバリ。
次の5つの業務プロセスによって構成されています。
サービスレベル管理。
PDCAサイクルによってサービスの維持、向上に努める。
キャパシティ管理。
容量、能力などシステムのキャパシティを管理し、最適なコストで、サービスが現在及び将来の合意された需要を満たすに足る十分な能力をもっていることを確実にする。
可用性管理。
サービスの利用者が利用したい時に確実にサービスを利用できるよう、ITサービスを構成する個々の機能の維持管理を行う。
ITサービス継続性管理。
顧客と合意したサービス継続を、あらゆる状況の下で満たすことを確実にする。具体的には、災害発生時であっても、最小時間で「サービスを復旧させ、事業継続のために必要な計画立案と試験を行う。
ITサービス財務管理。
「サービスにかかわるコストの予測と、実際に発生したコストの計算
や課金管理を行う。
20
事業継続計画(BCP:Business Continuity Plan)
BCP Business Continuity Plan) は、直訳すると、事業を途切れさせず、継続するための計画、みたいな意味。
災害があっても、事業を中断させない、中断しても可能な限り短い期間で復旧させる。
21
BCPでは、復旧目標として次の三つを定める。画像参照
目標復旧レベル。
どの程度まで復旧させる必要があるか。
復旧目標とする業務範囲や処理
能力などを定めます。
目標復旧時間。
システムダウンを許容できる時間の決定。目標復旧レベルまで復旧するのに要する時間を定めます。
目標復旧時点。
どの程度のデータ損失を許容するか。
どの時点のデータまでは復旧されるべきかを定めます。
22
ファシリティマネジメント。
ファシリティ(facilty)」とは、設備や施設のこと。コンピュータや、サーバルーム、コンセントなど。ファシリティマネジメントとは、これらの設備を適切に管理・改善する取り組みのことです
施設管理とも呼ばれます。
電源の容量は足りているか、空調は適切に温度管理されているか、upsを使うなど、停電対策はとられているか、落雷時の異常な電圧に対する備えとして、サージプロテクト機能付きのOAタップを使うなどしているか、
23
システム監査というのは、その体制がちゃんとできてますかー?と確認するのごお仕事!システム監査人には、独立性を、はじめとする次の要素が求められる。
外観上の独立性。
客観的に実施するために利害関係があってはならない。
精神上の独立性。
偏向を排し、常に公正かつ客観的に判断しなければならない。
職業倫理と誠実性。
職業倫理に従い、誠実に業務を実施しなければならない。
専門能力。
知識及び技能を保持していること。
つまりシステム監査人は、依頼を受けてシステム監査を行いますが…
その存在は独立しているため、実際に業務を変更する権限は持ち合わせていません。システム監査の結果を受けて実際の改善命令を下すのは、監査の依頼組織もしくは被監査部門の役割となります。
24
システム監査は、監査計画に基き、予備調査→本調査→評論・結論という手順で行われます。画像参照
監査計画の立案。
監査の目的を効率的に達成するための、監査手続の内容とその時期、および範囲などについて適切な計画を立案します。
予備調査。
本調査に先立ち、監査対象の実態把握に努めます。
資料の収集やアンケート調査など、被監査部門の実態調査を行い、適切なコントロールがなされているか確認します。
本調査。
予備調査で作成した監査手続書に従い、現状の確認と、それを裏付ける監査証拠の収集、証拠能力の評価を行い、監査調書としてまとめます。
評価、結論。
監査調書に基づいて、監査対象におけるコントロールの妥当性を評価します。評価結果は監査報告書としてまとめ、その文書内に指摘事項や改善勧告などの監査意見を記します。
25
情報システムにおける可監査性とは、処理の正当性や内部統制を効果的に監査
またはレビューできるようにシステムが設計・運用されていることを指します。
こういった取り組みにより、システムにおいて発生した事柄の過程が確認できること、そこれをさかのぼって検証できることが大事なわけです。
26
このような、システムにおける事象発生から最終結果に至るまでの一連の流れ(ロギングデータなど)を、時系列に沿った形で追跡できる仕組みや記録のことを監査証跡と言います。
こうしてシステム監査人が行った器査の実施記録は、監査調書としてまとめられます。
ここには監査意見が記されるわけですが、その場合は必ず根拠となる事実と、その他関連資料が添えられていなくてはなりません。このような、自らの監査意見を立証するために必要な事実を監査証拠と言います。
27
システム監査人は、監査報告書の記載事項について責任を負わなければなりません。監査意見には大別すると保証意見(システムコントロールが適切になされていますよ)と助言意見(改善が必要な部分がありますよ)の2種類があり、当然そのいずれにおいても責を負います。
ただし前述の通り、システム監査人には実際に業務を変更する権限はありません。改善指導のみ。改善指導のことをフォローアップという。
28
代表的なプログラミング言語
C言語。
OSやアプリケーションなど、広範囲で用いられている言語です。
もともとはUNIXというOSの移植性を高める目的で作られた言語なので、かなりハードウェアに近いレベルの記述まで出来てしまう、何でもアりの柔軟性を誇ります。
COBOL(コボル)。
事務処理用に古くから使われていた言語です。
現在では、新規のシステム開発でこの言語を使うというのはまずなくなりました。ただし、大型の汎用コンピュータなどで古くから使われているシステムでは、過去に作ったCOBOLのシステムが今でも多く稼働しています。そのため、システムの改修などではまだまだ出番の多い言語です。
JAVA。
インターネットのWebサイトや、ネットワークを利用した大規模システムなどで使われることの多い言語です。
C言語に似た部分を多く持ちますが、設計初期からオブジェクト指向やネットワーク機能が想定されていたという特徴を持ちます。
特定機種に依存しないことを目標とした言語でもあるため、Java仮想マシンという実行環境を用いることで、OSやコンピュータの種類といった環境に依存することなく、作成したプログラムを動かすことができます。
BASIC(ベーシック)。
初心者向けとして古くから使われている言語です。
簡便な記述方法である他に、書いたその場ですぐ実行して確かめることができるインタプリタ方式が主流という待徴を持ちます。そのため未完成のコードでも、途中まで実行して動作を確認したりしながら開発を進めることができます。
javascript。
主に動的なWebコンテンツ作成のために用いられる言語です。
インタプリタ方式の、簡便な記述方法によってWebページに組み込まれるスクリプト言語で、入カフォームに書かれた内容のチェックを行ったり、ページの中身を動的に書き換えるといった用途のために、クライアント側で動作します。上述のJavaと似た名前ですが関連性はありません。
Python。
人工知能(Al)技術の機械学習開発に強いとされている言語です。
言語仕様が非常にシンプルであるため習得が容易で、機械学習やディープラーニング(深層学習)向けのライブラリが充実していることから、近年のAIブームによって飛躍的に注目度が上がりました。インタプリタ方式のスクリプト言語です。
29
ソースコードを機械語に訳することで、プログラムはコンピュータが実行できる形式となるわけです。翻訳作業を行うプログラムを総称して言語プロセッサという。この翻訳には、インタプリタ方式や、コンパイラ方式の2種類がある。
インタプリタ方式。
この方式では、ソースコードに書かれた命令を、1つずつ機械語に訳しながら実行します。逐次翻訳していく形であるため、作成途中のプログラムもその箇所まで実行させることができるなど、「動作を確認しながら作っていく」といったことが容易に行えます。インタプリタという名前の言語プロセッサプログラムが逐次翻訳する。ソースコードをインタプリタが翻訳してCpUに渡す。
コンパイラ方式。
この方式では、ソースコードの内容を最初にすべて明訳して、機械語のプログラムを作成します。ソースコード全体を解釈して機械語化するため、効率の良い翻訳結果を得ることができますが、「作成途中で確認のために動かしてみる」といった手法は使えません。
30
疑似言語。
手続名または関数名(引数,・・・)
手続きはまた関数を呼び出し、引数を渡す。
while(条件式)
処理
条件式が真の間、処理を繰り返す。
do
処理
while(条件式)
処理を実行し、条件式が真の間、処理を引き続き繰り返す。
for(制御処理)
処理
endfor
制御記述の内容に基づき、処理を繰り返す。
31
コンパイラ方式でのプログラム実行手順。
ソースコードを機械語化(コンパイル)して、モジュール分けされているからそれを全部くっつけて(リンカ)、これを主記憶に読み込む(ローダ)
32
コンパイラの仕事。
コンパイラの中では、ソースコードを次のように処理する。画像参照
字句解析。
ソースコードに書かれているプログラムコードを字句(トークン)単位に分解します。
構文解析。
分解したトークンを、プログラム言語の構文規則に従って解析します。解析して構文木と呼ばれるデータ構造を生成する。
意味解析。
変数の型や文がプログラム言語の仕様に沿っているかチェックする。
最適化。
処理効率を上げるため、より良いプログラムコードを再編成する。
コード生成。
目的プログラム生成。
33
リンカの仕事。画像参照。
プログラムは、自分で分割したモジュールはもちろん、ライブラリとしてあらかじめ提供されている関数や共通モジュールなどもすべてつなぎあわせることで、実行に必要な機能がそろったプログラムファイルになります。
この、「つなぎあわせる」作業をリンク(連係編集)と呼びます。つまりはこれが、リンカ(連
係編集プログラム)の仕事というわけです。
ちなみに、このような「あらかじめリンクしておく手法」を静的リンキングと呼びます。
一方、この時点ではまだリンクさせずにおいて、「プログラムの実行時に、共有ライブラリ
やシステムライプラリをロードしてリンクする手法」というのも存在します。こちらは動的リンキングと呼びます。
34
構造化プログラミング。
1番上位のメインプログラムは、大まかな流れだけが記述されることになります。
当然それだけじゃ完成しませんから、大まかな流れのひとつひとつをいサブルー
チンという形で別のモジュールに切り出してやる。このサブルーチンも、内部は大まかな流れを記述して、その詳細はサブルーチンで・・と切り出していく。
このように少しすつ処理を細分化していくと、各階層ごとの流れがキチンと整理されることになります。結果、効率よく、ミスの少ないプログラムが出来上がるというわけです。
35
構造化プログラミングでは、原則的にたった3つの制御構造だけを使う。
プログラミングというと、いかにも「複雑な処理が記出されている小難しい文書」みたいなイメージがありますが、実は紐解くとこれだけ単純な構造を相み合わせたものがほとんどだったりするのです。画像参照。
順次構造。
上から順番に処理を実行します。
選択構造。
何らかの条件によって分岐させ、いずれかよ処理を実行します。
繰り返し構造。
ある条件が満たされている間、一定の処理を繰り返します。
36
if〜endifで選択構造をあらわす。
もし〜ならば処理Aを実行せよ。
if(条件)
処理A
endif
それ以外の場合は、処理Bを実行
if(条件)
処理A
else
処理B
endif
elseifは
elseに具体的な条件をつけたい時的な。
それ以外で〜ならば処理Cを実行。
if(条件①)
処理A
elseif(条件②)
処理C
endif
elseifはいくつでも羅列することがでこますし、elseと組み合わせることも可能。その場合の評価順序は次のとおり。画像参照。
上から順に条件が評価されていく。合致する条件があれば、そこの処理を実行し、この回路の外へ抜けていく。
37
擬似言語における繰返し構造には、いくつかのあらわし方があります。そのうちの1つがwhile文です。
while文は、繰返しに入る前に指定された条件を判定します。判定結果が真である間(条件が満たされている間)、while~endwhile間に書かれた処理を繰返し実行します。
条件が真の間、以下の処理を繰り返す。
while(条件)
処理A
endwhile
38
擬似言語における繰返し構造の、もう1つのあらわし方がdo ~ while文です。
do ~ while文は、繰返しに入った後に指定された条件を判定します。判定結果が真である間(条件が満たされている間)、do 〜 while間に書かれた処理を繰返し実行します。
do~whileは上にも書いてある通り後判定です。ここで言う後判定とは、「返しに入った後に判定するね」という意味を指します。つまり、繰返し構造に入って処理を一度行う度に条件制定が行われるわけです。
したがって、はじめから条件式の判定が偽となる(満たされない)状態であった場合でも、その間に書かれた処理は必ず一度は実行されます。
条件が真の間、いじょうの処理を繰り返す。
do
処理A
while(条件)
39
擬似言語における繰返し構造の、さらにもう1つのあらわし方がfor文です。
for文は、制御記述の内容に従って、for~endfor間に書かれた処理(0以上の文の集まり) を繰返し実行します。制御記述には、初期化式、繰返し条件式、変化式の3つを組み合わせて書くようになっており、これによって「どのように繰返すか」をコントロールします。画像参照。
for ~endforによる繰返し構造は、初期化を行った次のタイミングで条件判定が行われます。
したがって、初期化後すでに条件式の判定が偽となる(満たされない)状態であった場合、for~endfor間に書かれた処理は一度も実行されません。
for(初期化式 繰り返し条件式 変化式)
処理A
endfor
40
メモリ上の連続した領域に、ずらりとデータを並べて管理するのが配列です。
配列では同じサイズのデータ(を入れる箱)が連続して並ぶことになるわけですが、その利点として添字があります。画像参照。
これを使うことで、配列内の各データに直接アクセスすることができるようになります。ただし最初に固定サイズでまとめてごっそり領域を確保してしまうため、データの精入や削除などは不得手です。したがって、データの個数自体が頻繁に増減する用途には、あまり適していると言えません。
ちなみに、画像のような一列にずらりと並んだ配列を1次元配列と呼びます。
41
多次元配列といって、添字を増やしていく(つまり「配列の配列』を作る)ことで二次、三次・・とすることができます。ここではイメージのしやすい二次元配列を使って、どのようになるか見てみましょう。縦と横の2を使った、表状の配列を想像してください。画像参照。
二次元配列の場合も、添字を使って個々の要素に直接アクセスできる特徴は変わりません。配列のアクセス指定方法は
(行、列)とする。
42
データとデータを数珠繋ぎにして管理するのがリスト(線形リスト)です。画像参照。
リストの扱うデータには、ポインタと呼ばれる番号がセットになってくっついています。これはメモリ上の位置をあらわす番号で、「次のデータがメモリのどこにあるか」を指し示しています。
43
リストの特徴はその柔軟さです。画像参照。
ポインタさえ書きかえればいくらでもデータをつなぎ替えるえることができるので、データの追加・挿入や、削除などがとても簡単に行えます。
ただし、リストはポインタを順にたどらなければいけないため、配列みたいに「添字を使って個々のデータに直接アクセスする」ような使い方はできません。
44
こうしたリストには、ポインタの持ち方によって、単方向リスト、双方向リスト、循環リストという3つの種類があります。
単方向リスト。
次のデータへのポインタを持つリストです。前の説明でも用いているようにリストといえばこれ。一番基本的な構造です。
双方向リスト。画像参照。
次のデータへのポインタと、前のデータへのポインタを持つリストです。
前後のどちらにもリストを辿っていくことができます。
循環リスト。
次のデータへのポインタを持つリスト。ただし、最後尾データは、先頭データへのポイン夕を持ちます。
全体が環状につながって、ぐるぐる回ることができます。
45
キューは待ち行列とも言われ、最初に格納したデータから順に処理を行う、先入れ先出し(FIFO: First In First Out)方式のデータ構造です。画像参照。
例えば、この順番でデータをキューに格納(エンキュー)した場合、取り出し(デキュー)はこの順番となります。先に入ったものから順に取り出されていくのです。これは例えばスーパーのレジ待ちで、先に並んだ人から順に会計してもらえるのと同じです。
キューは、入力されたデータがその順番通りに処理されなければ困る状況で使われます。
身近な例をあげると、次の処理では、いずれもキューが利用されています。
マウスのポタン押した。
マウスのボタン離した。
リストがが選ばれた。
マウスが動いた。
GUIプログラムはキューにためこまれた
操作を、ひとつずつ処理していきます。
プリンタは印刷用のキューにたまった
データを、ひとつずつ印刷していきます。
46
スタックはキューの逆で、最後に格納したデータから順に処理を行う、後入れ先出し(LIFO:Last In First Out) 方式のデータ構造です。画像参照。
例えば、この順番でデータをスタックに格納(push)された場合、後に入ったものから順に外に出ていくわけ(pop)。イメージとしては、エレベータの最後に乗った人が、最初に降りるようなもの。
47
プログラムが、呼び出したサブルーチンの処理終了後に元の場所へ戻れるのは、「サブルーチン実行後どこに戻るのか」がスタックとして管理されているからです。
48
データを探索するアルゴリズム。
配列など、複数ある箱の中きら目的のデータを探し当てるのが、探索です。
先頭から順に探索していく方法を、線形探索法と呼ぶ。
あらかじめ探索対象のデータ群が「昇順に並んでいる」といった規則性を持つ場合は、二分探索法という。
ハッシュ関数と呼ばれる「一定の計算式」を用いて、データの格納位置をズバリ算出する探索方法がハッシュ法です。
49
箱の中に入っているデータを昇順や降順などのカタチに規則正しく並べ替えるのが整列。基礎的で単純なアルゴリズムのもうひとつが、整列です。
基本交換法(バブルソート)。
隣接するデータの大小を比較、必要に応じて入れ替えることで全体を整列させるのがバブルソートです。画像参照。
隣り合わせたデータを比較して、右の方が小さければ入れ替える。そしたら次は隣をと繰り返す。
50
基本選択法(選択ソート)。
対象とするデータの中から最小値(もしくは最大値)のデータを取り出して、先頭のデー夕と交換。これを繰り返すことで全体を整列させるのが選択ソートです。画像参照。
整列対象のデータから最小値を探す。
それを先頭と入れ替えて先頭が確定。
そしたらまた残りのデータから最小値を、探すと繰り返す。
51
基本挿入法(挿入ソート)。
まず対象とするデータ列を「整列済みのもの」と「未整列のもの」とに分けます。この未整列の側から、データをひとつずつ整列済みの列の「適切な位置」に挿入して、全体を整列させるのが挿入ソートです。画像参照。
対象データをこの2つに分けて(整列済みと未整列)、未整列からひとつ持ってくる。そして、整列済みの中のどの位置が最適か決定して、挿入というのを繰り返す。
52
これまで紹介した整列アルゴリズムは、頭に「基本」とついている通り、いずれも基本的な整列法たちです。
さて、「基本」があれば「応用」もあるのが世の理というもの。というわけで、さらに高速なアルゴリズムである次の3種をご紹介。ざっくり特徴を押さえておきましょう。
シェルソート。
ある一定間隔おきに取り出した要素で部分列を作り、それぞれ整列してもとに戻す。今度はさらに間隔をつめて要素を取り出し、再度整列。取り出す間隔が1になるまでこれを繰り返すことで整列を行う方法です。画像参照。
四つおきに取り出して、その中でそれぞれ整列し、ひとつに戻す。今度は2つおきに取り出して、整列して〜と繰り返す。
53
クイックソート。
中間的な基準値を決めて、「それより小さい値」グループと「それより大きい値」グループに振り分けます。その後、それぞれのグループ内でまた基準値を決めて振り分けて、と繰り返すことで整列を行う方法です。画像参照。
基準値を決めて、それより小さいのと、より大きいのとに分ける。
そしたらそれぞれのグループごとに、また基準値を決めて、と繰り返す。
54
ヒープソート。
未整列の部分を「順序木」といわれる木構造に構成して、そこから最大値もしくは最小値を取り出して整列済みの側へと移します。
これを繰り返すことで、未整列部分を縮めて整列を行う方法です。画像参照。
未整列の配列から、順序木を構築。
根を取り出して整列済みに移し、残りでまた順序木を作ってーと繰り返す。
55
オブジェクトとは、データ(属性)と
それに対するメソッド(手続き)をひとつにまとめた概念です。
例えば、ボタンオブジェクトだと、データが表面の文字、ボタンの色、大きさなど、メソッドが初期化処理、文字変更処理、クリック時処理などをひとまとめになってるわけ!
このようにデータとメソッドがひとまとめになっていることをカプセル化という。情報を隠蔽することができ、書き換えられる心配がない。
このオブジェクトの仕様のことをクラスという。クラスとオブジェクトの関係は型とその型から作られた具体例の関係。このクラスを呼び出して実際にメモリ上に生成する実体化したボタンなどをインスタンスという。インスタンスはオブジェクトとほぼ同じ意味をもつ。
クラスには階層構造がある。ボタンのインスタンスがあるとして、ボタンには上位クラス(スーパークラス)、下位クラス(サブクラス)がある。例として動物がスーパークラスだとすると、犬や猫がサブクラスにあたる。要はスーパークラスが大枠でサブクラスがより具体化されたもの。このようにサブクラスかまスーパークラスの特性を受け継ぐことを継承(インヘリタンス)という。
56
頭の中の設計をまとめるだけにとどまらず、それを分かりやすくビジュアル化し共有する為の統一言語をUMLという。
UMLで用いる図は、13種類あります。
大きく分けて、システム構造を示す構造図、システムの振る舞いを示す振る舞い図の二つに分けることができる。
構造図
クラス図 クラスの定義や、関連付けなど、クラス構造をあらわす。
オブジェクト図 クラスを実体化させるインスタンス(オブジェクト)の、具
体的な関係をあらわす。
パッケージ図 クラスなどがどのようにグループ化されているかをあらわす。
コンポーネント図 処理を構成する複数のクラスを1つのコンポーネントと見なし、その内部構造と相互の関係をあらわす。
複合構造図 複数クラスを内包するクラスやコンポーネントの内部構造をあらわす。
配置図 システムを構成する物理的な構造をあらわす。
振る舞い図
ユースケース図 利用者や外部システムからの要求に対して、システムがどのような振る舞いをするかをあらわす。
アクティビティ図 システム実行時における、一連の処理の流れや状態遷移
をあらわす。フローチャート的なもの。
状態マシン図 イベントによって起こる、オブジェクトの状態遷移をあらわす。
シーケンス図 オブジェクト間のやり取りを、時系列にそってあらわす。
コミュニケーション図 オブジェクト間の関連と、そこで行われるメッセージのやり取りをあらわす。
相互作用概要図 ユースケース図やシーケンス図などを構成要索として、より大枠の処理の流れをあらわす。アクティビティ図の変形。
タイミング図 オブジェクトの状態選移を時系列であらわす。
57
集中処理(セキュリティ確保や運用管理が簡単)と分散処理(システムの拡張が容易、故障しても全体には影響しない)のいいとこ取りをしたクライアントサーバシステムが主流となっている。
58
クライアントサーバシステムで、サーバ側へ依存度を高くしたのがシンクライアントです。クライアント側の端末は、入力や表示部分を担当するだけで、情報の処理や保管といったきのうあはすべてサーバに任せます。
一方、完全な分散処理型のシステムとしてはピアツーピアがあります。これは、ネットワーク上で協調動作するコンピュータ同士が対等な関係でやり取りするもので、サーバなどの一元的に管理する存在を必要としません。負荷を分散している。
59
画像参照。クライアントサーバシステムの機能を、プレゼンテーション層・ファンクション層・データ層の3つに分けて構成するシステムを、3層クライアントサーバシステムと言います。
3層クライアントサーバシステムら、ネットショッピングなどwebを用いるシステムと親和性が高く、その構築に多く用いられる構成です。
60
システムの稼働形態として、要求に対して即座に処理を行い、結果が反映されるものをオンライントランザクション処理といいます。リアルタイムに処理を行い、結果を反映する必要のあるシステムは、こうした形態で処理を行います。例えば、銀行ATMとかチケット予約とかはこれ。
61
一方、「別にそーんなリアルタイムに反映しなくてもいいしー」という処理の場合は、一定期間ごとに処理を取りまとめて実行します。これをバッチ処理といいます。リアルタイムで更新する必要がなかったり。
あまり回線に負荷を与えたくないとか
ある程度まとめて処理することに意味があるとかの場合はこっち
各支店の勤急データを月に1回本社に吸い上げて給与計算したりとかですね。
ちなみに普段コンピュータを使っていて普通に行う次のような操作を対話型処理と呼びます。コンピュータが
インフォメーション
を出し、利用者が
それに答えたり
情報を与えたり
しながら
処理が進む。
62
画像参照。クラスタリングとは、複数のコンピュータをネットワーク上で結合させることで、ひとつのシステムとして構築する技術です。この技術を用いて構成されるシステムがクラスタリングシステムです。利用者にはひとつのシステムに見えてます。
63
クラスタリングシステムの運用形態は、負荷分散クラスタ、HAクラスタ、HPCクラスタなどに大別されます。
負荷分散クラスタ。
複数のコンピュータに処理を分散させることで、1台あたりの負荷を低く抑えるシステム構成です。たとえば、アクセス数の多い商用のWebサイトなどで用いられています。画像参照。ロードバランサという
負荷分散装置が各サーバにアクセスを振り分けることで、特定のマシンに負荷き集中することを防ぎます。
64
HA(High Availability)クラスタ。
High Availabiltyとは「高可用性の意味。稼働中のコンピュータに障害が発生した場合、待機していた別のコンピュータが速やかに処理を引き継ぐことで、停止時間を最小限に抑える(可用性を高く保つ)システム構成です。画像参照。
通常は稼働系が処理を担当しています。しかし稼働系が故障しま場合は、待機系が速やかに処理を引き継ぎます。
稼働系から待機系に切り替わることをフェールオーバ。稼働系が復旧してそちらへ戻すことをフェールバック。
65
HPC(High Performance Computing)クラスタ。
膨大な計算量を要するようなひとつの処理を分割し、複数のコンピュータが並行して処理にあたることで、全体の処理速度を高めるシステム構成です。画像参照。
膨大な計算処理も分割して一斉に並列処理を行うことで高速化が可能になる。
66
システムの処理能力をもっと向上させたい!という場合、そのアプローチとしてスケールアップとスケールアウトという2つの手法が考えられます。特徴は次の通りです。
スケールアップ。
「サーバ自身の性能をより高いものに交換する」ことにより、システムの処理
能力を高めること。
スケールアウト。
「システムを構成するサーバの台数を増やす」ことにより、システムの処理能力を高めること。
67
グリッドコンピューティング。
グリッドコンピューティングとは、小型のパソコンから大型コンピュータに至るまで、インターネットなどのネットワーク上にある複数のプロセッサに処理を分散して、大規模な処理を行う方式です。
画像参照。インターネットのような
広域ネットワークにつながっている様々な計算資源。CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力やHDDなどの記憶容量のこと。これらを組み合わせて仮想的なひとつのコンピュータシステムとすることで、膨大な計算能力や記憶領域を利用者へ提供できるようになる。
68
SOA(サービス指向アーキテクチャ:
Service Oriented Architecture)。
これは「ドーンと1個のシステム」を構築するんではなくて、個々の機能を「サービスというコンポーネント化(部品化)」をして、それを組み合わせることでシステムを構築しましょうよという考え方です。画像参照。
従来型では、ドーンと一個のシステムとして構築する。その為、各機能が密接に絡み合っているため、機能の流用や改修がし辛い。それがSOAでは、サービスというコンポーネントの集まりとして構築する。その為、コンポーネントの再利用や変更改修が容易。このような構成とすることで、ビジネス変化に対応しやすくするなどの効果ぎ期待できる。
69
システムの優劣を何を基準に判断するかの指標として、スループット、レスポンスタイム、ターンアラウンドタイムがある。
スループットは、システム全体の仕事量。
レスポンスタイムはコンピュータに処理を依頼し終えてから、応答が返されるまでの時間。
一方ターンアラウンドは依頼してから応答終了まで。
70
全く同じ処理のシステムを2組用意して、システムを止めない工夫をすることをデュアルシステムという。コストはかかる。処理結果を互いにに付き合わせて誤動作がないか互いに監視している。いずれかが異常事態の時には、そっち側のシステムを切り離す。
71
デュアルシステムはコストがかかるので、としてデュプレックスシステムというのがある。これは2組のシステムのうち、一つにら普段は別の作業をさせておくことで、機材に無駄がなくコストパフォーマンスが高い。主系が故障したら、従系が処理を担当するが、切り替え時間が発生するので、デュアルシステムより対応に時間がかかる。
72
故障しても大丈夫なように対策しておくことをフォールトトレラントという。
フォールトトレラントを実現するための方法には3つがある。
フェールセーフ。安全優先したい時。
故障した時、安全性を確保する方向で故障すること。例)赤の状態で停止する信号機、
フェールソフト。継続優先したい時。
故障した時、一部機能を切り離し動作を継続させる。例)ジェット機がエンジン一つ壊れても飛び続けることができる
フールプルーフ。
変な操作をしても誤動作しないようにする。例)電子レンジがドアを閉めないと加熱しない、プラスマイナス向きが合ってないと入らない電池ボックス、フタが開いてると回らない洗濯機。
品質管理等を徹底して、故障そのものを発生させないという考え方。フォールトアボイダンス
73
機械の故障発生頻度と、時間の関係をグラフにするとバスタブ曲線になる。
なぜこのような形になるかというと、
導入初期は製造上の欠陥などによる故障率が、高い為。
導入して、初期故障期間を過ぎれば、ほぼ安定稼働する。発生する故障といえば、操作ミス等による故障。
その後、時間が経っていくと、経年劣化が進み、故障率が高くなっていく。
74
バックアップの種類。
フルバックアップ。
保存されている全てのデータをバックアップすること。
差分バックアップ。
一回フルバックアップを行った上で、次バックアップを行う際に、変更された部分だけをバックアップすること。あくまで、差分とはフルバックアップとの差分という意味なので、3回目は2回目の分も含んでバックアップすることになる。
増分バックアップ。
バックアップの種類に限らず、変更された部分だけをバックアップしていくことを繰り返す。
75
CEOは最高経営責任者で、株主たちの総意によって任される。
一方、情報システム戦略を総括する最高責任者がCIOです。
プロダクトイノベーション。
新商品の開発め、他社との差別化。例)iPhone、検索サイトGoogle
プロセスイノベーション。
例)ゾゾスーツ、
76
グリーン購入。
会社で何か購入するときでも、環境を考慮して、必要性を考えて、リサイクル品など、環境負荷低減に努める事業者からの購入など。
77
企業内に蓄積される膨大なデータを分析、加工して専門家の力を借りることなく、データを適切に見れるようにしたツールをBIツールという。ビジネスインテリジェンス
78
組織全体の情報システムを整理することで、全体を最適化する手法が、エンタープライズアーキテクチャ。最適化は四つの体系、業務、データ、機能、テクノロジに分析することで、全体のシステム像を把握することができる。エンタープライズアーキテクチャで用いられる現状とあるべき姿のギャップを埋める手法をギャップ分析という。
79
ネット通販とか、インターネットの発達により商取引のとこを電子商取引(EC)という。そこで必要になるのが、データ形式の統一化と、機密保持。これをEDIという。エレクトロニックデータインターチェンジ。
EDIでは下層から順に、情報伝達規約、情報表現規約、業務運用規約、取引基本規約に分かれている。
80
外部から不正な改ざんや、解読に耐える性質を、耐タンパ性という。分解が困難な作りになっていて、無理に行うと内部回路が破壊される作り、光センサが入っていて、ケースが開けられたら内部情報を消去する作り、中のチップが暗号化されていて、読出しても解読できない。要は外部からの干渉を、受けると内部破壊を起こす取り組み。
81
従来の店舗では、売上というのは一般に、上位(人気)20%の商品が売上の80%を占めるはずだった。これは商品の陳列に物理的スペースが必要だからである。画像参照。しかし、インターネット上の店舗だと、無限に陳列できるので、あまり売れない商品でも、商品数によっては、合計の売上が全体で見た時に無視できない割合にまで膨らみます。これをロングテールと呼ぶ。(恐竜の尻尾みたいだから)
82
シェアリングエコノミーとは、ネットを介して個人が保有する遊休資産の貸し借りを仲介するさーびすのこと。
83
新しい事業を立ち上げる技として、丸ごと他社を買収するのがM&A。
限られた経営資源を効率よく本業に集中させたいが為に、それ以外の部分を他社に業務委託することをアウトソーシング。
84
自社の強みと弱み分析に、swot分析がある。この手法は、自社の現状を、強み、弱み、機会、脅威の四つに分けられる。自社でコントロールできる内部要因に分類されるのは、強み、弱み。
外部環境に起因するものは、機会、脅威。
85
縦軸に市場成長率、横軸に市場占有率(シェア)をもってきて、自社の製品やサービスの戦略的位置付けを分析する手法を、プロダクトポートフォリオマネジメント(PPM)という。
86
他社には真似できない、自社の強みををコアコンピアンスという。コアコンピアンスを核とする経営をコアコンピアンス経営という。
他社の強みを参考にして改善していく手法をベンチマーキングという。
87
コトラーの競争地位戦略。
市場シェアの観点から企業を4つに類型化。
リーダ戦略。
市場において最大のシェアを誇るリーディングカンパニー。業界の牽引役として、需要を開拓し、市場全体の拡大を目指します。
チャレンジャ戦路。
業界の2番手、3番手にあたる企業。リーダに挑戦してトップを狙うと問時に、リーダとの差別化を図りシェアの拡大を目指します。
フォロワ戦路。
業界の2番手、3番手にあたる企業ですが、リーダに挑戦するのではなく、その模倣をすることで、開発コストを抑えながら収益向上を図ります。
ニッチャ(ニッチ)戦路。
市場全体におけるシェアは高くないものの、小規模な市場に特化することで独自の地位を獲得し、他にはない価値を提供する企業です。こうした小規模な市場のことを隙間市場(ニッチ市場)と呼びます。
88
顧客情報などを分析することで営業戦路に生かすのがリレーションシップマーケティング。
そのマネジメント手法がCRM (Customer Relationship Management) です。
89
法律、各種ルール、モラルを守って企業活動を行うことをコンプライアンスという。それを監視することをコーポレートガバナンス。コーポレートガバナンスの具体例が内部統制。
作り手の権利を守る、それが知的財産権。
知的財産権は2つに分けられ、一つが著作権。著作権には著作人格権は生みの親に付与される権利で、創作された時点で自動的に権利が発生する。他人に譲渡したり相続したり不可。
著作財産権は著作物から発生し、こちらは他人に譲渡したり相続することができる。
知的財産権のもう一つが産業財産権。こっとは特許庁に登録してはじめて、権利が発生する。特許権や、特許ほど高度ではない考案の実用新案権、製品デザインの意匠権、マークなどの商標権がある。
90
業務として会社従業員が著作物の創作を行うと、法人の発意に基づくかつ、法人名義の著作物であれば、特段の取り決めがない限り、その制作担当者を雇用していた法人側に著作権が帰属する。
91
著作権は、アイデアを出した側ではなく、実際に作った側に発生する。派遣契約での著作権は派遣社員が作ったものは、派遣先からの指示で作ったものなので、派遣先に帰属する。
請負契約では、請負った会社のもの。
請負の請負では、1番下層の請負のもの。
92
製造物責任法とは、その製造物の欠陥によって消費者が何らかの損害を負った場合に製造業者が負うべき損害賠償責任。仮に、欠陥が製品を構成する外注部品にあったとしても、その製品を輸入して作った者のせいになる。
93
労働基準法と労働者派遣法。
シュリンクラップ契約。
商品パッケージを覆う透明フィルム包装のこと。この契約では、包装をといた時点で使用許諾契約が成立。
不正アクセス禁止法。
その名の通り。
日本において、社会インフラとなっている情報システムや情報通信ネットワークへの防御施策を、効果的に推進するための政府組袋の設置などを定めた法律が、サイバーセキュリティ基本法です。ここで、サイバーセキュリティの対象となるのは、「電子的方式、磁気的方式その他人の知覚によっては認識することができない方式(以上をまとめて電磁的方式と呼称)により記録され、又は発信され、伝送され、もしくは受信される情報」です。
94
プロバイダ責任制限法。
プロバイダ責任制限法とは、インターネット上で権利侵害があった場合に、特定電気通信役務提供者(プロバイダなど)が負うべき損害賠償責任の範囲や、権利侵害を行った発信者の情報を、被害者が開示請求する権利について定めたものです。
不正アクセス禁止法と電子計算機損壊等業務妨害罪と、不正指令電磁的記録に関する罪の、違い。
不正アクセス禁止法は、他人のIDパスワードを盗用してシステムを利用したり、漏洩させたりと簡単なもの、不正司令電磁的記録に関する罪は、不正指令電磁的記録とはコンピュータウイルスのことめあり、ウイルスの作成、提供、などに関することを指す。電子計算機損壊等業務妨害罪は、物理的にコンピュータ等を破壊する行為。
95
幅広いアイデアを引っ張り出す手法として、反論なしの意見の出し合いいわゆるブレーンストーミングがある。
しかし大勢人では収拾がつかなくなるので、全体を少人数のグループに分けて、グループごとに結論を出して、最終的に全体の結論を出す方法をバスセッションという。
ブレーンストーミングで出し合った意見はKJ法で整理する。具体的には、アイデアはカードとして書き出し、それを関連同士をまとめ、それに見出しをつけ、グループ間の関係を図式化し最後はそれを文書にまとめる。
96
複数の条件と、それによって決定づけられる行動とを整理するのに有効なのが決定表(デシジョンテーブル)です。画像参照。行さえ足せばどんどん条件を増やすこともできますから、複雑な条件だってバッチリです。そんなわけでこの技法は、プログラミング時に内部の処理条件を整理したり、試験パターンを作ったりという用途でも使われています。
97
レーダチャート。
項目ごとのバランスを見るのに役立つ。
棒グラフ。
数や量を比較。
折れ線グラフ。
時間の経過による変化。
円グラフ。
各データの割合を見たい時。
98
QC(qualitity control 品質管理 )七つ道具。
層別、パレート図、散布図、ヒストグラム、管理図、特性要因図、チェックシート。
層別はグラフとかではなく考え方。
データを属性ごとに分ける。
パレート図は棒グラフと折れ線グラフを合わせたもの。現象や原因などの項目を件数の多い順に棒グラフとして並べ、その累積値を折れ線グラフにして重ね合わせる。
ヒストグラム。
品質のばらつきなどを捉える画像あり
99
管理図。
時系列的に発生するデータのばらつきを折れ線グラフであらわす。
100
特性要因図。
結果に対してどのような原因が関連しているかを明確にする。
問題一覧
1
モジュールの独立性を測る尺度として用いられるのがモジュール強度とモジュール結合度です。
モジュール強度。
モジュール内の機能が、内部でどのように関連付いているかを示す尺度です。要するに「どれだけ機能的に特化できているか」をあらわすもので、これが高いものほど、「モジュールの独立性が高くて好ましい」となります。
2
モジュール結合度。
モジュールが、他のモジュールとどのように結合するかを示す尺度です。具体的には、「どんなデータをやり取りすることで、他のモジュールと結合するか」をあらわすもので、これが弱いほど、「モジュールの独立性が高くて好ましい」となります。
この結合度を理解するには、次の言い回しを知っておく必要があります。
3
作成したプログラムのテストの流れ。
まず、モジュール単位で単体テストを行う。
そして、モジュール同士を結合させて、結合テストを行う。
そして、システム全体を検証する、システムテストを行う
4
単体テストで、モジュールを検証する手法として用いられるのがブラックボックステストとホワイトボックステストです。
ブラックボックステストとは、とりあえず、要求に対して、ちゃんと返してくれるかを見る。
ホワイトボックステストとは、どのような仕組みで動いているのかを確認しなかまら、みる。
5
ブラックボックステストを行うにあたり、入力として用いるデータは、漫然と決めても効果がありません。ちゃんと、「何を検証するため」に与えるデータなのか、その意味を明確にしておくことが大切です。そのためテストデータを作成する基準として用いられるのが、同値分割と限界値分析です。
例えば体脂肪を入力すると、ちょい痩せ、標準、ちょい肥満という結果を返してれるモジュールがあったとする。画像参照。
同値分割では、これをデータの範囲内で分けてくれるかを見るテストを行う。
限界値分析では、範囲の境目をチェックします。境界前後の値をテストデータにする。
このようにチェックを行うことで、(15<値)と判定すべきところを
(15<=値)と判定してしまっているミスなどが発見できます
6
ホワイトボックステストを行うにあたっては、「どこまでのテストバターンを網羅するか。
を定めた上でテストケースを設計します。それぞれの網羅基準で、必要とされるテストデー夕がどのように変化するか覚えておきましょう。画像参照。
命令網羅。
すべての命合を最低1回は通すようにする
テストです。命今が1度実行できれば良いので、この場合は
Yesの分岐を通る
テストパターンがあればOK!
判定条件網羅。
すべての分時を最低1回は通すようにする
テストです。yesの分岐とNoの分岐
2っ分のテストパターンが必要。
条件網羅。
個々の条件が真と偽の値も最低1回は満たすようにするテストです。それぞれで1度ずつ真と個を試せていれば良い。
複数条件網羅。
複数の条件がとりうる。真偽値
全ての組み合わせを網羅するテストです。
とにかで全ての細み合わせを検証する。
7
結合テストでモジュール間のインタフェースを確認する方法には、トップダウンテストやボトムアップテストなどがあります。画像参照。
上位モジュールから、先にテストを済ませていくのがトップダウンテストです。
既存の流用とかでない限り
下位のモジュールは未テストだったりするのでその場合はスタブと呼ばれる仮のモジュールをくっつけて、インタフェースの確認を行います。
それとは逆に、下位モジュールからテストを行うのがボトムアップテストです。
この場合は上位がまた未テストなので、ドライバと呼ばれる仮のモジュールをくっつけて、インタフェースの確認を行います。
結合テストには他にも、トップダウンテストとボトムアップテストを組み合わせて行う折衷テストや、すべてのモジュールを一気につなげてテストするビックバンテストなどがあります。
8
リグレッションテスト(退行テスト)というのは、プログラムを修正した時に、新たにバグを誘発することになっていないか)を確認するためのテストです。
9
リグレッションテストの、永久ループを無くすために、どこでけじめをつけるのか、「もうこれでバグは100%ありません」と言える指標はありません。そこで用いるのがバグ管理図です。画像参照。
横軸でテスト項目の消化件数(や時間)、縦軸で発見したバグの累積件数をあらわしたのがバグ管理図。
一般に、キチンとテストされて品質が高まっていれば、左図の信頼度成長曲線みたいな形状の線ができるとされています。逆にそうした傾向の線にならず、たとえば下図のような線が描けてしまう場合は、プログラムの品質を疑わないといけません。
10
プロジェクトマネージャーは、プロジェクトの納期や予算、品質といったものを管理する。プロジェクトマネジメントの技法を体系的にまとめたのが、米国プロジェクトマネジメント協会がまとめたPMBOK (Project Management Body of Knowledge) です。従来、マネジメントといえば「QCD(品質、コスト、納期)」の3つに着目した管理手法が一般的でしたが、PMBOKでは次の10個の知識エリアをもとに管理すべきであるとしています。
11
WBSとはWork Breakdown Structureの路。プロジェクトに必要な作業や成果物を、階層化した図であらわすものです。PMBOKでいうスコープ管理に活用されます。
たとえば、いきなり「Googleみたいな検索システムを作れ!」と言われても途方に暮れるしかないですよね?
でも、これ以上ないくらいに作業を細分化することができたとしたら…・?
複雑な作業であっても細かい単位に分割していくことで、個々の作業が単純化できて、把握しやすくなるというわけです。
12
ソフトウェアの世界は「ネジや釘みたいな原価のはっきりした部品」が揃ってるかけじゃない。そのための見積り手法として代表的なのが次の2つです。
プログラムステップ法
従来からある見積り手法で、ソースコードの行(ステップ)数により開発コストを出す手法です。
例えば、このシステムを作るためには、何万行のプログラムを書く必要があり、弊社の基準は1日に何行製造なので、何万÷何行で、開発コストを算出する。
ファンクションポイント法。
表示画面や印刷する帳票、出カファイルなど、利用者から見た機能に着目して、その個数や難易度から開発コストを算出する手法です。利用者にとっては、見える部分が費用化されるため、理解しやすいという特徴があります。例えば、このシステムを作るためには、画面の数はいくつで入出力はいくつなどと洗い出し、機能ごとの難易度にあわせて点数化したりして、最後に独自の係数をかけめ、開発コストを出す。
13
アローダイアグラムと同じく作業スケジュールを表現する図法の一種にプレシデンスダイアグラム法(PDM) があります。この図法では、個々のアクティビティ(作業)を四角で囲み、それらを矢印でつなぐことによって、アクティビティの所要期間と順序、依存関係を表現し
ます。
14
スケジュール短縮のために用いる代表的な手法が、クラッシングとファストトラッキングの2つです。
グラッシングとは、コストの増大を最小限に抑えながら、資源を追加投入して、スケジュールの所要時間を短縮する方法。例えば、3人でやっていたものを、1人追加して、作業完了に必要な日数を短縮する。
画像参照。ファストトラッキングとは、「通常は順番に実施されるアクティビティやフェーズを並行して遂行するスケジュール短縮技法」です。ただし、手戻りが発生する要因となる恐れ
15
「サービスを提供するにあたっての、管理・運用規則に関するベストプラクティス(最も効率の良い手法・プロセスなどのこと。ようするに成功事例)が、発国において体系的にまとめられました。これをITIL(アイティル: Information Technology Infrastructure
Library)と呼びます。
ITILは大きく分けて、ITサービスの日々の運用に関する作業をまとめたサービスサポートと、長期的な視点で「ITサービスの計画と改善と図るサービスデリバリの2つによって構成され、「サービスマネジメントの標準的なガイドラインとして使われています。
16
サービスレベルアグリーメント(SLA)とは、日本語にするとサービスレベル合意書、サービスの提供者とその利用者との間で、「どのような内容のサービスを、どういった品質で提供するか」を事前に取り決めて明文化したものをいいます。
サービス品質の目標設定を、両者合意のもとで行うわけです。この時その項目は、漢然とした表現ではなく、具体的な数値を用いて定量的な判断ができるようにしておく必要があります。「問い合わせに対しては・〇時間以内に返答する」などとするわけですね。
なんでそれが大事なのかというと...
まあそれは極端な話だとしても、表現があいまいでは目標が達成できたかもわかりませんから、困るわけですね。
ちなみに、設定した目標を達成するために、計画一実行一確認一改善というPDCAサイク
<ル(P.760) を構築し、サービス水準の維持・向上に努める活動を、サービスレベルマネジメント(SLM: Service Level Management)といいます。
17
ITILの中で、「ITサービスの日々の運用に関する作業」をまとめたものがサービスサポート。
次の1機能と5つの業務プロセスによって構成されています。
機能。
サービスデスク(ヘルプデスク)。ITサービスを利用する顧客と、ITサービスを提供する組織の間の一元的な窓口として活動する。
プロセス。
インシデント管理。発生したインシデントに対し、可能な限り迅速に通常のサービス運用を回復して、ビジネスへの悪影響を最小限に抑える。
問題管理。
インシデントや問題の根本原因を最小限
に抑制し、また再発を防止する”
構成管理
構成管理データベースを用いてITサービス提供に必要な構成アイテム(Cl)を常に正しく把握し、各プロセスに効果的な情報を提供する。
(システムに変更が入ったら
この中身もちゃんと更新する)
変更管理。
変更要求(RFC)の内容について、変更に伴う影響を検証してインパクトや優先度の評価を行い、認可または却下を決定する。
リリース管理
承認の得られたコンポーネントを、正しい場所に、適切な時期にリリースする。
18
サービスデスクは、その組織をどこに置くか、によって次のように分類する。
ローカルサービスデスク。支社に窓口を置くことで、ユーザの拠点内、もしくは物理的に近い場所に設けられたサービスデスクです。メリット、現地で直接対応することが可能なので、問題の把握が容易となる。
中央サービスデスク。
一箇所に窓口を集約させたサービスデスク。メリット、最小限のスタッフで済むようになりコストが抑えられる。情報管理しやすい
バーチャルサービスデスク。
インターネットなどの通信技術を利用することによって、実際は各地に分散しているスタッフを擬似的に一箇所の拠点で対応しているように見せるサービス。
その他にも、時差のある複数の地域に拠点を設けることで24時間対応を可能にする、フォロー・ザ・サンなどがあります。
19
ITILの中で、長期的な視点でITサービスの計画と改善を図る」のがサービスデリバリ。
次の5つの業務プロセスによって構成されています。
サービスレベル管理。
PDCAサイクルによってサービスの維持、向上に努める。
キャパシティ管理。
容量、能力などシステムのキャパシティを管理し、最適なコストで、サービスが現在及び将来の合意された需要を満たすに足る十分な能力をもっていることを確実にする。
可用性管理。
サービスの利用者が利用したい時に確実にサービスを利用できるよう、ITサービスを構成する個々の機能の維持管理を行う。
ITサービス継続性管理。
顧客と合意したサービス継続を、あらゆる状況の下で満たすことを確実にする。具体的には、災害発生時であっても、最小時間で「サービスを復旧させ、事業継続のために必要な計画立案と試験を行う。
ITサービス財務管理。
「サービスにかかわるコストの予測と、実際に発生したコストの計算
や課金管理を行う。
20
事業継続計画(BCP:Business Continuity Plan)
BCP Business Continuity Plan) は、直訳すると、事業を途切れさせず、継続するための計画、みたいな意味。
災害があっても、事業を中断させない、中断しても可能な限り短い期間で復旧させる。
21
BCPでは、復旧目標として次の三つを定める。画像参照
目標復旧レベル。
どの程度まで復旧させる必要があるか。
復旧目標とする業務範囲や処理
能力などを定めます。
目標復旧時間。
システムダウンを許容できる時間の決定。目標復旧レベルまで復旧するのに要する時間を定めます。
目標復旧時点。
どの程度のデータ損失を許容するか。
どの時点のデータまでは復旧されるべきかを定めます。
22
ファシリティマネジメント。
ファシリティ(facilty)」とは、設備や施設のこと。コンピュータや、サーバルーム、コンセントなど。ファシリティマネジメントとは、これらの設備を適切に管理・改善する取り組みのことです
施設管理とも呼ばれます。
電源の容量は足りているか、空調は適切に温度管理されているか、upsを使うなど、停電対策はとられているか、落雷時の異常な電圧に対する備えとして、サージプロテクト機能付きのOAタップを使うなどしているか、
23
システム監査というのは、その体制がちゃんとできてますかー?と確認するのごお仕事!システム監査人には、独立性を、はじめとする次の要素が求められる。
外観上の独立性。
客観的に実施するために利害関係があってはならない。
精神上の独立性。
偏向を排し、常に公正かつ客観的に判断しなければならない。
職業倫理と誠実性。
職業倫理に従い、誠実に業務を実施しなければならない。
専門能力。
知識及び技能を保持していること。
つまりシステム監査人は、依頼を受けてシステム監査を行いますが…
その存在は独立しているため、実際に業務を変更する権限は持ち合わせていません。システム監査の結果を受けて実際の改善命令を下すのは、監査の依頼組織もしくは被監査部門の役割となります。
24
システム監査は、監査計画に基き、予備調査→本調査→評論・結論という手順で行われます。画像参照
監査計画の立案。
監査の目的を効率的に達成するための、監査手続の内容とその時期、および範囲などについて適切な計画を立案します。
予備調査。
本調査に先立ち、監査対象の実態把握に努めます。
資料の収集やアンケート調査など、被監査部門の実態調査を行い、適切なコントロールがなされているか確認します。
本調査。
予備調査で作成した監査手続書に従い、現状の確認と、それを裏付ける監査証拠の収集、証拠能力の評価を行い、監査調書としてまとめます。
評価、結論。
監査調書に基づいて、監査対象におけるコントロールの妥当性を評価します。評価結果は監査報告書としてまとめ、その文書内に指摘事項や改善勧告などの監査意見を記します。
25
情報システムにおける可監査性とは、処理の正当性や内部統制を効果的に監査
またはレビューできるようにシステムが設計・運用されていることを指します。
こういった取り組みにより、システムにおいて発生した事柄の過程が確認できること、そこれをさかのぼって検証できることが大事なわけです。
26
このような、システムにおける事象発生から最終結果に至るまでの一連の流れ(ロギングデータなど)を、時系列に沿った形で追跡できる仕組みや記録のことを監査証跡と言います。
こうしてシステム監査人が行った器査の実施記録は、監査調書としてまとめられます。
ここには監査意見が記されるわけですが、その場合は必ず根拠となる事実と、その他関連資料が添えられていなくてはなりません。このような、自らの監査意見を立証するために必要な事実を監査証拠と言います。
27
システム監査人は、監査報告書の記載事項について責任を負わなければなりません。監査意見には大別すると保証意見(システムコントロールが適切になされていますよ)と助言意見(改善が必要な部分がありますよ)の2種類があり、当然そのいずれにおいても責を負います。
ただし前述の通り、システム監査人には実際に業務を変更する権限はありません。改善指導のみ。改善指導のことをフォローアップという。
28
代表的なプログラミング言語
C言語。
OSやアプリケーションなど、広範囲で用いられている言語です。
もともとはUNIXというOSの移植性を高める目的で作られた言語なので、かなりハードウェアに近いレベルの記述まで出来てしまう、何でもアりの柔軟性を誇ります。
COBOL(コボル)。
事務処理用に古くから使われていた言語です。
現在では、新規のシステム開発でこの言語を使うというのはまずなくなりました。ただし、大型の汎用コンピュータなどで古くから使われているシステムでは、過去に作ったCOBOLのシステムが今でも多く稼働しています。そのため、システムの改修などではまだまだ出番の多い言語です。
JAVA。
インターネットのWebサイトや、ネットワークを利用した大規模システムなどで使われることの多い言語です。
C言語に似た部分を多く持ちますが、設計初期からオブジェクト指向やネットワーク機能が想定されていたという特徴を持ちます。
特定機種に依存しないことを目標とした言語でもあるため、Java仮想マシンという実行環境を用いることで、OSやコンピュータの種類といった環境に依存することなく、作成したプログラムを動かすことができます。
BASIC(ベーシック)。
初心者向けとして古くから使われている言語です。
簡便な記述方法である他に、書いたその場ですぐ実行して確かめることができるインタプリタ方式が主流という待徴を持ちます。そのため未完成のコードでも、途中まで実行して動作を確認したりしながら開発を進めることができます。
javascript。
主に動的なWebコンテンツ作成のために用いられる言語です。
インタプリタ方式の、簡便な記述方法によってWebページに組み込まれるスクリプト言語で、入カフォームに書かれた内容のチェックを行ったり、ページの中身を動的に書き換えるといった用途のために、クライアント側で動作します。上述のJavaと似た名前ですが関連性はありません。
Python。
人工知能(Al)技術の機械学習開発に強いとされている言語です。
言語仕様が非常にシンプルであるため習得が容易で、機械学習やディープラーニング(深層学習)向けのライブラリが充実していることから、近年のAIブームによって飛躍的に注目度が上がりました。インタプリタ方式のスクリプト言語です。
29
ソースコードを機械語に訳することで、プログラムはコンピュータが実行できる形式となるわけです。翻訳作業を行うプログラムを総称して言語プロセッサという。この翻訳には、インタプリタ方式や、コンパイラ方式の2種類がある。
インタプリタ方式。
この方式では、ソースコードに書かれた命令を、1つずつ機械語に訳しながら実行します。逐次翻訳していく形であるため、作成途中のプログラムもその箇所まで実行させることができるなど、「動作を確認しながら作っていく」といったことが容易に行えます。インタプリタという名前の言語プロセッサプログラムが逐次翻訳する。ソースコードをインタプリタが翻訳してCpUに渡す。
コンパイラ方式。
この方式では、ソースコードの内容を最初にすべて明訳して、機械語のプログラムを作成します。ソースコード全体を解釈して機械語化するため、効率の良い翻訳結果を得ることができますが、「作成途中で確認のために動かしてみる」といった手法は使えません。
30
疑似言語。
手続名または関数名(引数,・・・)
手続きはまた関数を呼び出し、引数を渡す。
while(条件式)
処理
条件式が真の間、処理を繰り返す。
do
処理
while(条件式)
処理を実行し、条件式が真の間、処理を引き続き繰り返す。
for(制御処理)
処理
endfor
制御記述の内容に基づき、処理を繰り返す。
31
コンパイラ方式でのプログラム実行手順。
ソースコードを機械語化(コンパイル)して、モジュール分けされているからそれを全部くっつけて(リンカ)、これを主記憶に読み込む(ローダ)
32
コンパイラの仕事。
コンパイラの中では、ソースコードを次のように処理する。画像参照
字句解析。
ソースコードに書かれているプログラムコードを字句(トークン)単位に分解します。
構文解析。
分解したトークンを、プログラム言語の構文規則に従って解析します。解析して構文木と呼ばれるデータ構造を生成する。
意味解析。
変数の型や文がプログラム言語の仕様に沿っているかチェックする。
最適化。
処理効率を上げるため、より良いプログラムコードを再編成する。
コード生成。
目的プログラム生成。
33
リンカの仕事。画像参照。
プログラムは、自分で分割したモジュールはもちろん、ライブラリとしてあらかじめ提供されている関数や共通モジュールなどもすべてつなぎあわせることで、実行に必要な機能がそろったプログラムファイルになります。
この、「つなぎあわせる」作業をリンク(連係編集)と呼びます。つまりはこれが、リンカ(連
係編集プログラム)の仕事というわけです。
ちなみに、このような「あらかじめリンクしておく手法」を静的リンキングと呼びます。
一方、この時点ではまだリンクさせずにおいて、「プログラムの実行時に、共有ライブラリ
やシステムライプラリをロードしてリンクする手法」というのも存在します。こちらは動的リンキングと呼びます。
34
構造化プログラミング。
1番上位のメインプログラムは、大まかな流れだけが記述されることになります。
当然それだけじゃ完成しませんから、大まかな流れのひとつひとつをいサブルー
チンという形で別のモジュールに切り出してやる。このサブルーチンも、内部は大まかな流れを記述して、その詳細はサブルーチンで・・と切り出していく。
このように少しすつ処理を細分化していくと、各階層ごとの流れがキチンと整理されることになります。結果、効率よく、ミスの少ないプログラムが出来上がるというわけです。
35
構造化プログラミングでは、原則的にたった3つの制御構造だけを使う。
プログラミングというと、いかにも「複雑な処理が記出されている小難しい文書」みたいなイメージがありますが、実は紐解くとこれだけ単純な構造を相み合わせたものがほとんどだったりするのです。画像参照。
順次構造。
上から順番に処理を実行します。
選択構造。
何らかの条件によって分岐させ、いずれかよ処理を実行します。
繰り返し構造。
ある条件が満たされている間、一定の処理を繰り返します。
36
if〜endifで選択構造をあらわす。
もし〜ならば処理Aを実行せよ。
if(条件)
処理A
endif
それ以外の場合は、処理Bを実行
if(条件)
処理A
else
処理B
endif
elseifは
elseに具体的な条件をつけたい時的な。
それ以外で〜ならば処理Cを実行。
if(条件①)
処理A
elseif(条件②)
処理C
endif
elseifはいくつでも羅列することがでこますし、elseと組み合わせることも可能。その場合の評価順序は次のとおり。画像参照。
上から順に条件が評価されていく。合致する条件があれば、そこの処理を実行し、この回路の外へ抜けていく。
37
擬似言語における繰返し構造には、いくつかのあらわし方があります。そのうちの1つがwhile文です。
while文は、繰返しに入る前に指定された条件を判定します。判定結果が真である間(条件が満たされている間)、while~endwhile間に書かれた処理を繰返し実行します。
条件が真の間、以下の処理を繰り返す。
while(条件)
処理A
endwhile
38
擬似言語における繰返し構造の、もう1つのあらわし方がdo ~ while文です。
do ~ while文は、繰返しに入った後に指定された条件を判定します。判定結果が真である間(条件が満たされている間)、do 〜 while間に書かれた処理を繰返し実行します。
do~whileは上にも書いてある通り後判定です。ここで言う後判定とは、「返しに入った後に判定するね」という意味を指します。つまり、繰返し構造に入って処理を一度行う度に条件制定が行われるわけです。
したがって、はじめから条件式の判定が偽となる(満たされない)状態であった場合でも、その間に書かれた処理は必ず一度は実行されます。
条件が真の間、いじょうの処理を繰り返す。
do
処理A
while(条件)
39
擬似言語における繰返し構造の、さらにもう1つのあらわし方がfor文です。
for文は、制御記述の内容に従って、for~endfor間に書かれた処理(0以上の文の集まり) を繰返し実行します。制御記述には、初期化式、繰返し条件式、変化式の3つを組み合わせて書くようになっており、これによって「どのように繰返すか」をコントロールします。画像参照。
for ~endforによる繰返し構造は、初期化を行った次のタイミングで条件判定が行われます。
したがって、初期化後すでに条件式の判定が偽となる(満たされない)状態であった場合、for~endfor間に書かれた処理は一度も実行されません。
for(初期化式 繰り返し条件式 変化式)
処理A
endfor
40
メモリ上の連続した領域に、ずらりとデータを並べて管理するのが配列です。
配列では同じサイズのデータ(を入れる箱)が連続して並ぶことになるわけですが、その利点として添字があります。画像参照。
これを使うことで、配列内の各データに直接アクセスすることができるようになります。ただし最初に固定サイズでまとめてごっそり領域を確保してしまうため、データの精入や削除などは不得手です。したがって、データの個数自体が頻繁に増減する用途には、あまり適していると言えません。
ちなみに、画像のような一列にずらりと並んだ配列を1次元配列と呼びます。
41
多次元配列といって、添字を増やしていく(つまり「配列の配列』を作る)ことで二次、三次・・とすることができます。ここではイメージのしやすい二次元配列を使って、どのようになるか見てみましょう。縦と横の2を使った、表状の配列を想像してください。画像参照。
二次元配列の場合も、添字を使って個々の要素に直接アクセスできる特徴は変わりません。配列のアクセス指定方法は
(行、列)とする。
42
データとデータを数珠繋ぎにして管理するのがリスト(線形リスト)です。画像参照。
リストの扱うデータには、ポインタと呼ばれる番号がセットになってくっついています。これはメモリ上の位置をあらわす番号で、「次のデータがメモリのどこにあるか」を指し示しています。
43
リストの特徴はその柔軟さです。画像参照。
ポインタさえ書きかえればいくらでもデータをつなぎ替えるえることができるので、データの追加・挿入や、削除などがとても簡単に行えます。
ただし、リストはポインタを順にたどらなければいけないため、配列みたいに「添字を使って個々のデータに直接アクセスする」ような使い方はできません。
44
こうしたリストには、ポインタの持ち方によって、単方向リスト、双方向リスト、循環リストという3つの種類があります。
単方向リスト。
次のデータへのポインタを持つリストです。前の説明でも用いているようにリストといえばこれ。一番基本的な構造です。
双方向リスト。画像参照。
次のデータへのポインタと、前のデータへのポインタを持つリストです。
前後のどちらにもリストを辿っていくことができます。
循環リスト。
次のデータへのポインタを持つリスト。ただし、最後尾データは、先頭データへのポイン夕を持ちます。
全体が環状につながって、ぐるぐる回ることができます。
45
キューは待ち行列とも言われ、最初に格納したデータから順に処理を行う、先入れ先出し(FIFO: First In First Out)方式のデータ構造です。画像参照。
例えば、この順番でデータをキューに格納(エンキュー)した場合、取り出し(デキュー)はこの順番となります。先に入ったものから順に取り出されていくのです。これは例えばスーパーのレジ待ちで、先に並んだ人から順に会計してもらえるのと同じです。
キューは、入力されたデータがその順番通りに処理されなければ困る状況で使われます。
身近な例をあげると、次の処理では、いずれもキューが利用されています。
マウスのポタン押した。
マウスのボタン離した。
リストがが選ばれた。
マウスが動いた。
GUIプログラムはキューにためこまれた
操作を、ひとつずつ処理していきます。
プリンタは印刷用のキューにたまった
データを、ひとつずつ印刷していきます。
46
スタックはキューの逆で、最後に格納したデータから順に処理を行う、後入れ先出し(LIFO:Last In First Out) 方式のデータ構造です。画像参照。
例えば、この順番でデータをスタックに格納(push)された場合、後に入ったものから順に外に出ていくわけ(pop)。イメージとしては、エレベータの最後に乗った人が、最初に降りるようなもの。
47
プログラムが、呼び出したサブルーチンの処理終了後に元の場所へ戻れるのは、「サブルーチン実行後どこに戻るのか」がスタックとして管理されているからです。
48
データを探索するアルゴリズム。
配列など、複数ある箱の中きら目的のデータを探し当てるのが、探索です。
先頭から順に探索していく方法を、線形探索法と呼ぶ。
あらかじめ探索対象のデータ群が「昇順に並んでいる」といった規則性を持つ場合は、二分探索法という。
ハッシュ関数と呼ばれる「一定の計算式」を用いて、データの格納位置をズバリ算出する探索方法がハッシュ法です。
49
箱の中に入っているデータを昇順や降順などのカタチに規則正しく並べ替えるのが整列。基礎的で単純なアルゴリズムのもうひとつが、整列です。
基本交換法(バブルソート)。
隣接するデータの大小を比較、必要に応じて入れ替えることで全体を整列させるのがバブルソートです。画像参照。
隣り合わせたデータを比較して、右の方が小さければ入れ替える。そしたら次は隣をと繰り返す。
50
基本選択法(選択ソート)。
対象とするデータの中から最小値(もしくは最大値)のデータを取り出して、先頭のデー夕と交換。これを繰り返すことで全体を整列させるのが選択ソートです。画像参照。
整列対象のデータから最小値を探す。
それを先頭と入れ替えて先頭が確定。
そしたらまた残りのデータから最小値を、探すと繰り返す。
51
基本挿入法(挿入ソート)。
まず対象とするデータ列を「整列済みのもの」と「未整列のもの」とに分けます。この未整列の側から、データをひとつずつ整列済みの列の「適切な位置」に挿入して、全体を整列させるのが挿入ソートです。画像参照。
対象データをこの2つに分けて(整列済みと未整列)、未整列からひとつ持ってくる。そして、整列済みの中のどの位置が最適か決定して、挿入というのを繰り返す。
52
これまで紹介した整列アルゴリズムは、頭に「基本」とついている通り、いずれも基本的な整列法たちです。
さて、「基本」があれば「応用」もあるのが世の理というもの。というわけで、さらに高速なアルゴリズムである次の3種をご紹介。ざっくり特徴を押さえておきましょう。
シェルソート。
ある一定間隔おきに取り出した要素で部分列を作り、それぞれ整列してもとに戻す。今度はさらに間隔をつめて要素を取り出し、再度整列。取り出す間隔が1になるまでこれを繰り返すことで整列を行う方法です。画像参照。
四つおきに取り出して、その中でそれぞれ整列し、ひとつに戻す。今度は2つおきに取り出して、整列して〜と繰り返す。
53
クイックソート。
中間的な基準値を決めて、「それより小さい値」グループと「それより大きい値」グループに振り分けます。その後、それぞれのグループ内でまた基準値を決めて振り分けて、と繰り返すことで整列を行う方法です。画像参照。
基準値を決めて、それより小さいのと、より大きいのとに分ける。
そしたらそれぞれのグループごとに、また基準値を決めて、と繰り返す。
54
ヒープソート。
未整列の部分を「順序木」といわれる木構造に構成して、そこから最大値もしくは最小値を取り出して整列済みの側へと移します。
これを繰り返すことで、未整列部分を縮めて整列を行う方法です。画像参照。
未整列の配列から、順序木を構築。
根を取り出して整列済みに移し、残りでまた順序木を作ってーと繰り返す。
55
オブジェクトとは、データ(属性)と
それに対するメソッド(手続き)をひとつにまとめた概念です。
例えば、ボタンオブジェクトだと、データが表面の文字、ボタンの色、大きさなど、メソッドが初期化処理、文字変更処理、クリック時処理などをひとまとめになってるわけ!
このようにデータとメソッドがひとまとめになっていることをカプセル化という。情報を隠蔽することができ、書き換えられる心配がない。
このオブジェクトの仕様のことをクラスという。クラスとオブジェクトの関係は型とその型から作られた具体例の関係。このクラスを呼び出して実際にメモリ上に生成する実体化したボタンなどをインスタンスという。インスタンスはオブジェクトとほぼ同じ意味をもつ。
クラスには階層構造がある。ボタンのインスタンスがあるとして、ボタンには上位クラス(スーパークラス)、下位クラス(サブクラス)がある。例として動物がスーパークラスだとすると、犬や猫がサブクラスにあたる。要はスーパークラスが大枠でサブクラスがより具体化されたもの。このようにサブクラスかまスーパークラスの特性を受け継ぐことを継承(インヘリタンス)という。
56
頭の中の設計をまとめるだけにとどまらず、それを分かりやすくビジュアル化し共有する為の統一言語をUMLという。
UMLで用いる図は、13種類あります。
大きく分けて、システム構造を示す構造図、システムの振る舞いを示す振る舞い図の二つに分けることができる。
構造図
クラス図 クラスの定義や、関連付けなど、クラス構造をあらわす。
オブジェクト図 クラスを実体化させるインスタンス(オブジェクト)の、具
体的な関係をあらわす。
パッケージ図 クラスなどがどのようにグループ化されているかをあらわす。
コンポーネント図 処理を構成する複数のクラスを1つのコンポーネントと見なし、その内部構造と相互の関係をあらわす。
複合構造図 複数クラスを内包するクラスやコンポーネントの内部構造をあらわす。
配置図 システムを構成する物理的な構造をあらわす。
振る舞い図
ユースケース図 利用者や外部システムからの要求に対して、システムがどのような振る舞いをするかをあらわす。
アクティビティ図 システム実行時における、一連の処理の流れや状態遷移
をあらわす。フローチャート的なもの。
状態マシン図 イベントによって起こる、オブジェクトの状態遷移をあらわす。
シーケンス図 オブジェクト間のやり取りを、時系列にそってあらわす。
コミュニケーション図 オブジェクト間の関連と、そこで行われるメッセージのやり取りをあらわす。
相互作用概要図 ユースケース図やシーケンス図などを構成要索として、より大枠の処理の流れをあらわす。アクティビティ図の変形。
タイミング図 オブジェクトの状態選移を時系列であらわす。
57
集中処理(セキュリティ確保や運用管理が簡単)と分散処理(システムの拡張が容易、故障しても全体には影響しない)のいいとこ取りをしたクライアントサーバシステムが主流となっている。
58
クライアントサーバシステムで、サーバ側へ依存度を高くしたのがシンクライアントです。クライアント側の端末は、入力や表示部分を担当するだけで、情報の処理や保管といったきのうあはすべてサーバに任せます。
一方、完全な分散処理型のシステムとしてはピアツーピアがあります。これは、ネットワーク上で協調動作するコンピュータ同士が対等な関係でやり取りするもので、サーバなどの一元的に管理する存在を必要としません。負荷を分散している。
59
画像参照。クライアントサーバシステムの機能を、プレゼンテーション層・ファンクション層・データ層の3つに分けて構成するシステムを、3層クライアントサーバシステムと言います。
3層クライアントサーバシステムら、ネットショッピングなどwebを用いるシステムと親和性が高く、その構築に多く用いられる構成です。
60
システムの稼働形態として、要求に対して即座に処理を行い、結果が反映されるものをオンライントランザクション処理といいます。リアルタイムに処理を行い、結果を反映する必要のあるシステムは、こうした形態で処理を行います。例えば、銀行ATMとかチケット予約とかはこれ。
61
一方、「別にそーんなリアルタイムに反映しなくてもいいしー」という処理の場合は、一定期間ごとに処理を取りまとめて実行します。これをバッチ処理といいます。リアルタイムで更新する必要がなかったり。
あまり回線に負荷を与えたくないとか
ある程度まとめて処理することに意味があるとかの場合はこっち
各支店の勤急データを月に1回本社に吸い上げて給与計算したりとかですね。
ちなみに普段コンピュータを使っていて普通に行う次のような操作を対話型処理と呼びます。コンピュータが
インフォメーション
を出し、利用者が
それに答えたり
情報を与えたり
しながら
処理が進む。
62
画像参照。クラスタリングとは、複数のコンピュータをネットワーク上で結合させることで、ひとつのシステムとして構築する技術です。この技術を用いて構成されるシステムがクラスタリングシステムです。利用者にはひとつのシステムに見えてます。
63
クラスタリングシステムの運用形態は、負荷分散クラスタ、HAクラスタ、HPCクラスタなどに大別されます。
負荷分散クラスタ。
複数のコンピュータに処理を分散させることで、1台あたりの負荷を低く抑えるシステム構成です。たとえば、アクセス数の多い商用のWebサイトなどで用いられています。画像参照。ロードバランサという
負荷分散装置が各サーバにアクセスを振り分けることで、特定のマシンに負荷き集中することを防ぎます。
64
HA(High Availability)クラスタ。
High Availabiltyとは「高可用性の意味。稼働中のコンピュータに障害が発生した場合、待機していた別のコンピュータが速やかに処理を引き継ぐことで、停止時間を最小限に抑える(可用性を高く保つ)システム構成です。画像参照。
通常は稼働系が処理を担当しています。しかし稼働系が故障しま場合は、待機系が速やかに処理を引き継ぎます。
稼働系から待機系に切り替わることをフェールオーバ。稼働系が復旧してそちらへ戻すことをフェールバック。
65
HPC(High Performance Computing)クラスタ。
膨大な計算量を要するようなひとつの処理を分割し、複数のコンピュータが並行して処理にあたることで、全体の処理速度を高めるシステム構成です。画像参照。
膨大な計算処理も分割して一斉に並列処理を行うことで高速化が可能になる。
66
システムの処理能力をもっと向上させたい!という場合、そのアプローチとしてスケールアップとスケールアウトという2つの手法が考えられます。特徴は次の通りです。
スケールアップ。
「サーバ自身の性能をより高いものに交換する」ことにより、システムの処理
能力を高めること。
スケールアウト。
「システムを構成するサーバの台数を増やす」ことにより、システムの処理能力を高めること。
67
グリッドコンピューティング。
グリッドコンピューティングとは、小型のパソコンから大型コンピュータに至るまで、インターネットなどのネットワーク上にある複数のプロセッサに処理を分散して、大規模な処理を行う方式です。
画像参照。インターネットのような
広域ネットワークにつながっている様々な計算資源。CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力や CPUの計能力やHDDなどの記憶容量のこと。これらを組み合わせて仮想的なひとつのコンピュータシステムとすることで、膨大な計算能力や記憶領域を利用者へ提供できるようになる。
68
SOA(サービス指向アーキテクチャ:
Service Oriented Architecture)。
これは「ドーンと1個のシステム」を構築するんではなくて、個々の機能を「サービスというコンポーネント化(部品化)」をして、それを組み合わせることでシステムを構築しましょうよという考え方です。画像参照。
従来型では、ドーンと一個のシステムとして構築する。その為、各機能が密接に絡み合っているため、機能の流用や改修がし辛い。それがSOAでは、サービスというコンポーネントの集まりとして構築する。その為、コンポーネントの再利用や変更改修が容易。このような構成とすることで、ビジネス変化に対応しやすくするなどの効果ぎ期待できる。
69
システムの優劣を何を基準に判断するかの指標として、スループット、レスポンスタイム、ターンアラウンドタイムがある。
スループットは、システム全体の仕事量。
レスポンスタイムはコンピュータに処理を依頼し終えてから、応答が返されるまでの時間。
一方ターンアラウンドは依頼してから応答終了まで。
70
全く同じ処理のシステムを2組用意して、システムを止めない工夫をすることをデュアルシステムという。コストはかかる。処理結果を互いにに付き合わせて誤動作がないか互いに監視している。いずれかが異常事態の時には、そっち側のシステムを切り離す。
71
デュアルシステムはコストがかかるので、としてデュプレックスシステムというのがある。これは2組のシステムのうち、一つにら普段は別の作業をさせておくことで、機材に無駄がなくコストパフォーマンスが高い。主系が故障したら、従系が処理を担当するが、切り替え時間が発生するので、デュアルシステムより対応に時間がかかる。
72
故障しても大丈夫なように対策しておくことをフォールトトレラントという。
フォールトトレラントを実現するための方法には3つがある。
フェールセーフ。安全優先したい時。
故障した時、安全性を確保する方向で故障すること。例)赤の状態で停止する信号機、
フェールソフト。継続優先したい時。
故障した時、一部機能を切り離し動作を継続させる。例)ジェット機がエンジン一つ壊れても飛び続けることができる
フールプルーフ。
変な操作をしても誤動作しないようにする。例)電子レンジがドアを閉めないと加熱しない、プラスマイナス向きが合ってないと入らない電池ボックス、フタが開いてると回らない洗濯機。
品質管理等を徹底して、故障そのものを発生させないという考え方。フォールトアボイダンス
73
機械の故障発生頻度と、時間の関係をグラフにするとバスタブ曲線になる。
なぜこのような形になるかというと、
導入初期は製造上の欠陥などによる故障率が、高い為。
導入して、初期故障期間を過ぎれば、ほぼ安定稼働する。発生する故障といえば、操作ミス等による故障。
その後、時間が経っていくと、経年劣化が進み、故障率が高くなっていく。
74
バックアップの種類。
フルバックアップ。
保存されている全てのデータをバックアップすること。
差分バックアップ。
一回フルバックアップを行った上で、次バックアップを行う際に、変更された部分だけをバックアップすること。あくまで、差分とはフルバックアップとの差分という意味なので、3回目は2回目の分も含んでバックアップすることになる。
増分バックアップ。
バックアップの種類に限らず、変更された部分だけをバックアップしていくことを繰り返す。
75
CEOは最高経営責任者で、株主たちの総意によって任される。
一方、情報システム戦略を総括する最高責任者がCIOです。
プロダクトイノベーション。
新商品の開発め、他社との差別化。例)iPhone、検索サイトGoogle
プロセスイノベーション。
例)ゾゾスーツ、
76
グリーン購入。
会社で何か購入するときでも、環境を考慮して、必要性を考えて、リサイクル品など、環境負荷低減に努める事業者からの購入など。
77
企業内に蓄積される膨大なデータを分析、加工して専門家の力を借りることなく、データを適切に見れるようにしたツールをBIツールという。ビジネスインテリジェンス
78
組織全体の情報システムを整理することで、全体を最適化する手法が、エンタープライズアーキテクチャ。最適化は四つの体系、業務、データ、機能、テクノロジに分析することで、全体のシステム像を把握することができる。エンタープライズアーキテクチャで用いられる現状とあるべき姿のギャップを埋める手法をギャップ分析という。
79
ネット通販とか、インターネットの発達により商取引のとこを電子商取引(EC)という。そこで必要になるのが、データ形式の統一化と、機密保持。これをEDIという。エレクトロニックデータインターチェンジ。
EDIでは下層から順に、情報伝達規約、情報表現規約、業務運用規約、取引基本規約に分かれている。
80
外部から不正な改ざんや、解読に耐える性質を、耐タンパ性という。分解が困難な作りになっていて、無理に行うと内部回路が破壊される作り、光センサが入っていて、ケースが開けられたら内部情報を消去する作り、中のチップが暗号化されていて、読出しても解読できない。要は外部からの干渉を、受けると内部破壊を起こす取り組み。
81
従来の店舗では、売上というのは一般に、上位(人気)20%の商品が売上の80%を占めるはずだった。これは商品の陳列に物理的スペースが必要だからである。画像参照。しかし、インターネット上の店舗だと、無限に陳列できるので、あまり売れない商品でも、商品数によっては、合計の売上が全体で見た時に無視できない割合にまで膨らみます。これをロングテールと呼ぶ。(恐竜の尻尾みたいだから)
82
シェアリングエコノミーとは、ネットを介して個人が保有する遊休資産の貸し借りを仲介するさーびすのこと。
83
新しい事業を立ち上げる技として、丸ごと他社を買収するのがM&A。
限られた経営資源を効率よく本業に集中させたいが為に、それ以外の部分を他社に業務委託することをアウトソーシング。
84
自社の強みと弱み分析に、swot分析がある。この手法は、自社の現状を、強み、弱み、機会、脅威の四つに分けられる。自社でコントロールできる内部要因に分類されるのは、強み、弱み。
外部環境に起因するものは、機会、脅威。
85
縦軸に市場成長率、横軸に市場占有率(シェア)をもってきて、自社の製品やサービスの戦略的位置付けを分析する手法を、プロダクトポートフォリオマネジメント(PPM)という。
86
他社には真似できない、自社の強みををコアコンピアンスという。コアコンピアンスを核とする経営をコアコンピアンス経営という。
他社の強みを参考にして改善していく手法をベンチマーキングという。
87
コトラーの競争地位戦略。
市場シェアの観点から企業を4つに類型化。
リーダ戦略。
市場において最大のシェアを誇るリーディングカンパニー。業界の牽引役として、需要を開拓し、市場全体の拡大を目指します。
チャレンジャ戦路。
業界の2番手、3番手にあたる企業。リーダに挑戦してトップを狙うと問時に、リーダとの差別化を図りシェアの拡大を目指します。
フォロワ戦路。
業界の2番手、3番手にあたる企業ですが、リーダに挑戦するのではなく、その模倣をすることで、開発コストを抑えながら収益向上を図ります。
ニッチャ(ニッチ)戦路。
市場全体におけるシェアは高くないものの、小規模な市場に特化することで独自の地位を獲得し、他にはない価値を提供する企業です。こうした小規模な市場のことを隙間市場(ニッチ市場)と呼びます。
88
顧客情報などを分析することで営業戦路に生かすのがリレーションシップマーケティング。
そのマネジメント手法がCRM (Customer Relationship Management) です。
89
法律、各種ルール、モラルを守って企業活動を行うことをコンプライアンスという。それを監視することをコーポレートガバナンス。コーポレートガバナンスの具体例が内部統制。
作り手の権利を守る、それが知的財産権。
知的財産権は2つに分けられ、一つが著作権。著作権には著作人格権は生みの親に付与される権利で、創作された時点で自動的に権利が発生する。他人に譲渡したり相続したり不可。
著作財産権は著作物から発生し、こちらは他人に譲渡したり相続することができる。
知的財産権のもう一つが産業財産権。こっとは特許庁に登録してはじめて、権利が発生する。特許権や、特許ほど高度ではない考案の実用新案権、製品デザインの意匠権、マークなどの商標権がある。
90
業務として会社従業員が著作物の創作を行うと、法人の発意に基づくかつ、法人名義の著作物であれば、特段の取り決めがない限り、その制作担当者を雇用していた法人側に著作権が帰属する。
91
著作権は、アイデアを出した側ではなく、実際に作った側に発生する。派遣契約での著作権は派遣社員が作ったものは、派遣先からの指示で作ったものなので、派遣先に帰属する。
請負契約では、請負った会社のもの。
請負の請負では、1番下層の請負のもの。
92
製造物責任法とは、その製造物の欠陥によって消費者が何らかの損害を負った場合に製造業者が負うべき損害賠償責任。仮に、欠陥が製品を構成する外注部品にあったとしても、その製品を輸入して作った者のせいになる。
93
労働基準法と労働者派遣法。
シュリンクラップ契約。
商品パッケージを覆う透明フィルム包装のこと。この契約では、包装をといた時点で使用許諾契約が成立。
不正アクセス禁止法。
その名の通り。
日本において、社会インフラとなっている情報システムや情報通信ネットワークへの防御施策を、効果的に推進するための政府組袋の設置などを定めた法律が、サイバーセキュリティ基本法です。ここで、サイバーセキュリティの対象となるのは、「電子的方式、磁気的方式その他人の知覚によっては認識することができない方式(以上をまとめて電磁的方式と呼称)により記録され、又は発信され、伝送され、もしくは受信される情報」です。
94
プロバイダ責任制限法。
プロバイダ責任制限法とは、インターネット上で権利侵害があった場合に、特定電気通信役務提供者(プロバイダなど)が負うべき損害賠償責任の範囲や、権利侵害を行った発信者の情報を、被害者が開示請求する権利について定めたものです。
不正アクセス禁止法と電子計算機損壊等業務妨害罪と、不正指令電磁的記録に関する罪の、違い。
不正アクセス禁止法は、他人のIDパスワードを盗用してシステムを利用したり、漏洩させたりと簡単なもの、不正司令電磁的記録に関する罪は、不正指令電磁的記録とはコンピュータウイルスのことめあり、ウイルスの作成、提供、などに関することを指す。電子計算機損壊等業務妨害罪は、物理的にコンピュータ等を破壊する行為。
95
幅広いアイデアを引っ張り出す手法として、反論なしの意見の出し合いいわゆるブレーンストーミングがある。
しかし大勢人では収拾がつかなくなるので、全体を少人数のグループに分けて、グループごとに結論を出して、最終的に全体の結論を出す方法をバスセッションという。
ブレーンストーミングで出し合った意見はKJ法で整理する。具体的には、アイデアはカードとして書き出し、それを関連同士をまとめ、それに見出しをつけ、グループ間の関係を図式化し最後はそれを文書にまとめる。
96
複数の条件と、それによって決定づけられる行動とを整理するのに有効なのが決定表(デシジョンテーブル)です。画像参照。行さえ足せばどんどん条件を増やすこともできますから、複雑な条件だってバッチリです。そんなわけでこの技法は、プログラミング時に内部の処理条件を整理したり、試験パターンを作ったりという用途でも使われています。
97
レーダチャート。
項目ごとのバランスを見るのに役立つ。
棒グラフ。
数や量を比較。
折れ線グラフ。
時間の経過による変化。
円グラフ。
各データの割合を見たい時。
98
QC(qualitity control 品質管理 )七つ道具。
層別、パレート図、散布図、ヒストグラム、管理図、特性要因図、チェックシート。
層別はグラフとかではなく考え方。
データを属性ごとに分ける。
パレート図は棒グラフと折れ線グラフを合わせたもの。現象や原因などの項目を件数の多い順に棒グラフとして並べ、その累積値を折れ線グラフにして重ね合わせる。
ヒストグラム。
品質のばらつきなどを捉える画像あり
99
管理図。
時系列的に発生するデータのばらつきを折れ線グラフであらわす。
100
特性要因図。
結果に対してどのような原因が関連しているかを明確にする。