💾 資格バッジ図鑑
2回正解で卒業=獲得。
今日の学習スタンプ
今日、応用情報の勉強をした——1問だけでもOK、続けることが合格への近道。
ルールは「知ってる」より「守れた」が偉い。30個で台紙コンプリート!
📖 まず学ぶ(講義)
前知識ゼロからでも読めるように書いています。
📚 講義の全文(45本)
応用情報技術者対策 の講義45本を、そのまま読める形で置いています。アプリを起動しなくても、ここだけで内容を確かめられます。各見出しを開くと、本文・用語・図表・例題・出典が出ます。
基礎理論とアルゴリズム
数値の表し方と誤差の見積り
基数変換と浮動小数点を「表せる範囲」と「表せない値」の両面から見て、計算のどこで誤差が生まれるかを言い当てられるようにします。
コンピュータの中の数は、有限の桁数に押し込められた近似値です。整数なら nビットで 2ⁿ 通りしか区別できず、2の補数なら −2ⁿ⁻¹ から 2ⁿ⁻¹−1 までしか表せません。この上限を超えた瞬間に符号が反転するのが桁あふれ(オーバーフロー)で、8ビットなら 90 + 70 は 160 ではなく −96 になります。応用情報では「変換できるか」より「どこで壊れるか」を問われるので、範囲の端を先に思い浮かべる癖をつけてください。
小数はもっと厄介です。2進数の小数は 1/2, 1/4, 1/8 …の和でしか作れないため、分母が2のべき乗でない有理数は必ず無限に続きます。10進数の 0.1 は 2進数で 0.0001100110011… と循環し、どこかで打ち切るしかありません。これが丸め誤差の正体で、0.1 を10回足しても 1.0 にならない理由です。金額計算に2進浮動小数点を使ってはいけない、という実務上の判断はここから出ています。
浮動小数点数は符号部・指数部・仮数部の3つに分けて値を持ちます。IEEE 754 の単精度は符号1ビット・指数8ビット・仮数23ビットで、指数はバイアス127を足した形(下駄履き表現)で格納されます。仮数は先頭の1を省略する正規化により実質24ビットぶんの精度を持ちます。10進の有効桁数は 仮数のビット数 × log10(2) で見積もれ、倍精度の53ビットなら約15桁になります。「有効桁数は仮数のビット数で決まる」「表せる範囲は指数のビット数で決まる」と分けて覚えると、精度不足と桁あふれを混同しなくなります。
誤差には名前がついていて、原因が違えば対策も違います。丸め誤差は表せない桁を切り捨て・切上げ・四捨五入したときに生じるもの。打切り誤差は無限に続く計算(級数展開や数値積分)を途中でやめたときに生じるもの。桁落ちは値がほぼ等しい2数の減算で有効桁が一気に失われるもの。情報落ちは絶対値が大きく違う2数の加算で小さいほうが無視されるもの。桁落ちは式を変形して減算を避ける、情報落ちは小さい値から先に足す、というのが定石です。
単精度浮動小数点の3つの部分と、精度・範囲の決まり方
IEEE 754 単精度(32ビット)の内訳
[S:1][ E:8 ][ M:23 ]
符号 指数部 仮数部
符号: S が 0 なら正、1 なら負
指数 = E − 127 /* バイアス127を引く */
仮数 = 1.M /* 先頭の1は省略されている */
精度: 仮数は実質24ビット → 24 × log10(2) ≒ 7.2
したがって10進で約7桁が信用できる
範囲: 指数8ビット → おおよそ 10⁻³⁸ 〜 10³⁸
| 誤差 | 起きる場面 | 原因 | 主な対策 |
|---|---|---|---|
| 丸め誤差 | 0.1 を2進で持つ | 有限桁に収まらない | 10進小数型や整数化で扱う |
| 打切り誤差 | 級数展開を途中で止める | 無限回の計算を有限回にした | 項数を増やす/収束の速い式に変える |
| 桁落ち | 1.234567 − 1.234566 | 近い値の減算で上位桁が消える | 式変形して減算を避ける |
| 情報落ち | 1.0 に 0.000000001 を足す | 小さい値が仮数からあふれる | 絶対値の小さい順に加算する |
- 2の補数
- nビットで負数を表す方式。全ビットを反転して1を加えると符号が反転する。減算を加算回路だけで実現でき、0の表現が1通りに定まる。表現範囲は −2ⁿ⁻¹ から 2ⁿ⁻¹−1 までで、負のほうが1つ多い。
- 正規化
- 浮動小数点数で仮数の最上位が必ず有効な桁になるよう指数を調整すること。同じ値の表し方が1通りに定まり、仮数のビットを無駄なく使えるので精度が最大になる。IEEE 754 では先頭の1を省略して1ビットぶん得をしている。
- 丸め誤差
- 有限桁で表せない値を、表せる最も近い値に置き換えたときに生じる誤差。切捨て・切上げ・四捨五入・最近接偶数への丸めなど方式によって偏り方が変わる。累積すると無視できない大きさになる。
- 打切り誤差
- 本来は無限に続く計算を有限回で止めたことによる誤差。級数展開の項を途中で切る、反復計算を収束前にやめる、といった場面で生じる。計算量と精度のトレードオフとして意図的に受け入れることが多い。
- 桁落ち
- 値がきわめて近い2つの数の減算で、上位の有効桁が打ち消し合って残る有効桁数が激減する現象。2次方程式の解の公式などで起きやすく、分子と分母を有理化するなど式変形で減算そのものを避けるのが対策。
- 情報落ち
- 絶対値の差が大きい2数を加減算したとき、小さいほうの値が仮数の桁からあふれて計算結果に反映されない現象。多数の値を合計するときは絶対値の小さいものから順に足すと影響を抑えられる。
- けたあふれ
- 演算結果が表現可能な範囲を超えること。整数のオーバーフローでは符号が反転した値になり、浮動小数点では無限大や非数になる。上位側があふれるのがオーバーフロー、絶対値が小さすぎて0になるのがアンダーフロー。
例題 16進数 2A.4C を10進数で表すといくつか。
整数部 2A は 2 × 16 + 10 = 42。小数部 .4C は 4/16 + 12/256 = 0.25 + 0.046875 = 0.296875。合わせて 42.296875 になる。16進小数の重みは 1/16, 1/256, 1/4096 と進む点を押さえておく。
例題 真値 1/3 を 0.333 と近似したときの相対誤差は何パーセントか。
絶対誤差は 1/3 − 0.333 = 1/3000。相対誤差は絶対誤差を真値で割るので (1/3000) ÷ (1/3) = 1/1000 で 0.1 パーセント。絶対誤差だけでは精度の良し悪しは判断できず、値の大きさで割った相対誤差で比べるのが原則。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類1:基礎理論
論理演算・集合と確率統計
AND・OR・XOR をビット操作の道具として使い分け、集合の数え上げと期待値・分散・相関の読み方までを一続きで押さえます。
論理演算はビット単位の道具として見ると使い道がはっきりします。AND は「残したいビットだけ1のマスク」と組み合わせて不要な桁を落とす(クリアする)道具。OR は「立てたいビットだけ1のマスク」で特定の桁を1にする道具。XOR は「反転したいビットだけ1のマスク」で桁を反転する道具で、同じ値で2回 XOR すると元に戻るという性質から、簡易な暗号化やパリティ計算、値の入替えにも使われます。NOT との組合せではド・モルガンの法則、すなわち「和の否定は否定の積」「積の否定は否定の和」が、条件式の書き換えでそのまま効きます。
集合の数え上げでは包除原理が要です。2つなら |A ∪ B| は |A| + |B| − |A ∩ B|、3つなら |A| + |B| + |C| から2つずつの共通部分を引き、最後に3つの共通部分を足し戻します。「引きすぎたぶんを足し戻す」という形を覚えておけば、要素数を数える問題でもデータベースの件数見積りでも同じ式が使えます。集合は論理式と1対1に対応していて、∪ が OR、∩ が AND、補集合が NOT にあたります。
確率では、期待値と分散を分けて考えます。期待値は「値 × 確率」の総和で、平均的にいくらになるかを表す1点の指標。分散は「偏差の2乗の平均」で、期待値からのばらつきの大きさを表します。分散は E[X²] − (E[X])² という形でも計算でき、こちらのほうが手計算では速いことが多いです。標準偏差は分散の平方根で、元のデータと単位がそろうので比較に使いやすくなります。条件付き確率とベイズの定理は、検査の的中率や障害原因の推定に直結します。検出率が99パーセントの検査でも、もともとの発生率が低ければ陽性の多くが誤検出になる、という直感に反する結論はここから出ます。
相関係数は −1 から 1 の範囲を取り、2つの量が直線的にどれだけ連動するかを表します。0 に近ければ直線的な関係がないというだけで、無関係とは限りません(放物線状の関係は相関0になり得ます)。そして相関があっても因果があるとは限りません。応用情報では「相関が強いから原因だ」と結論づける選択肢が誤りとして並ぶので、相関・因果・第三の要因を切り分けて読む姿勢が問われます。
マスクを使ったビット取出しと、AND・XOR の使い分け
○整数型: ビット取出し(整数型: x, 整数型: k)
/* x の下から k 番目のビットを 0 か 1 で返す */
整数型: マスク ← 1
整数型: i
for (i を 1 から k − 1 まで 1 ずつ増やす)
マスク ← マスク × 2
endfor
if ((x AND マスク) ≠ 0)
return 1
else
return 0
endif
/* 使い方の例 */
x が 01011010 のとき ビット取出し(x, 5) は 1
x AND 11110000 で下位4ビットをクリア → 01010000
x XOR 11111111 で全反転 → 10100101
| やりたいこと | 使う演算 | マスクの作り方 | 結果 |
|---|---|---|---|
| 特定ビットを1にする | OR | 立てたい桁だけ1 | 他の桁は元のまま |
| 特定ビットを0にする | AND | 残したい桁だけ1 | 指定桁だけクリア |
| 特定ビットを反転する | XOR | 反転したい桁だけ1 | 2回かけると元に戻る |
| 特定ビットを取り出す | AND | 取り出す桁だけ1 | 不要な桁が消える |
| 全ビットを反転する | XOR | 全桁1 | 1の補数になる |
- 排他的論理和
- 2入力が異なるとき1、同じとき0になる演算。XOR と書く。同じ値で2回作用させると元に戻る、加算の桁上がりを無視した和にあたる、といった性質からパリティ計算やビット反転、値の入替えに使われる。
- ド・モルガンの法則
- 論理和の否定は各項の否定の論理積に、論理積の否定は各項の否定の論理和に等しいという関係。複雑な否定条件を分配して書き換えるときに使い、集合では補集合の演算に対応する。
- 包除原理
- 和集合の要素数を求める原理。重なりを二重に数えたぶんを引き、引きすぎたぶんを足し戻す。3つの集合なら各要素数の和から2つずつの共通部分を引き、3つ全ての共通部分を加える。
- 期待値
- 確率変数が取り得る値に、その確率を掛けて足し合わせた値。長期的な平均を表す。期待値は和について線形なので、複数の確率変数の和の期待値は、独立でなくても各期待値の和になる。
- 分散
- 期待値からの偏差の2乗の期待値。ばらつきの大きさを表す。E[X²] − (E[X])² としても計算できる。単位が元の量の2乗になるため、比較には平方根を取った標準偏差を使うことが多い。
- 相関係数
- 共分散を両者の標準偏差の積で割った値で、−1 から 1 の範囲を取る。直線的な連動の強さを表す指標であり、非直線の関係は捉えられない。値が大きくても因果関係を意味しない。
- ベイズの定理
- 結果が観測されたときに原因の確率を更新する式。事前確率に尤度を掛け、全体で正規化して事後確率を得る。発生率の低い事象では、検出率が高い検査でも陽性的中率が低くなることを説明できる。
例題 全社員100名のうち、資格Aの保有者が60名、資格Bの保有者が45名、両方の保有者が25名である。どちらも持たない社員は何名か。
包除原理より、少なくとも一方を持つのは 60 + 45 − 25 = 80名。全体から引いて 100 − 80 = 20名。両方を単純に足した105名は、25名を二重に数えている点に注意する。
例題 データ 2, 4, 4, 4, 5, 5, 7, 9 の分散はいくつか。
平均は 40 ÷ 8 = 5。偏差は −3, −1, −1, −1, 0, 0, 2, 4 で、2乗和は 9 + 1 + 1 + 1 + 0 + 0 + 4 + 16 = 32。分散は 32 ÷ 8 = 4、標準偏差は 2。E[X²] − (E[X])² でも同じ値になることを確かめておくとよい。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類1:基礎理論
待ち行列と情報量・誤り制御
M/M/1 で「利用率が上がると待ち時間が跳ね上がる」ことを数で押さえ、情報量・ハフマン符号・誤り検出訂正までをまとめます。
待ち行列理論は、性能設計でいちばん実務に効く道具です。M/M/1 モデルは、到着がポアソン分布・サービス時間が指数分布・窓口が1つという前提で、利用率 ρ は「到着率 × 平均サービス時間」で求まります。このとき平均待ち時間は ρ ÷ (1 − ρ) × 平均サービス時間、系内の平均応答時間は 平均サービス時間 ÷ (1 − ρ) になります。大事なのは 1 − ρ が分母にあることで、利用率が 0.5 から 0.75 に上がるだけで待ち時間は3倍になります。「CPU使用率がまだ80パーセントだから余裕がある」という判断が危険なのはこのためです。
リトルの法則は、待ち行列の前提を問わず成り立つ関係で、系内の平均個数 L は 到着率 λ と 平均滞在時間 W の積に等しいというものです。3つのうち2つが測れれば残りが求まるので、実測値から未知の指標を出すときに重宝します。窓口を増やす(M/M/s にする)、サービス時間そのものを短くする、到着を平準化する、という3つの打ち手のうちどれが効くかを、式のどこに効くかで判断できるようになるのが目標です。
情報量は「起こりにくい事象ほど、知らされたときの情報が大きい」という考えを対数で定量化したものです。確率 p の事象が起きたと知ったときの情報量は log₂(1/p) ビット。確率 1/8 なら 3ビットです。各事象の情報量を確率で重み付けした平均がエントロピーで、符号化で到達できる平均符号長の下限を与えます。ハフマン符号は、出現確率の低い2つを繰り返しまとめて木を作ることで、この下限に近い可変長符号を作る手法です。頻出の記号に短い符号を割り当てるので、偏りが大きいほど圧縮率が上がります。
誤り制御は、検出だけでよいのか訂正まで必要なのかで手段が変わります。パリティは1ビットの誤りを検出できますが訂正はできず、2ビット誤りは見逃します。CRC は生成多項式による剰余を付加する方式で、連続したビット誤り(バースト誤り)に強く、通信路やストレージで広く使われます。ハミング符号は複数の検査ビットで誤り位置を特定でき、1ビット誤りの訂正と2ビット誤りの検出(拡張ハミング)ができます。データ m ビットに対して必要な検査ビット数 k は 2ᵏ ≧ m + k + 1 を満たす最小値で、データ8ビットなら4ビットが必要です。
生成多項式1011によるCRCの求め方(剰余が検査符号になる)
CRC の生成(生成多項式 x³ + x + 1 → 1011)
送信データ 11010011 の後ろに 3 ビットの 0 を付け、
1011 で排他的論理和による除算を行う。
11010011000
1011
----
1100011000 /* 以下、先頭が1のたびに 1011 をXOR */
1011
----
...
剰余は 011 → 送信するのは 11010011011
受信側で同じ多項式で割り、剰余0なら誤りなしとみなす
| 利用率 ρ | 平均待ち時間 | 平均応答時間 | 系内平均件数 |
|---|---|---|---|
| 0.2 | 0.25 | 1.25 | 0.25 |
| 0.5 | 1.0 | 2.0 | 1.0 |
| 0.6 | 1.5 | 2.5 | 1.5 |
| 0.8 | 4.0 | 5.0 | 4.0 |
| 0.9 | 9.0 | 10.0 | 9.0 |
| 0.95 | 19.0 | 20.0 | 19.0 |
- M/M/1モデル
- 到着がポアソン分布、サービス時間が指数分布、窓口が1つの待ち行列モデル。利用率 ρ は到着率と平均サービス時間の積。平均待ち時間は ρ ÷ (1 − ρ) にサービス時間を掛けた値になり、ρ が1に近づくと発散する。
- 利用率
- 窓口が仕事をしている時間の割合。到着率をサービス率で割った値に等しい。1未満でなければ行列が無限に伸びるため、設計上は余裕を持たせる。待ち時間は利用率に対して直線的ではなく急激に増える。
- リトルの法則
- 系内の平均滞在数は、到着率と平均滞在時間の積に等しいという関係。到着分布やサービス分布の仮定を必要とせず、安定した系であれば広く成り立つ。3量のうち2つの実測から残りを推定できる。
- エントロピー
- 情報源が1記号あたりに持つ平均情報量。各記号の確率で重み付けした log₂(1/p) の平均で、単位はビット。すべての記号が等確率のときに最大となり、偏りが大きいほど小さくなる。可逆圧縮の限界を与える。
- ハフマン符号
- 出現確率の低い2記号を繰り返し併合して2分木を作り、根からの経路で符号語を決める可変長符号。どの符号語も他の符号語の接頭辞にならない語頭符号になるので、区切り記号なしで一意に復号できる。
- CRC
- 巡回冗長検査。データを多項式とみなし、生成多項式で割った剰余を検査符号として付加する。受信側で同じ除算を行い剰余が0かを見る。バースト誤りの検出能力が高く、誤り訂正はできない。
- ハミング符号
- 複数の検査ビットを配置し、それらの組合せで誤りビットの位置を特定して訂正できる符号。データ m ビットに必要な検査ビット数 k は 2ᵏ ≧ m + k + 1 を満たす最小値。1ビット誤りの訂正が可能。
- ハミング距離
- 同じ長さの2つの符号語で、値が異なるビットの個数。符号全体の最小ハミング距離が d のとき、d − 1 ビットの誤り検出、または (d − 1) ÷ 2 の整数部までの誤り訂正ができる。
例題 平均サービス時間が 20ms の窓口に、1秒あたり 30 件の要求が到着する。M/M/1 として平均待ち時間はいくらか。
利用率 ρ は 30 × 0.02 = 0.6。平均待ち時間は ρ ÷ (1 − ρ) × サービス時間 なので 0.6 ÷ 0.4 × 20ms = 30ms。待ちとサービスを合わせた応答時間は 20 ÷ 0.4 = 50ms になる。
例題 データが8ビットのとき、1ビット誤りを訂正するハミング符号に必要な検査ビット数はいくつか。
2ᵏ ≧ m + k + 1 に m = 8 を入れて試す。k = 3 なら 8 ≧ 12 で不成立、k = 4 なら 16 ≧ 13 で成立。よって4ビットで、符号語全体は12ビットになる。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類1:基礎理論
計算量と探索・整列の選び方
O記法でアルゴリズムの伸び方を見積り、探索と整列を「データの性質からどれを選ぶか」で判断できるようにします。
計算量は、データ件数 n が増えたときに処理時間がどう伸びるかを表します。O記法は最も影響の大きい項だけを残す表し方で、定数倍や下位の項は無視します。O(1) は件数に関係なく一定、O(log n) は件数が倍になっても1回ぶんしか増えない、O(n) は比例、O(n log n) は比例よりやや急、O(n²) は件数が4倍になると16倍という具合です。応用情報では「n が 1000 から 4000 になったら処理時間は何倍か」という形でよく問われます。O(n²) なら16倍、O(n log n) なら約4.8倍です。定数倍を無視する記法なので、n が小さいうちは O(n²) のほうが速いこともある、という但し書きも押さえておいてください。
探索は、データの持ち方とセットで選びます。線形探索は前から順に見るだけで O(n)、並んでいなくても使えるかわりに遅い。2分探索は昇順または降順に整列済みであることが前提で O(log n)、n 件なら最大で log₂(n + 1) の切上げ回の比較で済みます。100万件でも20回です。ハッシュ表は鍵から格納位置を計算するので平均 O(1) ですが、異なる鍵が同じ位置になる衝突が起きるため、チェイン法(同じ位置を連結リストにする)やオープンアドレス法(空きを探して置く)で対処します。オープンアドレス法では、表の埋まり具合を示す負荷率が高くなるほど探索回数が急に増えるので、7割程度で拡張するのが一般的です。
整列は計算量だけでは決まりません。バブルソート・選択ソート・挿入ソートはいずれも最悪 O(n²) ですが、挿入ソートはほぼ整列済みのデータなら O(n) に近づき、追加コストがほとんどないという長所があります。クイックソートは平均 O(n log n) で定数倍が小さく実用上いちばん速いことが多い一方、枢軸の選び方が悪いと最悪 O(n²) に落ちます。マージソートは最悪でも O(n log n) を保証しますが、作業用に n 個ぶんの領域が要ります。ヒープソートは最悪 O(n log n) かつ追加領域がほぼ不要ですが、参照の局所性が悪く実測では負けがちです。
もうひとつの軸が安定性です。同じ値の要素どうしの元の順序が保たれるものを安定な整列といい、挿入ソート・マージソート・バブルソートが該当します。クイックソート・ヒープソート・選択ソートは不安定です。「部署順に並べたあと、氏名順に並べ替えても部署内の並びを保ちたい」といった多段の並べ替えでは安定性が必須になります。判断の順序としては、まず安定性が要るか、次に最悪時間の保証が要るか、最後に追加領域を使えるか、と絞り込むと迷いません。
2分探索。範囲が毎回半分になるので比較回数は log₂ に比例する
○整数型: 2分探索(整数型の配列: a, 整数型: key)
/* a は昇順に整列済み。添字は 1 から a の要素数 まで */
整数型: lo ← 1
整数型: hi ← aの要素数
整数型: mid
while (lo ≦ hi)
mid ← (lo + hi) ÷ 2 の商
if (a[mid] = key)
return mid
elseif (a[mid] < key)
lo ← mid + 1
else
hi ← mid − 1
endif
endwhile
return −1 /* 見つからない */
| 方式 | 平均 | 最悪 | 追加領域 | 安定 |
|---|---|---|---|---|
| バブルソート | O(n²) | O(n²) | O(1) | 安定 |
| 選択ソート | O(n²) | O(n²) | O(1) | 不安定 |
| 挿入ソート | O(n²) | O(n²) | O(1) | 安定 |
| シェルソート | n の1.3乗程度 | O(n²) | O(1) | 不安定 |
| クイックソート | O(n log n) | O(n²) | O(log n) | 不安定 |
| マージソート | O(n log n) | O(n log n) | O(n) | 安定 |
| ヒープソート | O(n log n) | O(n log n) | O(1) | 不安定 |
- O記法
- 入力の大きさが増えたときの計算量の増え方を、最も支配的な項だけで表す記法。定数倍と下位の項を無視するため、漸近的な傾向の比較に使う。n が小さい範囲での実測の速さは保証しない。
- 2分探索
- 整列済みの列の中央と比較し、探索範囲を半分ずつ狭める探索法。計算量は O(log n) で、n 件なら最大 log₂(n + 1) の切上げ回の比較で終わる。あらかじめ整列しておく必要があるため、更新が頻繁なデータには向かない。
- ハッシュ法
- 鍵にハッシュ関数を適用して格納位置を直接計算する方式。平均計算量は O(1)。異なる鍵が同じ位置に割り当たる衝突が避けられないため、チェイン法やオープンアドレス法で対処する。範囲検索や順次取出しには向かない。
- 負荷率
- ハッシュ表の大きさに対する格納済み要素数の割合。オープンアドレス法では平均探索回数がおおよそ 1 ÷ (1 − 負荷率) で増えるため、0.7 程度を上限として表を拡張するのが目安になる。
- クイックソート
- 枢軸を選んで大小2組に分け、それぞれを再帰的に整列する分割統治法。平均 O(n log n) で定数倍が小さいが、枢軸が偏り続けると最悪 O(n²) になる。不安定な整列である。
- マージソート
- 列を半分ずつに分割して整列し、整列済みの2列を併合する分割統治法。最悪でも O(n log n) を保証し安定だが、併合用に入力と同程度の作業領域を必要とする。外部整列にも応用される。
- 安定な整列
- 同じ値を持つ要素どうしの入力時の順序が、整列後も保たれる性質。挿入ソート・マージソート・バブルソートは安定、クイックソート・ヒープソート・選択ソートは不安定である。多段の並べ替えで重要になる。
例題 ある処理の計算量が O(n²) で、n が 1000 のとき 3 秒かかった。n が 5000 になると何秒程度か。
n が5倍なので時間は 5² = 25 倍、およそ 75 秒。O(n log n) なら 5 × (log₂5000 ÷ log₂1000) ≒ 5 × 1.23 ≒ 6.2 倍で約19秒にとどまる。倍率の計算では、まず n の倍率を出してから記法の次数を当てはめる。
例題 社員データを部署コード順に整列したあと、同じ手続きで氏名順に整列し直すと、同姓同名がいない限り部署内の並びは失われる。これを防ぐにはどうすればよいか。
氏名順の整列に安定な方式(挿入ソートやマージソート)を使い、部署コード順の整列を先に行えばよい。安定な整列は同値要素の相対順序を変えないため、後から整列した鍵が主キー、先に整列した鍵が副キーとして機能する。クイックソートやヒープソートでは順序が保証されない。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類1:基礎理論
木構造・グラフと再帰・動的計画法
2分探索木・ヒープ・B木を用途で選び分け、グラフの最短経路と、再帰を動的計画法に置き換える考え方を身につけます。
木構造はどれも「階層で絞り込む」道具ですが、得意なことが違います。2分探索木は、ある節点の左部分木にはより小さい値、右部分木にはより大きい値を置く木で、探索・挿入・削除がいずれも木の高さに比例します。ただし昇順に挿入すると一直線の木になり O(n) に退化するため、実務では AVL木や赤黒木のような平衡2分探索木を使って高さを log₂n 程度に保ちます。ヒープは「親は子より小さい(または大きい)」という条件だけを課した完全2分木で、根が常に最小値または最大値になります。全体を整列するわけではないので、最小値の取出しと挿入を繰り返す優先度付きキューに向いています。配列で表せて、1起点なら節点 i の子は 2i と 2i + 1、親は i ÷ 2 の商です。
B木は、1つの節点に複数の鍵と複数の子を持たせた多分木で、ディスクを前提としたデータベースの索引に使われます。狙いは木の高さを極端に低くして、ディスクアクセス回数を減らすことです。1節点が100個の子を持てるなら3段で100万件近くを収められ、どの鍵も3回のアクセスで到達できます。B+木は葉だけにデータを置き、葉どうしを連結リストでつなぐため、範囲検索が高速になります。主記憶の中だけで完結するなら2分探索木、ディスク上の索引ならB木系、という分け方が判断の出発点です。
グラフの最短経路では、辺の重みが非負ならダイクストラ法が使えます。始点からの暫定距離が最小の未確定節点を選んで確定させ、その節点を経由した場合の距離で隣接節点を更新する、を繰り返す貪欲法です。負の重みがある場合はベルマン-フォード法、すべての節点対の最短距離をまとめて求めるならワーシャル-フロイド法(3重ループで O(n³))を使います。重みをすべて1とみなせるなら幅優先探索で十分です。「負の辺があるか」「全対か単一始点か」の2点で手法が決まります。
再帰は、問題を同じ形の小さな問題に分解して解く書き方です。素直に書くと同じ部分問題を何度も計算してしまうことがあり、フィボナッチ数を単純な再帰で求めると呼出し回数が指数的に増えます。これを、一度計算した結果を表に記録して再利用する形に変えるのが動的計画法です。上から再帰しつつ記録するのがメモ化、下から表を埋めるのが漸化式による表計算で、どちらも計算量を多項式に落とします。動的計画法が使えるのは、最適解が部分問題の最適解から組み立てられ(最適部分構造)、かつ同じ部分問題が繰り返し現れる(部分問題の重複)ときです。ナップサック問題、最長共通部分列、編集距離が代表例です。
0-1ナップサック問題を1次元の表で解く動的計画法
○整数型: 最大価値(整数型の配列: w, 整数型の配列: v, 整数型: W)
/* 0-1 ナップサック。品物 i の重さ w[i]、価値 v[i]、容量 W */
整数型の配列: dp ← 要素数 W + 1 の配列、すべて 0
整数型: i, c
for (i を 1 から wの要素数 まで 1 ずつ増やす)
for (c を W から w[i] まで 1 ずつ減らす)
if (dp[c − w[i] + 1] + v[i] > dp[c + 1])
dp[c + 1] ← dp[c − w[i] + 1] + v[i]
endif
endfor
endfor
return dp[W + 1]
/* 容量 c を大きいほうから回すのは、同じ品物を
2回入れてしまわないようにするため */
| 構造 | 探索 | 最小値取出し | 範囲検索 | 主な用途 |
|---|---|---|---|---|
| 整列済み配列 | O(log n) | O(1) | 得意 | 更新の少ない参照専用データ |
| 連結リスト | O(n) | O(n) | 不得意 | 挿入削除が多い列 |
| 平衡2分探索木 | O(log n) | O(log n) | 得意 | 主記憶上の順序付き集合 |
| ヒープ | O(n) | O(log n) | 不得意 | 優先度付きキュー |
| ハッシュ表 | O(1)平均 | O(n) | 不得意 | 完全一致の高速参照 |
| B+木 | O(log n) | O(log n) | 得意 | ディスク上の索引 |
- 2分探索木
- 各節点について、左部分木の値はすべて小さく、右部分木の値はすべて大きいという条件を満たす2分木。探索・挿入・削除の計算量は木の高さに比例する。挿入順が偏ると一直線になり O(n) に退化する。
- 平衡2分探索木
- 挿入や削除のたびに回転などで形を整え、高さを log₂n 程度に保つ2分探索木。AVL木や赤黒木が代表例。最悪計算量が O(log n) で保証されるかわりに、更新時の処理が2分探索木より重い。
- ヒープ
- 親と子の間だけに大小関係を課した完全2分木。根が常に最小値または最大値になる。配列で隙間なく表現でき、挿入と最小値の取出しがいずれも O(log n) なので優先度付きキューの実装に使われる。
- B木
- 1つの節点に複数の鍵と子を持つ多分木で、すべての葉が同じ深さになるよう均衡が保たれる。1節点をディスクの1ブロックに対応させることで、木の高さすなわちアクセス回数を小さく抑えられる。
- ダイクストラ法
- 辺の重みがすべて非負のグラフで、単一始点からの最短経路を求める貪欲法。暫定距離が最小の未確定節点を確定させ、隣接節点の距離を更新することを繰り返す。負の重みがあると正しい結果を得られない。
- ワーシャル-フロイド法
- すべての節点対の最短距離を求める手法。経由してよい節点を1つずつ増やしながら距離表を更新する3重ループで、計算量は O(n³)。負の重みの辺があっても負閉路がなければ正しく求まる。
- 動的計画法
- 部分問題の答えを表に記録して再利用することで、重複した計算を避ける手法。最適部分構造と部分問題の重複という2条件が揃うときに有効。指数時間の素朴な再帰を多項式時間に落とせる。
- メモ化
- 再帰の形を保ったまま、一度計算した引数と結果の組を表に残して同じ計算を繰り返さないようにする技法。上から下へ探索する自然な書き方を維持できるが、必要な部分問題だけを解くので表が疎になることもある。
例題 要素数が 100 万件の平衡2分探索木で、目的の値に到達するまでの比較回数はおよそ何回か。
高さは log₂(1000001) の切上げでおよそ20なので、20回程度。同じ件数を線形探索すれば平均50万回で、桁が4つ違う。ただし2分探索木は挿入順が昇順だと一直線になり100万回に退化するため、平衡を保つ仕組みが前提になる。
例題 1節点あたり最大10個の子を持てるB木を4段で構成すると、最大で何個の鍵を格納できるか。
節点数は 1 + 10 + 100 + 1000 = 1111 個。1節点には子の数より1つ少ない最大9個の鍵が入るので、1111 × 9 = 9999 個。段数がわずか4でこの規模になるのがB木の狙いで、どの鍵にも4回のアクセスで到達できる。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類1:基礎理論
コンピュータ構成とシステム構成
プロセッサの高速化とCPU性能の測り方
パイプラインやスーパースカラで何が速くなるのかを押さえ、CPI・MIPS・命令ミックスで性能を数字にできるようにします。
命令の実行は、命令の取出し・解読・実行・書戻しといった段階に分けられます。パイプラインは、この段階を流れ作業にして、前の命令が実行段にいる間に次の命令の取出しを始める仕組みです。k段のパイプラインで n 命令を流すと、最初の命令が出てくるまでに k サイクル、あとは1サイクルごとに1命令が完成するので、全体では n + k − 1 サイクルで済みます。逐次実行の n × k サイクルと比べると、n が大きいほど k 倍に近づきます。1命令あたりの処理時間そのものは短くなっていない点が大事で、速くなっているのはスループットです。
パイプラインには乱れの原因(ハザード)が3種類あります。構造ハザードは同じ資源を同時に使おうとして起きるもの、データハザードは直前の命令の結果を待たなければならないときに起きるもの、制御ハザードは分岐命令によって次に取り出すべき命令が確定しないときに起きるものです。制御ハザードの影響がいちばん大きいので、分岐先を予測して先に流し込む分岐予測、予測に基づいて実行してしまう投機実行、分岐の直後の命令を必ず実行する遅延分岐といった対策が取られます。予測が外れるとパイプラインを捨てて詰め直す(フラッシュする)ぶんの罰があります。
1サイクルに複数の命令を発行するのがスーパースカラで、演算器を複数持ち、依存関係のない命令を同時に実行します。パイプラインの段数をさらに細かく分けてクロックを上げるのがスーパーパイプライン、依存のない複数の命令をコンパイラがあらかじめ1つの長い命令にまとめておくのが VLIW です。VLIW は並列化の判断をコンパイル時に済ませるのでハードウェアが簡単になりますが、実行時の状況に応じた調整ができません。近年はクロック周波数を上げると消費電力と発熱が急増するため、周波数ではなくコア数を増やすマルチコア化が主流になっています。
性能を数字にするときは CPI と MIPS を使います。CPI は1命令あたりの平均クロックサイクル数で、命令の種類ごとの出現比率とサイクル数を掛けて足した命令ミックスから求めます。MIPS は1秒間に実行できる命令数を百万単位で表したもので、クロック周波数(MHz)を CPI で割ると得られます。ただし MIPS は命令の中身を問わないので、命令セットの異なるプロセッサ間の比較には使えません。実際の性能比較には、実アプリケーションに近い処理を測る SPEC などのベンチマークを使います。マルチコアで速くなる度合いはアムダールの法則で見積もれ、並列化できない部分が全体の足を引っ張ります。
パイプラインの重なり方と、CPI・MIPS の求め方
パイプラインの所要サイクル(5段・命令I1〜I4) 時刻 → 1 2 3 4 5 6 7 8 I1 IF ID EX MA WB I2 IF ID EX MA WB I3 IF ID EX MA WB I4 IF ID EX MA WB n 命令 k 段 → n + k − 1 サイクル 逐次実行なら n × k サイクル 平均CPI = Σ(命令の出現比率 × その命令のサイクル数) MIPS = クロック周波数[MHz] ÷ 平均CPI
| 技術 | 並列にする対象 | 判断の主体 | 弱点 |
|---|---|---|---|
| パイプライン | 1命令の中の段階 | ハードウェア | 分岐で乱れる |
| スーパーパイプライン | 段数を細分化しクロック向上 | ハードウェア | 分岐ペナルティが増える |
| スーパースカラ | 同時に複数命令を発行 | ハードウェア(実行時) | 回路が複雑・電力増 |
| VLIW | 1語に複数命令を格納 | コンパイラ(事前) | 実行時の状況に適応できない |
| マルチコア | スレッドやプロセス | OSとアプリ | 逐次部分が残ると頭打ち |
- パイプライン
- 命令の実行を複数の段階に分け、異なる命令の別々の段階を同時に進める方式。k段で n 命令なら n + k − 1 サイクルで完了する。1命令あたりの遅延は縮まらず、単位時間あたりの処理量が増える。
- ハザード
- パイプラインの流れが乱れる要因。資源の競合による構造ハザード、直前の命令の結果を待つデータハザード、分岐で次の命令が定まらない制御ハザードの3種類がある。空きサイクル(ストール)が挿入され性能が落ちる。
- 分岐予測
- 分岐命令の結果が確定する前に、分岐するかどうかを予測して次の命令を先に取り出す仕組み。過去の分岐履歴を使う動的予測が一般的。予測が外れると先読みした命令を破棄するペナルティが発生する。
- スーパースカラ
- 複数の演算器と発行口を持ち、依存関係のない命令を1サイクルに複数実行する方式。実行時にハードウェアが依存を判定するので回路は複雑になるが、既存の命令列をそのまま高速化できる。
- VLIW
- 同時に実行できる複数の命令を、コンパイラが1つの長い命令語にまとめておく方式。並列化の判断をコンパイル時に済ませるためハードウェアが単純になるが、実行時の状況に応じた最適化はできない。
- CPI
- 1命令の実行に要する平均クロックサイクル数。命令種別ごとの出現比率とサイクル数の積の総和で求める。小さいほど効率がよい。クロック周期を掛けると平均命令実行時間になる。
- MIPS
- 1秒間に実行できる命令数を百万単位で表した指標。クロック周波数をメガヘルツ単位で表した値を CPI で割ると得られる。命令1つあたりの仕事量を考慮しないため、命令セットが異なる機種の比較には使えない。
- アムダールの法則
- 処理のうち並列化できる割合を p、その部分の速度向上を s とすると、全体の速度向上は 1 ÷ ((1 − p) + p ÷ s) にとどまるという法則。逐次部分が残る限り、コア数を増やしても頭打ちになる。
例題 4段のパイプラインで 200 命令を実行する。1段が1サイクル、クロック周期が 5ns のとき、所要時間はいくらか。
所要サイクルは 200 + 4 − 1 = 203。時間は 203 × 5ns = 1015ns。パイプラインを使わなければ 200 × 4 × 5ns = 4000ns なので、およそ3.9倍速い。命令数が増えるほど段数 k に近い倍率へ漸近する。
例題 演算命令が40パーセントで3サイクル、分岐命令が40パーセントで3サイクル、メモリ参照が20パーセントで5サイクルのプロセッサがある。クロック周波数が 1.5GHz のとき MIPS 値はいくらか。
平均CPI は 0.4 × 3 + 0.4 × 3 + 0.2 × 5 = 1.2 + 1.2 + 1.0 = 3.4。MIPS は 1500 ÷ 3.4 ≒ 441 になる。サイクル数を単純平均して (3 + 3 + 5) ÷ 3 ≒ 3.67 としないよう、必ず出現比率で重み付けする。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類2:コンピュータシステム
記憶階層とキャッシュの効かせ方
速い記憶ほど小さく高価という制約の中で、キャッシュのヒット率と書込み方式がシステム全体の速さをどう決めるかを押さえます。
記憶装置は、速いものほど容量あたりの単価が高く小さくなります。レジスタ、キャッシュ(L1・L2・L3)、主記憶、SSD やハードディスクという順に、速度は下がり容量と安さは上がります。これを積み重ねて、よく使うものを上の階層に置くことで、平均的には上の階層の速さで、容量は下の階層の大きさで使えるようにするのが記憶階層の考え方です。これが成り立つ根拠が参照の局所性で、直前に使ったものをまた使う時間的局所性と、使った場所の近くを使う空間的局所性の2つがあります。キャッシュがブロック単位でまとめて読み込むのは、空間的局所性を当て込んでいるからです。
キャッシュの効果は実効アクセス時間で測ります。ヒット率を h、キャッシュのアクセス時間を tc、主記憶のアクセス時間を tm とすると、実効アクセス時間は h × tc + (1 − h) × tm です。注意したいのは、ヒット率が少し下がるだけで実効アクセス時間が大きく伸びること。tc が 5ns、tm が 80ns なら、ヒット率 96 パーセントで 8ns ですが、90 パーセントに落ちると 12.5ns になります。主記憶とキャッシュの速度差が大きいほど、ヒット率の影響が効いてきます。多階層キャッシュでは、L1 をミスしたときだけ L2 を見る、という入れ子の形で計算します。
主記憶のどのブロックをキャッシュのどこに置くかを決めるのが写像方式です。ダイレクトマップは置き場所が1か所に決まるので回路が単純で速いかわりに、同じ場所に写るブロックを交互に使うと毎回追い出し合いになります。フルアソシアティブはどこにでも置けるので衝突しませんが、全エントリを同時に照合する必要があり高価です。実際には両者の折衷であるセットアソシアティブが使われ、4ウェイなら1つのセットに4個まで置けます。追い出す対象の選び方には LRU(最も長く使われていないもの)などが使われます。
書込みの扱いには2方式あります。ライトスルーは書込みのたびにキャッシュと主記憶の両方を更新する方式で、内容が常に一致しているので信頼性が高く、複数のプロセッサやDMAから見た一貫性も保ちやすい反面、書込みのたびに遅い主記憶へのアクセスが発生します。ライトバックはキャッシュだけを更新し、そのブロックが追い出されるときにまとめて主記憶へ書き戻す方式で、同じ場所への繰り返し書込みが速くなりますが、追い出し時に遅延が生じ、電源断で内容を失う危険もあります。マルチコアでは各コアのキャッシュ内容が食い違わないよう、スヌープなどのキャッシュコヒーレンシ制御が必要になります。
1階層と2階層のキャッシュにおける実効アクセス時間
実効アクセス時間の計算
1階層のとき
EAT = h × tc + (1 − h) × tm
2階層のとき(L1をミスしたときだけL2を見る)
EAT = h1 × t1
+ (1 − h1) × ( h2 × t2 + (1 − h2) × tm )
例: h1 = 0.95, t1 = 2ns
h2 = 0.8, t2 = 10ns, tm = 110ns
EAT = 0.95 × 2 + 0.05 × (0.8 × 10 + 0.2 × 110)
= 1.9 + 0.05 × 30 = 3.4ns
| 階層 | おおよその速度 | 容量の目安 | 揮発性 |
|---|---|---|---|
| レジスタ | 1サイクル未満 | 数百バイト | 揮発 |
| 1次キャッシュ | 数サイクル | 数十KB | 揮発 |
| 2次・3次キャッシュ | 十数〜数十サイクル | 数MB | 揮発 |
| 主記憶(DRAM) | 数十ns | 数GB | 揮発 |
| SSD | 数十μs | 数百GB | 不揮発 |
| ハードディスク | 数ms | 数TB | 不揮発 |
- 参照の局所性
- プログラムのメモリ参照が特定の範囲に集中する性質。同じ番地を短時間に繰り返し使う時間的局所性と、近い番地を続けて使う空間的局所性がある。キャッシュや仮想記憶が有効に働く前提となる。
- 実効アクセス時間
- キャッシュを含めた記憶へのアクセスにかかる平均時間。ヒット率をh、キャッシュの時間をtc、主記憶の時間をtmとすると h × tc + (1 − h) × tm で求める。ヒット率のわずかな低下が大きく効く。
- ダイレクトマップ
- 主記憶のブロックを置けるキャッシュの位置が1か所に定まる写像方式。照合回路が単純で高速だが、同じ位置に写るブロックを交互に参照すると衝突が続き、ヒット率が大きく落ちることがある。
- セットアソシアティブ
- キャッシュを複数のセットに分け、1セットの中の任意のウェイに置ける写像方式。4ウェイなら同じセットに4ブロックまで共存できる。ダイレクトマップとフルアソシアティブの中間で、実装の主流である。
- ライトスルー
- 書込み時にキャッシュと主記憶の両方を同時に更新する方式。両者の内容が常に一致するため一貫性を保ちやすいが、書込みのたびに主記憶へのアクセスが発生し書込み性能は上がりにくい。
- ライトバック
- 書込みをキャッシュだけに行い、そのブロックが追い出されるときに主記憶へ書き戻す方式。書込みの多い処理で高速だが、主記憶と内容が一時的に食い違うため、更新の有無を示すダーティビットの管理が必要になる。
- キャッシュコヒーレンシ
- 複数のプロセッサがそれぞれキャッシュを持つとき、同じ番地の内容が食い違わないように保つ仕組み。ほかのコアのバス操作を監視して自分のキャッシュを無効化するスヌープ方式が広く使われる。
- メモリインタリーブ
- 主記憶を複数のバンクに分け、連続する番地を異なるバンクに割り当てて並行にアクセスする技法。1つのバンクが応答している間に次のバンクへ要求を出せるため、連続領域の読み書きが高速になる。
例題 キャッシュのアクセス時間が 5ns、主記憶が 65ns、ヒット率が 80 パーセントのとき、実効アクセス時間はいくらか。
0.8 × 5 + 0.2 × 65 = 4 + 13 = 17ns。ヒット率が 90 パーセントに上がれば 0.9 × 5 + 0.1 × 65 = 11ns まで縮む。ヒット率を10ポイント上げるだけで3割以上速くなるのは、キャッシュと主記憶の速度差が13倍あるためである。
例題 同じ2つの番地を交互に参照するループがあり、この2番地がキャッシュ上で同じ位置に写るとき何が起きるか。写像方式による違いも述べよ。
ダイレクトマップでは、参照のたびに相手を追い出す競合性ミスが続き、ヒット率がほぼ0になる。セットアソシアティブなら同じセットに複数のブロックを置けるので、2ウェイ以上あればどちらもキャッシュに残り、以後はヒットし続ける。容量が足りているのにミスするこの現象は、写像方式を選ぶ理由そのものである。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類2:コンピュータシステム
割込みと入出力制御
CPUが待たされないための仕組みとして、割込みの種類と処理順序、そしてポーリング・DMA・チャネルの使い分けを整理します。
割込みは、実行中の処理を中断して別の処理へ制御を移す仕組みです。発生源によって内部割込みと外部割込みに分けます。内部割込みは実行中の命令そのものが原因で起きるもので、0除算やけたあふれなどのプログラム割込み、ページフォールト、特権命令違反、そしてシステムコールを実現するスーパバイザ呼出し(SVC割込み)が該当します。外部割込みは命令の実行とは無関係に起きるもので、入出力の完了通知、タイマ(インターバルタイマ)による時間切れ、機械チェック割込み、電源異常などです。どちらに分類されるかは頻出なので、原因が実行中の命令にあるかどうかで切り分けてください。
割込みが起きると、まず現在のプログラムカウンタとプログラム状態語(レジスタの内容を含む)を退避し、割込みの原因に応じた割込み処理ルーチンの先頭アドレスへ分岐します。処理が終わったら退避した内容を復元して元の処理を再開します。この退避と復元があるからこそ、中断された処理は割込みがなかったかのように続けられます。処理中にさらに割込みが起きる多重割込みでは、優先度の高いものだけを受け付け、低いものは割込み禁止(マスク)にして待たせます。電源異常や機械チェックは最優先で、入出力完了はそれより低い、という順序になります。
入出力の方式は、CPUをどれだけ使うかで並びます。プログラム制御方式(ポーリング)は、CPU が入出力装置の状態レジスタを繰り返し読んで完了を確認する方式で、実装は単純ですが待っている間ずっと CPU を消費します。割込み駆動方式は、装置側が完了時に割込みで知らせるので、待っている間 CPU は別の仕事ができます。DMA 方式は、CPU を介さずに DMA コントローラが主記憶と装置の間で直接データを転送し、転送完了時にだけ割込みで知らせます。大量のデータをまとめて動かすディスクやネットワークで使われます。チャネル制御方式は、入出力専用のプロセッサ(チャネル)が入出力プログラムを解釈して実行する方式で、大型機で使われます。
DMA が主記憶をアクセスしている間、CPU も主記憶を使いたい場合があります。バスを1サイクルだけ借りて少しずつ転送するのがサイクルスチール、転送が終わるまでバスを占有するのがバースト転送です。サイクルスチールは CPU の処理をわずかに遅らせるだけで済み、バースト転送は転送効率が最も高いかわりに CPU が待たされます。どちらを選ぶかは、応答性を優先するか転送量を優先するかの判断になります。なお、ポーリングは常に劣った方式というわけではなく、割込みの回数が極端に多い高速なネットワーク処理では、割込み処理そのもののオーバヘッドを避けるために意図的にポーリングを使うこともあります。
割込み処理の手順と、DMA転送時間の求め方
割込みが起きたときの流れ
1. 実行中の命令を区切りのよいところまで終える
2. プログラムカウンタとプログラム状態語を退避する
3. 割込み要因を判定する
4. 要因に対応する割込み処理ルーチンへ分岐する
5. 処理を行う(必要なら多重割込みを許可する)
6. 退避した内容を復元する
7. 中断した位置から実行を再開する
DMA転送に要する時間の見積り
転送回数 = 総バイト数 ÷ 1回あたりの転送バイト数
所要時間 = 転送回数 × 1回あたりのバス周期
| 方式 | 転送を行う主体 | CPUの負担 | 向いている場面 |
|---|---|---|---|
| ポーリング | CPU | 大(待ち続ける) | 装置が少なく応答を急ぐとき |
| 割込み駆動 | CPU | 中(通知時のみ) | 少量データの入出力 |
| DMA | DMAコントローラ | 小(開始と完了のみ) | ディスクやネットワークの大量転送 |
| チャネル制御 | チャネル(専用プロセッサ) | 最小 | 大型機の多数装置の同時入出力 |
- 内部割込み
- 実行中の命令そのものが原因で発生する割込み。0除算やけたあふれなどのプログラム割込み、ページフォールト、特権命令違反、スーパバイザ呼出しが含まれる。同じ命令を再実行すれば再現しうる点が外部割込みと異なる。
- 外部割込み
- 実行中の命令とは無関係な要因で発生する割込み。入出力の完了、インターバルタイマによる時間切れ、機械チェック、電源異常などが該当する。発生の時期をプログラム側から予測できない。
- 多重割込み
- 割込み処理の実行中に、さらに別の割込みを受け付けること。優先度の高い割込みだけを通し、低いものは割込み禁止で待たせる。電源異常や機械チェックが最も優先され、入出力完了はそれより低い。
- ポーリング
- CPUが入出力装置の状態を繰り返し読んで、準備完了や転送完了を確認する方式。実装が単純で応答の遅延が小さい反面、待っている間もCPUを消費する。割込み回数が極端に多い場面では逆に有利になる。
- DMA
- CPUを介さずに、専用のコントローラが主記憶と入出力装置の間で直接データを転送する方式。CPUは転送開始を指示し、完了の割込みを受け取るだけでよいので、大量データの転送でCPUの負担を大きく減らせる。
- サイクルスチール
- DMA転送で、CPUが主記憶を使っていない機会をとらえて1サイクルずつバスを借りる方式。CPUの処理はわずかに遅れるだけで止まらない。転送が終わるまでバスを占有するバースト転送と対になる考え方である。
- チャネル制御方式
- 入出力専用のプロセッサであるチャネルが、主記憶上の入出力プログラムを解釈して装置を制御する方式。CPUは入出力の起動だけを行う。1つの装置を専有するセレクタチャネルと、複数を切り替えるマルチプレクサチャネルがある。
例題 0除算、ページフォールト、タイマによる時間切れ、入出力完了のうち、内部割込みはどれか。
0除算とページフォールトが内部割込み。どちらも実行中の命令が原因で発生し、その命令を実行しなければ起きない。タイマの時間切れと入出力完了は、実行中の命令と無関係に外から発生するので外部割込みである。
例題 1回のバス獲得で8バイトを転送でき、1回あたり 40ns を要する DMA で、2 × 10⁶ バイトを転送するのに要する時間はいくらか。
転送回数は 2000000 ÷ 8 = 250000 回。所要時間は 250000 × 40ns = 10000000ns = 10ms。1バイトずつ転送する方式なら 2000000 × 40ns = 80ms かかるので、まとめて運ぶことの効果が大きいと分かる。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類2:コンピュータシステム
システム構成と仮想化の選び方
冗長化の型、スケールアップとスケールアウトの分かれ目、仮想マシンとコンテナの違いを、コストと可用性の判断として整理します。
複数の装置を組み合わせる型にはそれぞれ狙いがあります。デュアルシステムは同じ処理を2系統で行い、結果を突き合わせて一致を確認する構成で、誤りの検出まで含めた高い信頼性が要る場面に使います。デュプレックスシステムは主系が本番処理を行い、従系が待機する構成で、待機の仕方によってホットスタンバイ(電源を入れ同じ状態を保って即座に切り替わる)、ウォームスタンバイ(起動はしているが切替に少し時間がかかる)、コールドスタンバイ(停止しており起動から始める)に分かれます。待機中の従系で別の処理をさせる運用もあり、これをバックアップサイトの考え方と組み合わせるとコストを抑えられます。
クラスタは複数のサーバを1つのシステムとして見せる構成で、目的が2つに分かれます。可用性クラスタ(HAクラスタ)は、あるノードが落ちたら別のノードが処理を引き継ぐことで停止時間を減らします。負荷分散クラスタは、要求を複数ノードに振り分けて処理量を増やします。振り分けはロードバランサが行い、順番に配るラウンドロビン、接続数の少ないノードへ配る最小接続数、応答時間を見て配る方式などがあります。セッション情報をサーバ側に持つ場合は、同じ利用者を同じノードへ送るスティッキーセッションが必要になりますが、これをやると特定ノードに偏りやすく、障害時にセッションが失われます。セッションを外部の共有ストアに出しておくと、この制約から解放されます。
処理能力を増やす方法には2通りあります。スケールアップは1台の性能を上げること、スケールアウトは台数を増やすことです。スケールアップは構成が単純でアプリケーションの変更が要らず、書込みが集中するデータベースのように分割しにくい処理に向きますが、いずれ1台の上限に当たり、その1台が単一障害点として残ります。スケールアウトは理論上は台数だけ伸ばせて、1台の故障が全体を止めないという可用性の利点もありますが、状態を各ノードに持たせない設計(ステートレス化)やデータの分割が前提になります。判断の要は「処理を分割できるか」と「単一障害点を許容できるか」の2点です。
仮想化には層の違いがあります。ハイパーバイザ型(ベアメタル型)はハードウェア上で直接動く仮想化基盤の上に複数のゲストOSを載せる方式で、性能と分離度に優れます。ホスト型はホストOSの上のアプリケーションとして仮想化ソフトを動かす方式で、導入は容易ですが層が1つ多いぶん遅くなります。コンテナはそもそもOSを複製せず、ホストのカーネルを共有したまま名前空間と資源制限でアプリケーションの実行環境だけを分離する方式です。OSの起動が不要なので起動が速く、イメージも小さく、同じホストに多数を詰め込めますが、カーネルを共有するため分離の強さは仮想マシンに劣り、ホストと異なる種類のOSは動かせません。稼働中の仮想マシンを止めずに別の物理ホストへ移すライブマイグレーションは、保守時の無停止化に使われます。
処理能力を増やすときの判断の順序
スケールアップとスケールアウトの判断
if (処理を複数ノードに分割できない)
/* 書込みが集中する単一のDBなど */
スケールアップを選ぶ
elseif (単一障害点を残せない)
スケールアウトを選ぶ
elseif (負荷の増減が大きく読めない)
スケールアウトを選ぶ /* 台数で追随できる */
else
運用の手間と費用で比較する
endif
/* スケールアウトの前提 */
・セッションなどの状態をノードに持たせない
・データの分割方針を先に決めておく
・ロードバランサ自身も冗長化する
| 観点 | ハイパーバイザ型仮想マシン | コンテナ |
|---|---|---|
| OSカーネル | ゲストごとに別 | ホストと共有 |
| 起動時間 | 数十秒〜数分 | 1秒未満のことが多い |
| イメージの大きさ | GB級 | MB級 |
| 分離の強さ | 強い | カーネル共有のぶん弱い |
| 異種OSの同居 | 可 | 不可 |
| 集約できる数 | 中 | 多い |
- デュアルシステム
- 同じ処理を2系統で並行して実行し、結果を照合して一致を確認する構成。誤りの検出能力が高く、片方が故障しても処理を継続できる。装置も処理も二重になるためコストは高い。
- デュプレックスシステム
- 主系が本番処理を行い、従系が待機する構成。待機の仕方でホットスタンバイ、ウォームスタンバイ、コールドスタンバイに分かれ、切替時間とコストのトレードオフになる。従系で別の処理を行う運用もある。
- ロードバランサ
- 複数のサーバへ要求を振り分ける装置またはソフトウェア。ラウンドロビン、最小接続数、応答時間などの方式で分配し、応答しないサーバを切り離すヘルスチェックも行う。負荷分散と可用性の両方に寄与する。
- スケールアップ
- 1台の機器の処理能力を高めて全体の性能を上げる方法。構成が単純でアプリケーションの変更が不要だが、1台の上限で頭打ちになり、その1台が単一障害点として残る。分割しにくい処理に向く。
- スケールアウト
- 機器の台数を増やして全体の処理能力を上げる方法。1台の故障が全体を止めにくく、必要に応じて増減できる。ノードに状態を持たせない設計やデータの分割が前提となり、整合性の管理が難しくなる。
- ハイパーバイザ型
- ハードウェア上で直接動作する仮想化基盤の上に、複数のゲストOSを動かす方式。ホストOSを経由しないため性能の損失が小さく、ゲスト間の分離も強い。サーバ仮想化の主流である。
- コンテナ
- ホストOSのカーネルを共有したまま、名前空間と資源制限でアプリケーションの実行環境だけを分離する方式。OSの起動が不要で軽量かつ高速だが、カーネルを共有するため分離度は仮想マシンに劣る。
- ライブマイグレーション
- 稼働中の仮想マシンを停止させずに別の物理ホストへ移動させる機能。メモリの内容を転送しながら差分を追いかけ、最後にごく短時間だけ切り替える。物理サーバの保守を無停止で行える。
例題 Webサーバを3台に増やして負荷分散したところ、ログイン後にときどき未ログイン状態に戻る現象が起きた。原因として何が考えられ、どう直すか。
セッション情報を各サーバのメモリに持っており、次の要求が別のサーバへ振り分けられたためにセッションが見つからない。対策は、同じ利用者を同じサーバへ送るスティッキーセッションを設定するか、セッションを共有のデータストアへ外出しすることである。後者のほうが偏りも起きず、サーバ故障時にもセッションが失われないので望ましい。
例題 同じ物理サーバに、開発用の環境を数十個用意したい。起動と破棄を1日に何度も繰り返し、いずれもホストと同じ種類のOS上で動く。仮想マシンとコンテナのどちらが適するか。
コンテナが適する。OSの起動が不要なので生成と破棄が数秒で済み、イメージが小さいので数十個を同じホストに載せられる。異種OSが不要で、開発用途なら分離の強さより軽さと速さが優先されるという条件がそろっている。逆に、他社の利用者を同居させるなど強い分離が要る場合は仮想マシンを選ぶ。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類2:コンピュータシステム
信頼性設計・稼働率と性能評価
壊れることを前提にした設計の型を区別し、稼働率とRAIDを計算で押さえ、性能をどの指標で測るかまで通します。
信頼性の設計には、大きく2つの方向があります。フォールトアボイダンスは、部品の品質を上げ、試験を厚くして、そもそも故障を起こさせない方向。フォールトトレランスは、故障は起きるものとして冗長化しておき、起きても機能を保つ方向です。後者の中の型を区別できるようにしておきます。フェールセーフは、故障したときに危険のない側へ倒す設計で、信号機が故障したら赤で止める、といったものです。フェールソフトは、機能を落としてでも運転を続ける設計で、縮退運転(フォールバック)がこれにあたります。フールプルーフは、利用者が誤った操作をしてもシステムが壊れないようにする設計です。名前と例が入れ替えられた選択肢が並ぶので、対象が「故障」なのか「誤操作」なのか、結果が「止める」のか「続ける」のかで切り分けてください。
稼働率の計算は、直列と並列を見分けるところから始まります。どれか1つでも止まると全体が止まる関係が直列で、稼働率は各稼働率の積になります。どれか1つでも動いていれば全体が動く関係が並列で、全部が同時に止まる確率を1から引いた 1 − (1 − a)(1 − b) になります。組み合わさった構成は、内側の並列部分をひとつの稼働率にまとめてから、直列の積を取ります。装置1台の稼働率は MTBF ÷ (MTBF + MTTR) で求められます。MTBF は平均故障間隔(動いている時間の平均)、MTTR は平均修復時間で、MTBF を伸ばすより MTTR を縮めるほうが安く効くことも多い、というのが実務での判断どころです。
ディスクの冗長化は RAID で行います。RAID0(ストライピング)は複数台に分散して書くだけなので速いが冗長性はなく、1台の故障で全データを失います。RAID1(ミラーリング)は同じ内容を2台に書くので、実効容量は半分ですが1台の故障に耐えます。RAID5 はパリティを分散して持ち、n 台なら実効容量は n − 1 台ぶんで、1台までの故障に耐えます。RAID6 はパリティを2組持つので実効容量は n − 2 台ぶん、2台の同時故障に耐えます。RAID5 は小さな書込みのたびに旧データと旧パリティの読出しと書込みが必要(書込みペナルティ)なので、書込みが多い用途では RAID1 や RAID10 のほうが速いことがあります。容量効率・書込み性能・耐えられる故障台数の3つで選びます。
性能の測り方は、見たいものによって指標が変わります。スループットは単位時間あたりに処理できる件数で、システム全体の処理量を表します。レスポンスタイムは要求を出してから最初の応答が返るまで、ターンアラウンドタイムは処理がすべて終わるまでの時間です。オンライン処理ではレスポンスタイム、バッチ処理ではターンアラウンドタイムが重視されます。平均値だけでなく、上位のばらつき(たとえば95パーセンタイル)を見ないと、少数の極端に遅い応答を見落とします。機種の比較にはベンチマークを使い、CPU の演算性能なら SPEC、トランザクション処理性能なら TPC 系の指標が代表的です。実際の負荷特性が自社のものと違えば結果もずれるため、最終的には実データを流すテストが要ります。
直列・並列の合成と、MTBF・MTTR からの稼働率
稼働率の合成
直列(1つでも止まると全体が止まる)
A = a1 × a2 × … × an
並列(1つでも動けば全体が動く)
A = 1 − (1 − a1)(1 − a2) … (1 − an)
1台の稼働率
a = MTBF ÷ (MTBF + MTTR)
計算例: 稼働率 0.85 の装置2台を並列にし、
その後段に稼働率 0.9 の装置を直列で置く
並列部 = 1 − 0.15 × 0.15 = 0.9775
全体 = 0.9775 × 0.9 = 0.87975
| 方式 | 実効容量 | 故障耐性 | 読出し | 書込み |
|---|---|---|---|---|
| RAID0 | n 台ぶん | なし | 速い | 速い |
| RAID1 | n ÷ 2 台ぶん | 1台(組ごと) | 速い | やや遅い |
| RAID5 | n − 1 台ぶん | 1台 | 速い | ペナルティあり |
| RAID6 | n − 2 台ぶん | 2台 | 速い | ペナルティ大 |
| RAID10 | n ÷ 2 台ぶん | 組ごとに1台 | 速い | 速い |
- フォールトトレランス
- 構成要素の故障を前提に冗長性を持たせ、故障が起きても全体としての機能を維持する考え方。故障そのものを起こさせないようにするフォールトアボイダンスと対になる。冗長化のぶんコストが増える。
- フェールセーフ
- 故障が起きたときに、安全な側の状態へ移行させる設計。信号機が故障時に赤を示す、ガス機器が異常時に弁を閉じるなどが例。機能の継続よりも安全の確保を優先する点が特徴である。
- フェールソフト
- 故障が起きたときに、性能や機能を落としてでも運転を継続する設計。障害のある部分を切り離して残りで動かす縮退運転(フォールバック)が典型例。止めないことを優先する点でフェールセーフと異なる。
- フールプルーフ
- 利用者の誤った操作があってもシステムが異常な状態にならないようにする設計。ふたを閉めないと回らない洗濯機、確認画面、入力値の検査などが該当する。対象が故障ではなく人の操作である点が区別の鍵になる。
- MTBF
- 平均故障間隔。修理して使う装置が、故障から次の故障までに正常動作する時間の平均を表す。稼働率は MTBF ÷ (MTBF + MTTR) で求まる。値が大きいほど故障しにくい。
- MTTR
- 平均修復時間。故障してから復旧するまでに要する時間の平均。保守体制や予備機の配置で短縮できる。MTBF を延ばすより MTTR を縮めるほうが、同じ稼働率の改善を安く実現できることが多い。
- RAID5
- データとパリティを複数台に分散して記録する方式。n 台構成なら実効容量は n − 1 台ぶんで、1台までの故障に耐える。小さな書込みのたびに旧データと旧パリティの読み書きが必要になる書込みペナルティがある。
- スループット
- 単位時間あたりに処理できる仕事の量。件数や毎秒トランザクション数で表す。1件あたりの速さを表すレスポンスタイムとは別の指標で、多重度を上げるとスループットは伸びてもレスポンスは悪化することがある。
- ベンチマーク
- あらかじめ定めた標準的な処理を実行して性能を測る手法。CPU 性能の SPEC、トランザクション処理の TPC などがある。実際の業務の負荷特性と異なれば結果もずれるため、最終判断には実データによる検証が要る。
例題 MTBF が 400 時間、MTTR が 25 時間の装置がある。稼働率はいくらか。また MTTR を 10 時間に短縮すると稼働率はどうなるか。
400 ÷ (400 + 25) = 400 ÷ 425 ≒ 0.941。MTTR を10時間にすると 400 ÷ 410 ≒ 0.976 に上がる。装置の作り直し(MTBF の改善)をせずに、保守体制の見直しだけで稼働率を3ポイント以上改善できる例である。
例題 容量 3TB のディスク6台で RAID6 を構成したときの実効容量はいくらか。RAID5 との差は何に使われているか。
RAID6 はパリティを2組持つので実効容量は (6 − 2) × 3 = 12TB。RAID5 なら (6 − 1) × 3 = 15TB なので、差の3TBが2台目のパリティに使われている。この3TBと引き換えに、2台が同時に故障しても復旧できる耐性を得ている。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類2:コンピュータシステム
ソフトウェアとデータベース
OSの役割とプロセス管理
OSがCPUをどう配り、プロセスとスレッドをどう動かし、デッドロックをどう避けるのかが分かります。
オペレーティングシステム(OS)は、CPU・主記憶・入出力装置・ファイルといった資源を、複数のプログラムが安全に共同利用できるように仲立ちするソフトウェアです。中核であるカーネルは特権命令を実行できるカーネルモードで動き、応用プログラムは特権命令を実行できないユーザモードで動きます。応用プログラムがファイル入出力やメモリ確保のように特権を要する処理をしたいときは、システムコールでカーネルに依頼します。この分離があるおかげで、あるプログラムの暴走が他のプログラムやOS自身を壊さずに済みます。ハードウェアからの通知は割込みとして届き、OSは実行中の処理をいったん退避して割込み処理ルーチンへ切り替えます。
実行中のプログラムをプロセスといい、OSはプロセスごとに独立したアドレス空間と、プロセス制御ブロック(PCB)という管理情報を持たせます。PCBにはプログラムカウンタやレジスタの内容、優先度、割り当てた資源、状態などが入っていて、CPUを別のプロセスに渡すときはこれを退避し、戻すときに復元します。この入替えがコンテキストスイッチで、それ自体は仕事を進めないオーバヘッドなので、起こる回数が多すぎると全体の効率が落ちます。
スレッドはプロセスの中にある実行の流れです。同じプロセスのスレッドどうしはアドレス空間とファイル記述子を共有し、スタックとレジスタだけを別々に持ちます。共有しているぶん生成も切替えも軽く、データの受渡しに通信の仕組みが要りません。その代わり、一つのスレッドが不正なメモリ操作をするとプロセス全体が巻き添えになり、共有データの読み書きが重なると結果が実行順に左右される競合状態が起きます。独立性を優先するならプロセス、軽さと共有のしやすさを優先するならスレッド、という判断になります。
プロセスは実行可能・実行・待ちの三つの状態を行き来します。CPUを割り当てられると実行可能から実行へ、入出力を要求すると実行から待ちへ、入出力が終わると待ちから実行可能へ移ります。実行から実行可能へ戻るのは、時間切れや、より優先度の高いプロセスに横取りされたときで、これをプリエンプションといいます。待ちから直接実行へ移る遷移はありません。いったん実行可能の列に並び直すからです。
どのプロセスに次のCPUを渡すかを決めるのがスケジューリングです。到着順(FCFS)は単純ですが、長い処理が先頭にいると後続が待たされます。処理時間の短い順(SJF)は平均ターンアラウンドタイムを最小にできますが、実行前に処理時間が分かる前提が要り、長い処理が後回しにされ続ける飢餓が起こり得ます。ラウンドロビンは一定のタイムクォンタムごとに順番に回すので応答時間が安定し、対話処理に向きます。タイムクォンタムを短くすると応答は良くなる一方でコンテキストスイッチの回数が増え、長くすると到着順に近づきます。評価の物差しは、ターンアラウンドタイム(完了時刻から到着時刻を引いた値)、待ち時間、応答時間、単位時間当たりの処理件数であるスループットです。
複数のプロセスが同じ資源を同時に書き換えないようにするのが排他制御です。同時に一つしか入れない区間をクリティカルセクションといい、セマフォやミューテックス、モニタで守ります。セマフォは使える資源の個数を表す変数で、取るときのP操作、返すときのV操作を必ず対にします。初期値1のセマフォは、実質ミューテックスとして働きます。
排他制御を雑に組むとデッドロックになります。デッドロックが成立するには、相互排除・保持と待ち・横取り不可・循環待ちの四つがすべて必要で、どれか一つを崩せば起きません。資源に番号を付けて必ず小さい順に確保させる(循環待ちを崩す)、必要な資源を最初にまとめて確保させる(保持と待ちを崩す)といった予防が代表です。銀行家アルゴリズムは、要求を受け入れても安全な状態が保てるかを毎回判定する回避の手法です。実務では検出と回復、つまり一定時間ごとに待ちグラフの循環を調べ、いずれかのプロセスを強制終了して巻き戻す方式も広く使われます。なお、n個のプロセスがそれぞれ同種の資源を最大k個まで要求するとき、資源が n×(k-1)+1 個あればデッドロックは絶対に起きません。全員があと1個で足りる状態まで配っても1個余るからです。
大域: 整数型: s ← 1 /* 使える資源の数。1 ならミューテックス */
○P(整数型: s) /* 資源を取る */
while (s ≦ 0)
/* 空くまで待つ */
endwhile
s ← s - 1
○V(整数型: s) /* 資源を返す */
s ← s + 1
| 方式 | 次に走らせるもの | 向いている場面 | 弱点 |
|---|---|---|---|
| 到着順(FCFS) | 先に到着したもの | バッチ処理で公平さだけ確保したいとき | 長い処理が先頭にいると後続が待たされる |
| 処理時間順(SJF) | 残り処理時間が最も短いもの | 平均ターンアラウンドタイムを縮めたいとき | 処理時間の見積りが要る。長い処理が飢餓になる |
| 優先度順 | 優先度が最も高いもの | 応答が命の処理を先に通したいとき | 低優先度が飢餓になる。エージングで補う |
| ラウンドロビン | 順番待ちの先頭を一定時間だけ | 対話処理。応答時間をそろえたいとき | クォンタムが短いと切替えのオーバヘッドが増える |
| 多段フィードバック | 上位の待ち行列から。使い切ると下位へ | 処理時間が事前に分からない混在環境 | 設計が複雑で、調整項目が多い |
- カーネルモード
- 特権命令を実行できる動作モード。OSの中核はここで動き、応用プログラムはユーザモードで動いてシステムコール経由でカーネルに処理を依頼する。
- システムコール
- 応用プログラムがOSの機能を呼び出すための入口。ファイル入出力やメモリ確保など、特権が要る処理はすべてこれを通る。
- プロセス制御ブロック
- PCB。プロセスごとの管理情報で、プログラムカウンタ、レジスタの内容、優先度、状態、割当て資源などを保持する。コンテキストスイッチでの退避と復元の対象。
- コンテキストスイッチ
- CPUを使うプロセスやスレッドを切り替える処理。レジスタなどの退避と復元が必要で、それ自体は仕事を進めないオーバヘッドになる。
- スレッド
- プロセス内の実行の流れ。同じプロセスのスレッドはアドレス空間とファイル記述子を共有し、スタックとレジスタだけを個別に持つ。切替えは軽いが独立性は低い。
- プリエンプション
- 実行中のプロセスからCPUを強制的に取り上げること。時間切れや高優先度プロセスの到着で起こり、実行状態から実行可能状態へ戻る。
- ターンアラウンドタイム
- 処理を依頼してから結果がすべて得られるまでの時間。完了時刻から到着時刻を引いた値で、待ち時間と処理時間の合計に等しい。
- ラウンドロビン
- 一定のタイムクォンタムごとにCPUを順番に回すスケジューリング。応答時間が安定するので対話処理に向く。クォンタムを短くすると切替え回数が増える。
- セマフォ
- 使える資源の個数を表す変数と、取得のP操作・解放のV操作の組で排他制御を行う仕組み。初期値1ならミューテックスと同じ働きになる。
- 競合状態
- 複数の実行の流れが同じデータを読み書きし、実行の順序によって結果が変わってしまう状態。クリティカルセクションを排他制御で守って防ぐ。
- デッドロックの4条件
- 相互排除、保持と待ち、横取り不可、循環待ち。四つすべてがそろったときだけデッドロックが成立するので、一つを崩せば予防できる。
- 銀行家アルゴリズム
- 資源要求を受け入れても全プロセスが完了できる安全な状態が保てるかを毎回判定し、危険なら要求を待たせるデッドロック回避の手法。最大要求量を事前に申告させる必要がある。
例題 例題:時刻0に3件の処理A(6 ms)、B(2 ms)、C(4 ms)が同時に到着した。到着順(A・B・Cの順)と処理時間順(SJF)で、平均ターンアラウンドタイムはそれぞれいくらか。
到着順では完了時刻が6・8・12 msなので、平均は 26/3 で約8.7 ms。SJFではB・C・Aの順に走って完了時刻が2・6・12 msとなり、平均は 20/3 で約6.7 ms。処理の総量は同じでも、短いものを先に通すほど平均の待ちが減るのがSJFの効き目です。
例題 例題:3個のプロセスが同種の資源をそれぞれ最大3個まで要求する。デッドロックが絶対に起きないためには資源が何個あればよいか。
各プロセスに「あと1個で完了」という状態まで配ると 3×(3-1)=6 個を使い切る。ここに1個でも余分があれば、どれか1個が完了して資源を返し、連鎖的に全員が完了できる。よって 3×(3-1)+1=7 個。一般に n×(k-1)+1 個です。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類2:コンピュータシステム 中分類5:ソフトウェア
仮想記憶とファイルシステム
ページングでメモリをどう見せかけているか、どのページを追い出すか、ファイルとミドルウェアの役割までを押さえます。
主記憶は有限なので、OSは実際の容量より広いアドレス空間をプログラムに見せます。これが仮想記憶です。仮想アドレス空間を固定長のページに、実記憶を同じ大きさのページフレームに区切り、どの仮想ページがどのページフレームにあるかをページテーブルで対応付けます。必要になった時点でページを読み込むデマンドページングが一般的で、参照したページが実記憶に無ければページフォールトという割込みが起き、OSが補助記憶から読み込みます。
アドレス変換の考え方は単純です。仮想アドレスの下位はページ内オフセット、上位はページ番号です。ページの大きさが 2ⁿ バイトなら下位nビットがオフセットで、残りがページ番号になります。たとえば仮想アドレスが32ビットでページが4Kバイト(2¹² バイト)なら、オフセットは12ビット、ページ番号は20ビットで、1プロセスあたり 2²⁰ 個のページが並ぶことになります。ページテーブルを毎回主記憶から読むと遅いので、直近の変換結果だけを覚えておく専用の連想記憶TLBを置き、ここに当たれば1回のメモリアクセスで済ませます。
実記憶がいっぱいのときは、どのページを追い出すかを決めなければなりません。FIFOは読み込んだ順に追い出す方式で実装は軽い反面、よく使うページも順番が来れば追い出します。LRUは最後に参照されてから最も時間がたったものを追い出す方式で、参照の局所性に合うので命中率が高くなりますが、参照時刻の記録にコストがかかります。LFUは参照回数が最も少ないものを追い出します。実装の折衷案として、参照ビットを一周ずつ見て回るクロック方式がよく使われます。FIFOには、ページフレームを増やしたのにページフォールトが増える場合があるという不思議な現象があり、これをベラディの異状といいます。LRUでは起こりません。
多重度を上げすぎると、どのプロセスも自分のページをそろえられず、ページの追い出しと読み込みだけでCPU時間が消えていきます。この状態がスラッシングです。あるプロセスが直近に参照したページの集合をワーキングセットといい、これが実記憶に載るだけのページフレームを確保できるように多重度を下げるのが対策になります。ページを大きくするとページテーブルは小さくなり1回の入出力で運べる量も増えますが、使わない部分まで読み込むぶん無駄が増え、ページ内の断片化も大きくなります。逆に小さくすると無駄は減りますが、ページテーブルが膨らみページフォールトの回数が増えます。
ファイルシステムは、補助記憶上のブロックの集まりを、名前でたどれるファイルとディレクトリに見せる仕組みです。UNIX系ではファイルの実体情報を i ノードに持たせ、所有者・権限・更新時刻と、データブロックの位置を記録します。ディレクトリは名前と i ノード番号の対応表にすぎないので、同じ実体に複数の名前を付けるハードリンクが作れます。書込みの途中で電源が落ちても構造が壊れないように、変更内容をあらかじめログに書いてから反映するのがジャーナリングファイルシステムです。ファイルの追加と削除を繰り返すと空き領域が細切れになるので、断片化の解消や、世代管理を伴うバックアップの設計も運用上の論点になります。
OSと応用プログラムの間に入り、多くの業務で共通して必要になる機能を引き受けるソフトウェアがミドルウェアです。データベース管理システム、トランザクションの実行と資源の割当てを管理するTPモニタ、画面と業務ロジックを動かすWebアプリケーションサーバ、非同期のメッセージ交換を仲介するメッセージキュー、運用管理ツールなどが該当します。近年は、OSのカーネルを共有したまま実行環境を分離するコンテナが標準的な配置単位になり、仮想マシンよりも起動が速く密度を上げやすい一方、カーネルを共有するぶん分離の強さでは仮想マシンに劣る、という選択の判断が加わりました。
| 観点 | ページを大きくすると | ページを小さくすると |
|---|---|---|
| ページテーブルの大きさ | エントリ数が減って小さくなる | エントリ数が増えて大きくなる |
| 1回の入出力の効率 | まとめて運べるので良くなる | 細かい入出力が増えて悪くなる |
| ページ内の無駄(内部断片化) | 使わない部分まで載るので増える | 減る |
| ページフォールトの回数 | 先読み効果で減りやすい | 増えやすい |
| 実記憶に載るプログラムの数 | 1本あたりが重くなり減りやすい | 増やしやすい |
- デマンドページング
- プログラム全体を先に読み込まず、参照されたページだけをその都度読み込む方式。参照されないページは読み込まれないので、実記憶を節約できる。
- ページフォールト
- 参照した仮想ページが実記憶に無いときに発生する割込み。OSが補助記憶からページを読み込み、必要なら別のページを追い出す。処理時間はミリ秒単位で非常に重い。
- TLB
- アドレス変換の直近の結果を保持する専用の連想記憶。ここに当たればページテーブルを読みに行かずに済むので、仮想記憶のアクセス時間を実用的な水準に保てる。
- ページテーブル
- 仮想ページ番号と実記憶のページフレーム番号の対応表。有効ビットや参照ビット、変更ビットも持つ。ページ数が多いと多段構成にして節約する。
- LRU
- 最後に参照されてから最も時間がたったページを追い出す置換方式。参照の局所性に合うので命中率は高いが、参照時刻の記録にコストがかかる。
- ベラディの異状
- ページフレームを増やしたのにページフォールトが増えてしまう現象。FIFOで起こり得るが、LRUのようなスタックアルゴリズムでは起こらない。
- スラッシング
- 多重度を上げすぎてページの追い出しと読み込みばかりが起こり、実際の処理が進まなくなる状態。多重度を下げるのが基本的な対策。
- ワーキングセット
- あるプロセスが直近の一定期間に参照したページの集合。これが実記憶に載るだけのページフレームを確保できればスラッシングを避けられる。
- iノード
- UNIX系ファイルシステムでファイルの実体情報を持つ管理領域。所有者、権限、更新時刻、データブロックの位置を記録する。ファイル名は含まない。
- ジャーナリング
- ファイルシステムへの変更内容を先にログへ記録してから本体に反映する方式。障害後はログを見るだけで整合性を回復でき、全体検査が不要になる。
- ミドルウェア
- OSと応用プログラムの間で共通機能を担うソフトウェア。DBMS、TPモニタ、Webアプリケーションサーバ、メッセージキューなどが該当する。
- コンテナ
- OSのカーネルを共有したまま、ファイルシステムやプロセス空間を分離して実行環境を作る方式。仮想マシンより軽く起動が速いが、分離の強さは仮想マシンに劣る。
例題 例題:ページ参照列が 1, 2, 3, 4, 2, 1, 5, 2, 1, 3 のとき、ページフレーム3個でFIFOとLRUのページフォールトはそれぞれ何回か。
FIFOは8回、LRUは7回。FIFOは4を読み込む時点で最古の1を追い出すため、直後に再び参照される1でまたフォールトします。LRUは直近に使われたものを残すので、この列では1回ぶん得をします。最初の3回は空のフレームを埋めるフォールトなので、どちらの方式でも必ず数えます。
例題 例題:仮想アドレスが24ビット、ページの大きさが2Kバイトのとき、ページ番号は何ビットか。
2Kバイトは 2¹¹ バイトなので、オフセットは11ビット。残りの 24-11=13 ビットがページ番号で、1プロセスあたり 2¹³ 個のページを持てます。ページの大きさを4Kバイトにすればオフセットは12ビット、ページ番号は12ビットになります。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類2:コンピュータシステム 中分類5:ソフトウェア
データベース設計と関係代数
E-R図から表を起こし、正規化でどこまで分解し、どこで止めるかを判断できるようになります。
データベース設計は、現実の業務を写し取る概念設計、それを関係モデルの表に落とす論理設計、性能と容量を詰める物理設計の順に進みます。概念設計の道具がE-R図で、管理したいものを実体、実体どうしのつながりを関連として描き、関連には1対1・1対多・多対多という多重度を付けます。存在するために親の実体が必要なもの(受注に対する受注明細など)は弱実体と呼ばれ、親の主キーを含む複合キーで識別します。関係データベースの表には多対多をそのまま書けないので、両側の主キーの組を持つ連関エンティティを間に置き、1対多を二つに分けて実装します。
論理設計の中心が正規化です。手掛かりになるのが関数従属で、Xの値が決まればYの値が一つに定まる関係を X→Y と書き、Xを決定項といいます。1行の中に繰返しがある非正規形から、どのます目にも値が一つだけ入る第1正規形へ。複合主キーの一部だけで決まる項目、つまり部分関数従属を別表へ出して第2正規形へ。主キー以外の項目を経由して決まる推移的関数従属を別表へ出して第3正規形へ、と段階的に分解します。第3正規形まで進めると、同じ事実が1か所にしか書かれない状態に近づき、更新のたびに矛盾が生じる更新時異状を防げます。
第3正規形でも残る不都合を取り除いたものがボイスコッド正規形(BCNF)です。BCNFは「すべての関数従属について、決定項が候補キーである」状態を指します。候補キーが複数あり、それらが項目を共有しているときに第3正規形との差が出ます。たとえば(会員, プラン, 担当者)という表で、1人の担当者は1つのプランだけを受け持ち、会員とプランの組で担当者が決まるなら、候補キーは{会員, プラン}と{会員, 担当者}の二つです。担当者→プランという従属の決定項である担当者は候補キー全体ではないのでBCNFを満たしません。ここを分解すると更新時異状は消えますが、教員が担当する科目を1件も持たない状態を表現できるようになるなど、元の制約が失われることもあり、常に分解が正解とは限りません。
正規化は目的ではなく手段です。分解すると表の数が増え、参照のたびに結合が必要になるので、読み取りが圧倒的に多い集計画面や、履歴として当時の値を凍結して残したい伝票明細では、あえて重複を持たせる非正規化を選ぶことがあります。受注明細に商品名と単価を写して持たせる、月次の合計金額を集計列として持たせる、といった判断です。ただし非正規化は更新時異状のリスクを引き受ける決断なので、更新経路を1本に絞る、集計はトリガやバッチで必ず作り直す、といった歯止めとセットにします。「まず第3正規形まで作り、実測して遅い部分だけ戻す」が実務の定石です。
整合性はキーと制約で守ります。行を一意に識別でき、どの項目を欠いても識別できなくなる項目の組が候補キーで、その一つを主キーに選びます。主キーには重複も空値も入れられません(実体整合性制約)。他の表の主キーを指す項目が外部キーで、その値は参照先に実在するかNULLでなければなりません(参照整合性制約)。親の行を消そうとしたときの動きは、拒否するRESTRICT、子も一緒に消すCASCADE、子の外部キーをNULLにするSET NULLから選びます。何を選ぶかは業務の意味で決めるもので、伝票の親を消したら明細も消えてよいのか、そもそも消させないのかを設計時に決めておきます。
関係データベースの問合せの土台が関係代数です。行を絞る選択、列を取り出す射影、共通の列で行をつなぐ結合、すべての組合せを作る直積、集合演算の和・差・積、そして「Sのすべての値と対応があるものだけを取り出す」商があります。商は「すべての科目を履修した学生」のような全称の条件を表し、SQLでは二重のNOT EXISTSで書くのが定番です。関係代数は結果もまた関係になるので、演算を積み重ねられます。SQLの一文は、この演算の組合せを宣言的に書いたものだと考えると読みやすくなります。
部分関数従属を別表に出すと、講座名は1か所だけになる
/* 第2正規形どまりの受講表。主キーは (社員番号, 講座コード) */
CREATE TABLE 受講 (社員番号 TEXT, 講座コード TEXT,
講座名 TEXT NOT NULL, 講師名 TEXT NOT NULL,
受講日 TEXT NOT NULL,
PRIMARY KEY (社員番号, 講座コード));
/* 講座コード -> 講座名, 講師名 は主キーの一部だけで決まる(部分関数従属)*/
/* 第3正規形へ分解した形 */
CREATE TABLE 講座 (講座コード TEXT PRIMARY KEY,
講座名 TEXT NOT NULL, 講師名 TEXT NOT NULL);
CREATE TABLE 受講2 (社員番号 TEXT, 講座コード TEXT NOT NULL
REFERENCES 講座(講座コード),
受講日 TEXT NOT NULL,
PRIMARY KEY (社員番号, 講座コード));
INSERT INTO 講座 VALUES ('C1','SQL入門','青山'),
('C2','統計の基礎','蒼井');
INSERT INTO 受講2 VALUES ('E001','C1','2026-04-10'),
('E002','C1','2026-04-10'),
('E001','C2','2026-05-12');
/* 分解しても、結合すれば元の見え方に戻せる */
SELECT 受講2.社員番号, 講座.講座名, 講座.講師名, 受講2.受講日
FROM 受講2 JOIN 講座 ON 受講2.講座コード = 講座.講座コード;
| 演算 | 何をするか | SQLでの書き方 | 結果の行数の目安 |
|---|---|---|---|
| 選択 | 条件に合う行だけを残す | WHERE 句 | 元の行数以下 |
| 射影 | 指定した列だけを取り出す | SELECT の列指定(重複はDISTINCT) | 元の行数以下 |
| 直積 | 両方の関係の全組合せを作る | FROM に2表を並べる(結合条件なし) | m×n 行 |
| 結合 | 共通の列の値が一致する行をつなぐ | INNER JOIN ... ON | 0 から m×n 行の間 |
| 和・差・積 | 同じ列構成の関係どうしの集合演算 | UNION/EXCEPT/INTERSECT | 重複は取り除かれる |
| 商 | Sのすべての行と対応する値だけを残す | NOT EXISTS を二重に入れ子 | 元の値の種類数以下 |
- 弱実体
- 単独では識別できず、親の実体があって初めて存在できる実体。受注に対する受注明細など。親の主キーを含む複合キーで識別する。
- 連関エンティティ
- 多対多の関連を表に落とすために、双方の主キーの組を主キーとして持たせた中間の表。学生と講義の間に置く履修表が典型例。
- 関数従属
- Xの値が決まればYの値が一つに定まる関係。X→Yと書き、Xを決定項という。正規化はこの従属を手掛かりに表を分解する作業である。
- 部分関数従属
- 複合主キーの一部だけで決まってしまう関数従属。これを別表に出すと第2正規形になる。単一項目が主キーの表には存在しない。
- 推移的関数従属
- 主キー→A→Bのように、主キー以外の項目を経由して決まる関数従属。これを別表に出すと第3正規形になる。
- ボイスコッド正規形
- すべての関数従属の決定項が候補キーである状態。候補キーが複数あって項目を共有するときに第3正規形との差が出る。分解で関数従属が保存されないことがある。
- 更新時異状
- 同じ事実が複数箇所に重複して格納されているために、一部だけを更新すると矛盾が生じる状態。挿入・更新・削除のそれぞれで起こり得る。
- 非正規化
- 読み取り性能や履歴の凍結を目的に、あえて重複を持たせて表を戻す設計判断。更新時異状のリスクを引き受けるので、更新経路の限定などの歯止めが要る。
- 候補キー
- 行を一意に識別でき、かつどの項目を欠いても識別できなくなる項目の組。一つの表に複数存在し得る。その一つを主キーに選ぶ。
- 参照動作
- 参照されている親の行を削除・更新したときの子の扱い。拒否するRESTRICT、連鎖するCASCADE、NULLにするSET NULLなどを業務の意味で選ぶ。
- 関係代数の商
- 関係Rを関係Sで割り、Sのすべての行と対応を持つ値だけを取り出す演算。「すべての科目を履修した学生」のような全称条件を表す。
- 射影
- 関係から指定した列だけを取り出す演算。重複した行はまとめられる。行を絞る選択と対になる基本演算である。
例題 例題:受講(社員番号, 講座コード, 講座名, 講師名, 受講日)という表があり、主キーは(社員番号, 講座コード)である。講座名と講師名は講座コードで決まる。この表は第何正規形で、どこが問題か。
講座名と講師名は主キーの一部である講座コードだけで決まるので、部分関数従属があります。よって第1正規形どまりで、第2正規形を満たしていません。同じ講座を複数人が受ければ講座名と講師名が行の数だけ書き写され、講師が交代したときに1行だけ直すと表の中で食い違います。講座(講座コード, 講座名, 講師名)を切り出して受講側に講座コードだけを残せば、部分関数従属が消えて第2正規形になります。
例題 例題:4行の関係Rと3行の関係S(列構成は同じ)があり、共通の行が1行ある。直積・和・差(R-S)の行数はそれぞれいくつか。
直積は行どうしの全組合せなので 4×3 で12行。和は重複を1行にまとめるので 4+3-1 で6行。差はRにあってSにない行なので 4-1 で3行です。列構成が同じでないと和や差は取れず、直積だけが列構成の異なる関係でも作れます。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類9:データベース
SQLとインデックス
結合・副問合せ・集約・ウィンドウ関数の読み方と、索引を張るかどうかの判断ができるようになります。
SQLは「どう取るか」ではなく「何がほしいか」を書く言語ですが、結果を正しく読むには評価の順番を知っておく必要があります。FROMで対象の表を決め、WHEREで行を絞り、GROUP BYでまとめ、HAVINGでグループを絞り、SELECTで列を作り、ORDER BYで並べます。WHEREは1行ずつを見るので集約関数を書けず、HAVINGはまとまったグループを見るので集約関数を書けます。SELECTで付けた別名をWHEREで使えないのに、ORDER BYでは使えるのも、この順番から説明できます。
複数の表をつなぐのが結合です。内部結合は両方に相手がいる行だけを残します。左外部結合は左に書いた表の行をすべて残し、相手のいない行は右側の列がNULLになります。「社員が1人もいない部門も一覧に出したい」なら外部結合が必要で、ここで内部結合を使うとその部門が消えます。さらに、外部結合の結果に COUNT(*) を使うと相手がいない行も1と数えてしまうので、人数を数えるときは COUNT(社員番号) のように相手側の列を数えます。同じ表を役割違いで2度使う自己結合は、社員と上司のような同一表内の親子関係をたどるときに使います。
問合せの中に問合せを入れるのが副問合せです。外側と無関係に1度だけ評価される非相関副問合せと、外側の行ごとに評価し直される相関副問合せがあります。「自分の部門の平均給与より高い社員」は相関副問合せの典型です。ここで気を付けたいのがNULLです。IN や NOT IN の副問合せ結果にNULLが1件でも混じると、NOT IN は決して真になりません。NULLとの比較結果が真でも偽でもない不定になるからです。「社員が1人もいない部門」を NOT IN で書くと、部門コードがNULLの社員が1人いるだけで結果が0件になります。この用途では NOT EXISTS を使うのが安全です。
集約関数もNULLの扱いが要点です。COUNT(*) は行そのものを数えるのでどの列がNULLでも1と数えますが、COUNT(列名) はその列がNULLの行を数えません。SUM・AVG・MAX・MINもNULLを無視するので、AVGはNULLを0とみなした平均ではなく、NULLを除いた件数で割った平均になります。グループが一つも作られなければ COUNT は0を返しますが、SUMはNULLを返す点も実務では引っかかりやすいところです。
行をまとめずに、行ごとの値と集計を同時に出したいときに使うのがウィンドウ関数です。OVER 句で対象の範囲を指定し、PARTITION BY でグループを分け、ORDER BY で並べます。順位を付ける三つの関数は挙動が違います。同点があるとき、RANK は同順位のあとを飛ばし(1, 2, 2, 4)、DENSE_RANK は飛ばさず(1, 2, 2, 3)、ROW_NUMBER は同点でも必ず異なる番号を振ります(1, 2, 3, 4)。GROUP BY と違って行が消えないので、明細と順位を並べた一覧が1文で書けます。
ビューは問合せに名前を付けたもので、実体は持ちません。よく使う結合や絞り込みを隠して読みやすくする、列や行を限定して見せることでアクセス制御に使う、といった目的があります。集約や DISTINCT を含むビューは、どの元の行を直せばよいか決まらないので更新できません。索引(インデックス)は列の値から行の位置を引ける別の構造で、多くはB木の一種です。等価条件や範囲条件、ORDER BY の並べ替えを速くしますが、更新のたびに索引側も直すので、更新が多い列に索引を増やすと逆に遅くなります。また、条件に合う行が表全体の何割にもなるような選択率の高い条件では、索引をたどって1行ずつ取りに行くより表を頭から読むほうが速く、実行計画も全表走査を選びます。複合索引は先頭の列から順に使われるので、(部門コード, 入社年)の索引は部門コード単独の検索には効きますが、入社年だけの検索には効きません。
SELECT 部門コード, 氏名, 給与,
RANK() OVER (PARTITION BY 部門コード ORDER BY 給与 DESC) AS 部門内順位
FROM 社員
WHERE 部門コード IS NOT NULL
ORDER BY 部門コード, 部門内順位
/* GROUP BY と違い行はまとまらない。明細に順位を添えて返す */
| 条件の書き方 | 索引の効き | 理由 |
|---|---|---|
| 部門コード = 'D02' | 効く | 等価条件はB木を根から一直線にたどれる |
| 給与 BETWEEN 300000 AND 400000 | 効く | B木は葉が順序どおりに並ぶので範囲も追える |
| 氏名 LIKE '山%' | 効く | 前方一致は先頭から比較できる |
| 氏名 LIKE '%子' | 効かない | 後方一致は先頭が定まらず、木をたどれない |
| ある列に関数や演算を適用した条件 | 効かない | 格納された値そのものと比較していないため |
| 該当行が表の3割になる条件 | 効かない(全表走査が速い) | 1行ずつ取りに行くより順に読むほうが入出力が少ない |
- 評価順序
- FROM、WHERE、GROUP BY、HAVING、SELECT、ORDER BY の順に評価されるという考え方。WHEREに集約関数を書けない理由も、別名の使える場所もここから説明できる。
- 内部結合
- 結合条件に合う行が両方の表にある場合だけ結果に残す結合。相手のいない行は消えるので、一覧から漏らしたくないときは外部結合を選ぶ。
- 左外部結合
- 左に書いた表の行をすべて残し、相手のいない行では右側の列をNULLにする結合。件数を数えるときはNULLを数えないCOUNT(列名)を使う。
- 相関副問合せ
- 外側の問合せの行を参照し、行ごとに評価し直される副問合せ。「自分の部門の平均より高い」のような、行ごとに基準が変わる条件に使う。
- NOT IN とNULL
- 副問合せの結果にNULLが1件でも含まれると、NOT IN は決して真にならない。存在しないことを調べるときは NOT EXISTS を使うのが安全。
- HAVING
- GROUP BY でまとめたあとのグループを絞り込む句。集約関数の条件を書ける。行単位の条件はWHEREに書いたほうが、まとめる前に減らせるので速い。
- ウィンドウ関数
- 行をまとめずに、行ごとの値と集計や順位を同時に出す関数。OVER 句で範囲を、PARTITION BY でグループを、ORDER BY で並びを指定する。
- RANK と DENSE_RANK
- 同点があったときの順位の付け方が違う。RANKは同順位のあとの番号を飛ばし、DENSE_RANKは飛ばさない。ROW_NUMBERは同点でも別々の番号を振る。
- ビュー
- 問合せに名前を付けた仮想の表。実体は持たない。読みやすさとアクセス制御に使うが、集約やDISTINCTを含むものは更新できない。
- 索引
- 列の値から行の位置を引くための別構造。多くはB木の一種。検索と並べ替えを速くする代わりに、更新のたびに索引の保守コストがかかる。
- 選択率
- 条件に合う行が表全体に占める割合。これが高い(多くの行が該当する)ほど索引の効きは悪くなり、全表走査のほうが速くなる。
- 複合索引の左端
- 複数列の索引は先頭の列から順にしか使えないという性質。(A, B)の索引はAだけの検索には効くが、Bだけの検索には効かない。
例題 例題:平均給与が40万円以上の部門だけを出したい。WHERE 句に AVG(給与) の条件を書けないのはなぜか。
WHEREはグループ化より前、つまりまだ1行ずつしか見えていない段階で評価されるので、複数行をまとめた結果である AVG を判定できません。集約した値で絞るのはHAVINGの役目です。逆に「退職者を除く」のような行単位の条件はWHEREに書くほうが、まとめる前に対象が減るぶん速くなります。
例題 例題:(部門コード, 入社年)という順序の複合索引がある。入社年だけを条件にした検索でこの索引が効かないのはなぜか。
複合索引は、先頭の列でまず並べ、その中で次の列を並べた構造だからです。電話帳が姓で並んでいるときに名前だけで探せないのと同じで、先頭の部門コードが定まらないと木をたどる出発点が決まりません。入社年だけの検索も速くしたいなら、入社年を先頭にした別の索引を追加するかどうかを、更新コストと合わせて判断します。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類9:データベース
トランザクションと障害回復
ACIDとロック、分離レベル、ログによる回復、分散データベースとCAP定理までを一本の筋で押さえます。
業務上ひとまとまりで扱いたい一連の操作をトランザクションといい、DBMSはこれにACIDという4性質を保証します。原子性は「全部実行されるか、まったく実行されないかのどちらか」で、途中で落ちたら開始前の状態に戻します。一貫性は、実行の前後で整合性制約が守られていること。分離性は、同時に走っている他のトランザクションの途中経過が見えないこと。持続性は、コミットが返った以上、その後で障害が起きても結果が失われないことです。COMMITで確定、ROLLBACKで取消しになります。
分離性を実現する代表がロックです。読むときの共有ロックは同時に何人でも掛けられますが、書くときの専有ロックは1人だけで、共有ロックとも両立しません。ロックを掛けたり外したりを自由にすると直列化可能性が崩れるので、成長相ですべてのロックを取り、縮退相では解放だけを行う2相ロッキングを守ります。ロックの単位(粒度)を行にすると同時実行性は上がりますが管理する数が増え、表にすると管理は軽いが待ちが増えます。相反する順序で資源を取り合うとデータベースでもデッドロックが起き、DBMSは待ちグラフの循環を検出して片方をロールバックさせて解きます。ロックを使わず、更新前の版を読ませて読み手と書き手をぶつけない多版同時実行制御(MVCC)も広く使われています。
分離性を完全に保つと待ちが増えるので、実務では段階を選びます。分離レベルを下げると、まだコミットされていない値を読むダーティリード、同じ行を2度読んで値が違うノンリピータブルリード、同じ条件で2度読んで行数が違うファントムリードが順に許容されます。READ COMMITTEDはダーティリードだけを防ぎ、REPEATABLE READはノンリピータブルリードまで防ぎ、SERIALIZABLEは三つすべてを防ぎます。どこまで許すかは、その画面が正確さと応答性のどちらを重んじるかで決める設計判断です。
障害回復の土台はログです。更新の前後の値を記録した更新前ログと更新後ログを、データベース本体より先に書き出すのが先書きログ(WAL)の原則で、これが守られていれば、本体への書込みが間に合わなくてもログから復元できます。処理を止めずに一定間隔で主記憶上のバッファをまとめて書き出す点がチェックポイントで、回復のときはここから後だけを見れば済みます。
回復の手順は障害の種類で分かれます。停電などでメモリの内容が消えた障害(システム障害)では、チェックポイント以降のログを見て、コミット済みのトランザクションは更新後ログで再現するロールフォワード、未コミットのものは更新前ログで打ち消すロールバックを行います。チェックポイントより前に完了しているトランザクションは何もしなくて構いません。ディスクそのものが壊れた媒体障害では、バックアップを復元したうえで、その時点以降のログでロールフォワードします。プログラムの誤りなど、そのトランザクションだけの失敗(トランザクション障害)ではロールバックだけを行います。
データベースが複数の拠点に分かれると、全拠点で同時に確定させる仕組みが要ります。それが2相コミットで、調整者がまず全参加者に準備を問い合わせ、全員が可と答えたときだけコミットを指示します。1人でも不可ならすべて取り消します。準備の応答を返したあとに調整者が落ちると、参加者はコミットも取消しもできないまま待つブロッキングが起こり得るのが弱点です。CAP定理は、ネットワークが分断されている状況では、一貫性と可用性の両方は満たせないと述べます。分断は起きるものと考えるので、実際の選択は「分断中に古い値を返してでも応答するか、応答を止めてでも正しい値だけを返すか」になります。NoSQLの多くは前者を選び、時間がたてば全複製が同じ値に落ち着く結果整合性で運用します。
分析用途では作りが変わります。日々の業務系データベースは更新の速さを重んじますが、意思決定のために時系列で蓄えたデータウェアハウスは、更新せずに追加していき、大量の読み取りに向く形を採ります。ETLで各業務システムから抽出・変換・格納し、部門ごとに切り出したものがデータマート、加工前のまま貯めておくのがデータレイクです。分析の操作はOLAPと呼ばれ、集計軸を掘り下げるドリルダウン、まとめ上げるロールアップ、軸を入れ替えるダイシングなどがあります。中心の事実表を、商品や期間といった次元表が取り囲むスタースキーマは、結合を浅くして集計を速くするための、意図的な非正規化の例です。
ROLLBACK で戻る範囲と、COMMIT で確定する範囲
CREATE TABLE 在庫 (商品番号 TEXT PRIMARY KEY,
数量 INTEGER NOT NULL CHECK (数量 >= 0));
CREATE TABLE 出庫 (伝票番号 INTEGER PRIMARY KEY,
商品番号 TEXT NOT NULL, 数量 INTEGER NOT NULL);
INSERT INTO 在庫 VALUES ('P1', 2);
/* 引当と出庫記録は、まとめて成立させないと帳簿が合わない */
BEGIN;
UPDATE 在庫 SET 数量 = 数量 - 3 WHERE 商品番号 = 'P1';
/* CHECK (数量 >= 0) に反してエラー。ここで打ち切る */
ROLLBACK; /* 在庫は 2 のまま。出庫も記録されない */
BEGIN;
UPDATE 在庫 SET 数量 = 数量 - 2 WHERE 商品番号 = 'P1';
INSERT INTO 出庫 VALUES (1, 'P1', 2);
COMMIT; /* 在庫 0 と出庫1件が、同時に確定する */
| 分離レベル | ダーティリード | ノンリピータブルリード | ファントムリード | 同時実行性 |
|---|---|---|---|---|
| READ UNCOMMITTED | 許す | 許す | 許す | 最も高い |
| READ COMMITTED | 防げる | 許す | 許す | 高い |
| REPEATABLE READ | 防げる | 防げる | 許す | 中くらい |
| SERIALIZABLE | 防げる | 防げる | 防げる | 最も低い |
- ACID
- トランザクションが備えるべき4性質。原子性、一貫性、分離性、持続性。DBMSはロックとログでこれらを実現する。
- 2相ロッキング
- ロックを取るだけの成長相と、解放するだけの縮退相に分ける規約。これを守るとスケジュールの直列化可能性が保証される。デッドロックは別に対処が要る。
- ロックの粒度
- ロックを掛ける単位。行にすると同時実行性は高いが管理数が増え、表にすると管理は軽いが待ちが増える。同時実行性と管理コストのトレードオフ。
- ダーティリード
- 他のトランザクションがまだコミットしていない値を読んでしまうこと。READ UNCOMMITTED でだけ起こり、READ COMMITTED 以上では防がれる。
- ファントムリード
- 同じ条件で2度検索したときに、他のトランザクションの挿入によって行数が変わる現象。SERIALIZABLE でだけ防がれる。
- MVCC
- 多版同時実行制御。更新前の版を保持し、読み手には一貫した時点の版を見せることで、読み手と書き手が互いを待たないようにする方式。
- 先書きログ
- WAL。データベース本体に書く前にログを確実に書き出す原則。これがあれば本体への反映が遅れても、ログから状態を復元できる。
- チェックポイント
- 主記憶上のバッファをまとめて本体に書き出し、その時点を記録すること。回復時はここより後のログだけを見ればよくなり、復旧が短時間で済む。
- ロールフォワード
- 更新後ログを使って、コミット済みの更新を再現する回復操作。媒体障害ではバックアップ復元後に、システム障害ではチェックポイント以降に対して行う。
- 2相コミット
- 分散したデータベースを同時に確定させる手順。調整者が準備を問い合わせ、全員が可と答えたときだけコミットする。調整者障害でのブロッキングが弱点。
- CAP定理
- ネットワーク分断が起きている状況では、一貫性と可用性を同時には満たせないという主張。分断中に古い値を返すか、応答を止めるかの選択になる。
- スタースキーマ
- 中心の事実表を、商品や期間などの次元表が取り囲む分析用の構造。結合を浅くして集計を速くするための、意図的な非正規化である。
- OLAP
- 多次元に集計されたデータを対話的に分析する操作。掘り下げるドリルダウン、まとめ上げるロールアップ、軸を入れ替えるダイシングなどがある。
例題 例題:チェックポイントの後にシステム障害が起きた。チェックポイント前に開始してその後コミットしたトランザクションT1と、チェックポイント後に開始してコミットしていないT2は、それぞれどう扱うか。
T1はコミット済みなので、更新後ログを使ってロールフォワードし、更新を確実に反映させます。T2は未コミットなので、更新前ログを使ってロールバックし、開始前の状態に戻します。チェックポイントより前にコミットまで終わっていたものは、すでに本体へ書き出されているので何もしません。
例題 例題:コミットが返っているのに、なぜ回復のときにロールフォワードが要るのか。
先書きログの原則で保証されているのは「ログが確実に書かれていること」であって、データベース本体への反映まで終わっているとは限らないからです。本体への書込みは性能のためにバッファにためて後回しにされます。したがって、コミット済みでも本体に届いていない更新が残り得るので、更新後ログを使って再現します。逆にいえば、ログさえ残っていれば持続性は守られます。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類9:データベース
ネットワーク
ネットワークの階層とLAN
OSI参照モデルとTCP/IPの対応、スイッチの動きとVLANまで、LANの土台を一気に固めます。
ネットワークの決まりごとは、役割ごとに階層に分けて考えます。OSI基本参照モデルは下から物理・データリンク・ネットワーク・トランスポート・セション・プレゼンテーション・アプリケーションの7層です。実際に動いているTCP/IPは4階層で整理され、ネットワークインタフェース層がOSIの第1層と第2層、インターネット層が第3層、トランスポート層が第4層、アプリケーション層が第5層から第7層をまとめて受け持ちます。階層に分けておくと、下の層の実装が銅線から光や無線に変わっても上の層を作り直さずに済みます。
送信側では、上の層のデータに各層が自分のヘッダを付けて下へ渡します。これがカプセル化で、受信側では下から順にヘッダを外していきます。データのまとまりの呼び名も層ごとに違い、第2層ではフレーム、第3層ではパケット(IPデータグラム)、第4層ではセグメント(TCP)やデータグラム(UDP)といいます。トラブルを切り分けるときは、この階層をそのまま点検の順番として使います。ケーブルは通じているか、同じLAN内の相手にフレームは届くか、別のネットワークの相手までパケットは届くか、ポートは開いているか、という順です。
中継機器も、どの層まで見て転送するかで分類できます。リピータやリピータハブは電気信号をそのまま増幅して流すだけの第1層の機器で、つながった全ポートが一つの衝突ドメインになります。ブリッジやスイッチングハブは第2層の機器で、フレームの宛先MACアドレスを見てそのポートにだけ送るので、ポートごとに衝突ドメインが分かれます。ルータは第3層の機器で、宛先IPアドレスを見てネットワークをまたいで転送し、ブロードキャストはここで止まります。さらに上の層まで見て振り分けるものはレイヤ4スイッチやレイヤ7スイッチと呼ばれ、負荷分散装置がその代表です。
スイッチングハブは、受け取ったフレームの送信元MACアドレスと受信ポートの対応を表に記録していきます。これがMACアドレス学習です。宛先が表にあればそのポートだけへ、まだ無ければ受信ポート以外の全ポートへ送ります。この全ポートへの送出がフラッディングです。ブロードキャストフレームは常に全ポートへ流れるので、1台のスイッチにつながった範囲は一つのブロードキャストドメインになります。端末が増えるとブロードキャストの量が無視できなくなるので、分割の設計が必要になります。
ブロードキャストドメインを、物理的な配線と切り離して論理的に分けるのがVLANです。ポートごとに所属を決めるポートVLANと、フレームにVLAN識別子のタグを付けて1本のケーブルで複数のVLANを運ぶタグVLAN(IEEE 802.1Q)があり、後者を通す回線をトランクといいます。同じスイッチにつながっていてもVLANが違えば直接は通信できず、VLANをまたぐ通信にはルータかレイヤ3スイッチによるVLAN間ルーティングが要ります。部署単位や用途単位で分ければ、ブロードキャストを抑えられるうえ、通信をVLANの境界で制御できるので、性能と安全の両面で効きます。
LANの冗長化にも決まりごとがあります。スイッチをループ状につなぐとブロードキャストが永久に回り続けるブロードキャストストームが起きるため、スパニングツリープロトコルが一部のポートを論理的に閉じてループを断ち、障害時にそこを開いて経路を切り替えます。一方、複数の物理リンクを束ねて1本の論理リンクとして扱うのがリンクアグリゲーションで、こちらは帯域を足し合わせつつ、1本切れても残りで通信を続けられます。ループを避けたいのか帯域を増やしたいのかで、使う技術が変わります。
| 機器 | 見ている情報 | 衝突ドメイン | ブロードキャストドメイン |
|---|---|---|---|
| リピータハブ | 電気信号だけ(第1層) | 全ポートで一つ | 分割しない |
| スイッチングハブ | 宛先MACアドレス(第2層) | ポートごとに分割 | 分割しない |
| ルータ | 宛先IPアドレス(第3層) | ポートごとに分割 | 分割する |
| レイヤ3スイッチ | 宛先IPアドレス(第3層) | ポートごとに分割 | VLAN単位で分割する |
| レイヤ4以上のスイッチ | ポート番号やURL(第4層以上) | ポートごとに分割 | 分割する |
- OSI基本参照モデル
- 通信の役割を物理・データリンク・ネットワーク・トランスポート・セション・プレゼンテーション・アプリケーションの7層に分けたモデル。機器や障害の切分けの共通語として使う。
- カプセル化
- 上位層のデータに各層が自分のヘッダを付けて下位層へ渡すこと。受信側は下位から順にヘッダを外す。層ごとの独立性を保つ仕組みである。
- 衝突ドメイン
- 信号の衝突が起こり得る範囲。リピータハブでは全ポートが一つの衝突ドメインになるが、スイッチングハブではポートごとに分かれる。
- ブロードキャストドメイン
- ブロードキャストフレームが届く範囲。スイッチでは分かれず、ルータかVLANの境界で分かれる。端末が増えるとここを分割する設計が要る。
- MACアドレス学習
- スイッチが、受け取ったフレームの送信元MACアドレスと受信ポートの対応を表に記録していく動作。表に無い宛先へはフラッディングする。
- フラッディング
- 宛先MACアドレスが学習表に無いフレームを、受信したポート以外の全ポートへ送り出すこと。相手が応答すればその時点で学習される。
- タグVLAN
- IEEE 802.1Q。フレームにVLAN識別子のタグを付けて、1本のケーブルで複数のVLANの通信を運ぶ方式。これを通す回線をトランクという。
- VLAN間ルーティング
- VLANが違う端末どうしを通信させるための第3層の中継。ルータかレイヤ3スイッチが担う。VLANを分けただけでは相互に通信できない。
- スパニングツリー
- スイッチをループ状に接続したときに、一部のポートを論理的に閉じてループを断つプロトコル。障害時には閉じていたポートを開いて経路を切り替える。
- リンクアグリゲーション
- 複数の物理リンクを束ねて1本の論理リンクとして扱う技術。帯域を足し合わせられ、1本が切れても残りで通信を継続できる。
- CSMA/CD
- 半二重のイーサネットで用いられた制御方式。送信前に回線を聞き、衝突を検知したら乱数時間だけ待って再送する。全二重のスイッチ接続では衝突自体が起きない。
- MTU
- 1フレームで運べるデータ部の最大長。イーサネットでは通常1500バイト。これを超えるパケットは分割されるか、送信元に通知して小さくしてもらう。
例題 例題:8ポートのスイッチングハブ1台に8台のPCをつなぎ、VLANを2つ作って4台ずつ割り当てた。衝突ドメインとブロードキャストドメインはそれぞれいくつになるか。
スイッチはポートごとに衝突ドメインを分けるので、衝突ドメインは8個。ブロードキャストドメインはVLANの数だけできるので2個です。同じスイッチにつながっていても、VLANが違えばVLAN間ルーティングなしには通信できません。これがリピータハブ1台なら、衝突ドメインもブロードキャストドメインも1個になります。
例題 例題:1 Gbpsのリピータハブに10台のPCをつないだ場合と、1 Gbpsのスイッチングハブに10台をつないだ場合とでは、何がどう違うか。
リピータハブは全ポートが一つの衝突ドメインなので、10台で1 Gbpsを取り合い、同時に送れるのは実質1台だけです。スイッチングハブはポートごとに衝突ドメインが分かれ、全二重で同時に送受信できるので、宛先が重ならなければ各ポートが1 Gbpsを使えます。ブロードキャストが全体に届く点だけは、どちらも同じです。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類10:ネットワーク
IPアドレスとルーティング
サブネットを手で計算できるようにし、経路がどう選ばれるか、NATが何を変えているかを理解します。
IPv4アドレスは32ビットで、8ビットずつ区切って10進数で書きます。前半がネットワーク部、後半がホスト部で、その境目をサブネットマスク、あるいはビット数を添えたCIDR表記で示します。203.0.113.64/27 なら上位27ビットがネットワーク部、残る5ビットがホスト部です。ホスト部が全部0のアドレスはネットワークアドレス、全部1のアドレスはブロードキャストアドレスとして予約されるので、端末に割り当てられるのは 2⁵ から2を引いた30個になります。設計では「必要な台数に足りる中で最も小さいブロック」を選ぶので、12台なら /28 を、200台なら /24 を選びます。
あるホストアドレスがどのネットワークに属するかは、アドレスとマスクのビットごとの論理積で求めます。10.30.77.5/18 なら、マスクは 255.255.192.0 で第3オクテットの上位4ビットまでがネットワーク部です。77 は2進で 01001101 なので上位2ビットは 01、下位を0で埋めると 64 になり、ネットワークアドレスは 10.30.64.0、ブロードキャストは 10.30.127.255、割当て可能な最後のホストは 10.30.127.254 です。オクテットの区切りとマスクの区切りがそろっていないときは、そのオクテットだけを2進で考えるのが確実です。
逆に、連続する複数のネットワークを1本の経路にまとめるのが経路集約です。10.5.20.0/24 から 10.5.23.0/24 までの4個は、第3オクテットが 20, 21, 22, 23 で上位6ビットが共通なので、10.5.20.0/22 の1本にまとめられます。ここで /21 にすると 10.5.16.0 から 10.5.23.255 まで、つまり実在しない4個ぶんまで広告してしまい、/23 にすると 20 と 21 しか含まず残りの経路が失われます。集約は経路表を小さくして安定させますが、広すぎる集約は存在しない宛先を引き受ける事故につながります。
経路の決め方には、管理者が書く静的ルーティングと、ルータどうしで情報を交換する動的ルーティングがあります。動的の方式は大きく二つで、距離ベクトル型は隣のルータから受け取った「宛先までの距離」を足して伝えていく方式で、RIPがその代表です。設定は簡単ですが、経由するルータ数(ホップ数)だけを見るので回線速度を考慮できず、規模も15ホップまでという制限があります。リンク状態型は各ルータが自分のつながり具合を全体に広め、全員が同じ地図を持ってから最短経路を計算する方式で、OSPFがその代表です。帯域を反映したコストで選べ、収束も速いので、組織内のネットワークでは主流です。組織どうしをつなぐインターネットの経路交換はBGPが担い、こちらは技術的な最短ではなく契約や方針に基づいて経路を選びます。
経路表に複数の候補が当てはまるときは、プレフィックス長が最も長い、つまり最も細かく宛先を指定している経路が選ばれます。これがロンゲストマッチです。0.0.0.0/0 のデフォルトルートが最後の受け皿になるのも、プレフィックス長が0で最も短いからです。同じプレフィックス長の候補が複数あるときは、経路を教えてくれたプロトコルの信頼度や、そのプロトコル内のメトリックで決まります。
組織内ではプライベートIPアドレス(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)を使い、インターネットへ出るときにグローバルアドレスへ書き換えます。これがNATで、アドレスを1対1で置き換えます。ポート番号まで併せて書き換え、多数の端末で1個のグローバルアドレスを共用できるようにしたのがNAPT(IPマスカレード)です。内側から始まった通信は変換表に記録されるので戻りも通せますが、外側から内側へ突然来る通信はどの端末宛てか決められないため、そのままでは通せません。公開サーバを内側に置くなら、静的な変換をあらかじめ定義しておく必要があります。
| プレフィックス | サブネットマスク | アドレス総数 | 割当て可能ホスト数 | 使いどころの目安 |
|---|---|---|---|---|
| /30 | 255.255.255.252 | 4 | 2 | ルータどうしを結ぶ2点間の回線 |
| /28 | 255.255.255.240 | 16 | 14 | サーバを数台だけ置く区画 |
| /26 | 255.255.255.192 | 64 | 62 | 50台程度の部署LAN |
| /24 | 255.255.255.0 | 256 | 254 | 標準的な1フロア |
| /22 | 255.255.252.0 | 1024 | 1022 | 1000台規模の拠点 |
| /20 | 255.255.240.0 | 4096 | 4094 | 大規模拠点や集約用のブロック |
- CIDR表記
- アドレスの後ろにネットワーク部のビット数を書く表記。192.168.10.0/26 なら上位26ビットがネットワーク部。クラスにとらわれず境目を自由に決められる。
- ネットワークアドレス
- ホスト部のビットがすべて0のアドレス。そのネットワーク自体を指すので端末には割り当てられない。ホスト部がすべて1のブロードキャストアドレスも同様。
- 割当て可能ホスト数
- ホスト部のビット数をmとしたとき、2のm乗から2を引いた数。ネットワークアドレスとブロードキャストアドレスの2個が引かれる。
- 経路集約
- 連続する複数のネットワークを、共通する上位ビットだけを残した1本の経路にまとめること。経路表を小さくできるが、広すぎると実在しない宛先まで引き受ける。
- 距離ベクトル型
- 隣のルータから受け取った宛先までの距離を足して伝える方式。RIPが代表で、設定は簡単だがホップ数しか見ず、規模と収束速度に限界がある。
- リンク状態型
- 各ルータが自分の接続状況を全体に広め、全員が同じ地図から最短経路を計算する方式。OSPFが代表で、帯域を反映したコストで選べ収束も速い。
- BGP
- 自律システム(組織)どうしの経路情報を交換するプロトコル。技術的な最短ではなく、契約や運用方針に基づいて経路を選ぶ点が組織内のプロトコルと異なる。
- ロンゲストマッチ
- 経路表に複数の候補が当てはまるとき、プレフィックス長が最も長い経路を選ぶ規則。デフォルトルートが最後の受け皿になるのはこの規則の帰結である。
- NAT
- プライベートIPアドレスとグローバルIPアドレスを1対1で置き換える仕組み。同時に外へ出られる台数は、用意したグローバルアドレスの数までになる。
- NAPT
- アドレスに加えてポート番号も書き換え、多数の端末で1個のグローバルアドレスを共用する仕組み。IPマスカレードとも呼ぶ。外から始まる通信は原則通せない。
- ARP
- 同じLAN内で、宛先IPアドレスに対応するMACアドレスを問い合わせるプロトコル。ブロードキャストで尋ね、該当する端末が自分のMACアドレスを返す。
- ICMP
- 到達不能や時間超過などの通知と、疎通確認に使われるプロトコル。ping はエコー要求と応答、traceroute は生存時間を1ずつ増やして経路を調べる。
例題 例題:192.168.200.130/26 が属するネットワークアドレスとブロードキャストアドレスはいくつか。
/26 なので第4オクテットの上位2ビットまでがネットワーク部で、区切りは 0, 64, 128, 192 の64ごとです。130 は128以上192未満なので、ネットワークアドレスは 192.168.200.128、ブロードキャストは 192.168.200.191、割当て可能なホストは 192.168.200.129 から 192.168.200.190 までの62個になります。
例題 例題:172.16.0.0/20 から 172.16.48.0/20 までの連続する4個のネットワークを1本に集約すると、どうなるか。
第3オクテットは 0, 16, 32, 48 で、2進では 00000000, 00010000, 00100000, 00110000。共通しているのは上位2ビットまでなので、ネットワーク部は 16+2 で18ビット、集約結果は 172.16.0.0/18 です。/20 のままでは4本、/16 まで広げると存在しない範囲まで引き受けてしまいます。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類10:ネットワーク
TCPとUDP、主要プロトコル
TCPが何を保証してUDPが何を捨てているか、DNSやHTTP、メールが実際にどう動くかをつかみます。
IPは宛先まで届けようと努力するだけで、届いたことも順番も保証しません。その上に載って信頼性を作るのがTCPです。通信を始めるときは、SYN、SYNとACK、ACKという3ウェイハンドシェイクで互いの初期シーケンス番号を確認し合います。以後、送ったデータにはシーケンス番号が付き、受け取った側が確認応答(ACK)を返します。一定時間ACKが来なければ再送し、受け取った側は番号を見て順番を並べ直し、重複は捨てます。終了は、双方が独立にFINとACKを交わす4回のやり取りになります。UDPはこうした仕掛けを持たず、ヘッダも8バイトと小さく、届いたかどうかは上位の判断に任せます。音声や映像、DNSの問合せのように、遅れて届いた古いデータに価値がない通信や、1往復で終わる小さな通信に向きます。
TCPは流量も調整します。受信側は自分の受信バッファの空きをウィンドウサイズとして毎回知らせ、送信側はその範囲内であればACKを待たずにまとめて送れます。これがウィンドウ制御で、1個送るたびに応答を待つ方式に比べて、往復遅延の大きい回線でも速度を出せます。実際に出せる速度の上限は、おおよそウィンドウサイズを往復遅延時間で割った値です。加えて、ネットワークの混雑を避けるために、送り始めは小さく、うまくいくたびに増やし、損失を検知したら一気に絞るという輻輳制御を行います。受信側の都合に合わせるフロー制御と、途中の混雑に合わせる輻輳制御は別物です。
通信の相手を決めるのは、IPアドレスとポート番号の組です。よく使うサービスには0番から1023番のウェルノウンポートが割り当てられていて、HTTPは80、HTTPSは443、SMTPは25、DNSは53、SSHは22などが決まっています。クライアント側は空いている番号を一時的に使うので、同じサーバの同じポートに多数の接続があっても、送信元のアドレスとポートの組合せで区別できます。
名前とアドレスを対応付けるのがDNSです。問合せは、まずキャッシュDNSサーバに向かい、そこに無ければルートから順に、権威をもつサーバへたどっていきます。ホスト名からIPアドレスを引くのが正引き(Aレコード、IPv6ならAAAAレコード)、逆が逆引き(PTRレコード)で、メールの宛先サーバを示すMXレコード、別名を示すCNAMEレコードなどがあります。応答にはキャッシュの有効期間が付いているので、サーバを移す作業の前にはこの値を短くしておく、という運用が定石です。端末にIPアドレスやデフォルトゲートウェイ、DNSサーバの場所を自動で配るのはDHCPで、探索・提示・要求・確認の4段階で決まります。DHCPの探索はブロードキャストなのでルータを越えません。別のセグメントのサーバから配るときは、ルータにリレーエージェントを設定します。
Webの通信はHTTPで、要求にはGETやPOSTなどのメソッド、応答には200番台の成功、300番台の転送、400番台の要求側の誤り、500番台のサーバ側の誤りといった状態コードが付きます。HTTP自体は前の要求を覚えていないので、状態はCookieやセッション識別子で保ちます。TLSで暗号化したものがHTTPSで、盗聴を防ぐだけでなく、サーバ証明書によって接続先が本物かを確かめ、改ざんも検知します。メールは、送るときと受け取るときでプロトコルが分かれます。送信と、サーバ間の転送はSMTP。受信は、メールを手元へ取り出すPOP3と、サーバ上に置いたまま操作するIMAP4があり、複数の端末で同じ状態を見たいならIMAP4を選びます。日本語や添付ファイルはMIMEの形式で表現します。差出人の詐称対策としては、送信元サーバを宣言するSPF、電子署名を付けるDKIM、その結果をどう扱うかを宣言するDMARCが、いずれもDNSのレコードを使って組み合わされます。
運用に欠かせない裏方も押さえておきます。NTPは機器の時刻を合わせるプロトコルで、時刻がずれるとログの突合せも証明書の検証も成り立ちません。SNMPは機器の状態を集めるプロトコルで、管理側から問い合わせる方式と、機器側から異常を通知するトラップの二通りがあります。プロキシサーバはクライアントの代理としてWeb通信を中継し、キャッシュによる高速化、アクセス先の記録と制限を行います。逆に、外から来た要求をサーバの代理として受けるのがリバースプロキシで、暗号化処理の肩代わりや負荷分散に使われます。
クライアント サーバ | --- SYN ---------> | /* 接続要求。初期シーケンス番号を伝える */ | <-- SYN, ACK ------ | /* 受諾。サーバ側の初期番号も伝える */ | --- ACK ----------> | /* 確認。ここで接続が確立する */ | === データ転送 ===> | | --- FIN ----------> | /* 一方向の切断要求 */ | <-- ACK ----------- | | <-- FIN ----------- | /* 逆方向も切断 */ | --- ACK ----------> |
| 観点 | TCP | UDP |
|---|---|---|
| 接続 | 3ウェイハンドシェイクで確立してから送る | 確立せずいきなり送る |
| 到達の保証 | 確認応答と再送で保証する | 保証しない |
| 順序 | シーケンス番号で並べ直す | 並べ直さない |
| ヘッダの大きさ | 20バイト以上 | 8バイト |
| 向いている通信 | ファイル転送、Web、メール | 音声、映像、DNS問合せ、同報 |
| 選ぶ理由 | 欠けや入替りが許されないから | 遅れて届いた古いデータに価値がないから |
- 3ウェイハンドシェイク
- TCPの接続確立手順。SYN、SYNとACK、ACKの3回のやり取りで、双方の初期シーケンス番号を確認し合う。切断はFINとACKを双方向に交わす4回になる。
- ウィンドウ制御
- 受信側が知らせた空き容量の範囲で、確認応答を待たずにまとめて送る仕組み。実効速度の上限は、おおよそウィンドウサイズを往復遅延時間で割った値になる。
- フロー制御と輻輳制御
- 前者は受信側の処理が追いつかなくなるのを防ぐ調整、後者はネットワーク途中の混雑を避ける調整。混同しやすいが原因も対象も異なる。
- UDP
- 確認応答も順序制御も持たないトランスポート層プロトコル。ヘッダが小さく遅延が少ないので、音声や映像、DNSのような小さく速い通信に向く。
- ウェルノウンポート
- 0番から1023番までの、代表的なサービスに割り当てられたポート番号。HTTPは80、HTTPSは443、SMTPは25、DNSは53、SSHは22。
- 権威DNSサーバ
- あるドメインの情報を正式に持ち、問合せに答える責任をもつサーバ。キャッシュDNSサーバは、その答えを一定期間ためて代わりに返す。
- MXレコード
- そのドメイン宛てのメールを受け取るサーバを示すDNSのレコード。優先度を付けて複数書ける。Aレコードは名前からIPv4アドレスを引くためのもの。
- DHCP
- IPアドレスやデフォルトゲートウェイ、DNSサーバの場所を端末へ自動で配る仕組み。探索はブロードキャストなので、別セグメントから配るにはリレーエージェントが要る。
- HTTPの状態コード
- 200番台は成功、300番台は転送、400番台は要求側の誤り、500番台はサーバ側の誤りを表す。404は宛先が無い、503はサーバが一時的に扱えない。
- IMAP4
- メールをサーバ上に置いたまま参照・操作する受信プロトコル。複数の端末で同じ状態を見たい場合に選ぶ。手元へ取り出すのはPOP3。
- SPFとDKIM
- 差出人の詐称に対する送信ドメイン認証。SPFは送信を許可したサーバをDNSに宣言し、DKIMは電子署名を付ける。両者の結果の扱いを宣言するのがDMARC。
- リバースプロキシ
- サーバの代理として外部からの要求を受ける中継。暗号化処理の肩代わり、負荷分散、内部構成の隠蔽に使う。クライアント側の代理は単にプロキシと呼ぶ。
例題 例題:伝送速度 200 Mbps、往復遅延時間 30 ms の経路で帯域を使い切るには、ウィンドウサイズをいくつ以上にする必要があるか。
その経路が同時に運べる量、つまり帯域遅延積まで広げる必要があります。200×10⁶ に 0.03 を掛けると 6×10⁶ ビット、8で割って 750000 バイト、すなわち 750 kバイトです。これより小さいと、送ったぶんの確認応答が返るまで手が空いてしまい、回線がいくら速くても待ち時間が支配的になります。
例題 例題:Webサーバへの接続が「名前は引けるのに応答が返らない」とき、どこから疑うか。
名前が引けている以上、DNSと、DNSサーバまでの経路は生きています。次に ping で相手までIPパケットが届くかを見て(第3層)、届くならポート443が開いているかを確かめます(第4層)。ここまで通って応答が無ければ、サーバ上のWebサービスや証明書の問題(第7層)と絞り込めます。階層を下から順に潰すのが定石です。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類10:ネットワーク
無線LAN・QoSとネットワーク設計
無線とQoSの仕組みを押さえたうえで、転送時間や帯域を自分で見積もれるようになります。
無線LANはIEEE 802.11として規格化され、使う周波数帯と変調方式の違いで世代が分かれます。2.4 GHz帯は障害物に強く遠くまで届きますが、電子レンジやBluetoothと干渉しやすく、干渉しないチャネルは限られます。5 GHz帯はチャネル数が多く速度も出ますが、届く距離は短めです。有線のイーサネットが衝突を検知して対処するCSMA/CDだったのに対し、無線は送信中に自分で衝突を検知できないため、送る前に一定時間の空きを確認し、乱数時間だけ待ってから送るCSMA/CAで衝突そのものを避けます。互いの電波が届かない端末どうしが同時に送ってしまう隠れ端末問題には、送信の許可を先に取り合うRTS/CTSで対処します。
無線は媒体を共有するので、規格上の最大速度がそのまま出ることはありません。同じアクセスポイントにぶら下がる端末が増えれば1台あたりの取り分は減り、確認応答や待ち時間のぶんも差し引かれます。設計では、実効はカタログ値の半分程度と見込むのが安全です。安全面では、暗号化と認証の世代を確認します。WEPは解読方法が知られており使ってはならず、WPA2はAESによる暗号化を用います。WPA3はさらに、事前共有鍵を用いる場合でも総当たり攻撃に強い鍵交換を導入しています。利用者ごとに認証したい場合は、IEEE 802.1XとRADIUSサーバを組み合わせます。
回線を流れる通信は本来すべて平等に扱われます(ベストエフォート)が、音声会議のように遅延やゆらぎに弱い通信を守りたいときはQoSを設定します。優先制御は、印を付けた通信を待ち行列の先へ通す仕組みで、混雑時に効きます。帯域制御には、上限を超えた分をいったんためて平らにならすシェーピングと、超えた分をその場で捨てるポリシングがあります。どの通信を優先するかの印はIPヘッダのDSCPやイーサネットフレームのCoSで運びます。押さえておきたいのは、QoSは限られた帯域の配り方を変える仕組みであって、帯域そのものを増やしはしないという点です。全体が常に不足しているなら、増速か通信量の削減が先です。
性能の見積りは、単位をそろえることがすべてです。データ量はバイト、回線速度はビット毎秒なので、必ず8倍して合わせます。転送時間は、データ量をビットに直して、回線速度に伝送効率を掛けた実効速度で割ります。たとえば 240 Mバイトのデータを 60 Mbps の回線で伝送効率 80% として送るなら、1920 Mビットを 48 Mbps で割って40秒です。ここで効率を掛け忘れると32秒、効率で割るべきところを掛けてしまうと25.6秒になり、いずれも短めの答えが出ます。逆に、決められた時間内に送り切るために必要な回線速度を求める問題も同じ式を組み替えるだけです。
回線の速度だけでなく、遅延も効きます。帯域と往復遅延を掛けたものが帯域遅延積で、その回線が同時に運べるデータの量を表します。400 Mbps で往復25 msなら、400000000 に 0.025 を掛けて8で割り、125万バイトです。ウィンドウサイズがこれより小さいと、いくら帯域があっても待ち時間だけが増えていきます。加えて、フレームを一度受け切ってから送り出すストアアンドフォワード方式では、経由する回線の本数だけ送出時間が積み上がる点にも注意します。
設計では、止まらないことと使い切らないことを両立させます。機器や回線を並列に置けば、1台の稼働率が0.9でも2台並列なら 1-(1-0.9)² で0.99になり、直列につないだ部分は掛け算で下がっていきます。どこを二重化すれば全体の可用性がいちばん上がるかは、この計算で比べられます。帯域は、ピーク時の同時利用者数と1人あたりの通信量から見積もり、実測の伸び率を掛けて余裕を持たせます。利用者に近い場所へコンテンツを配るCDN、拠点間を安全に結ぶVPN、複数の回線を用途に応じて自動で使い分けるSD-WANなども、帯域と可用性の要件から選ぶ道具立てです。
| 求めるもの | 式 | つまずきやすい点 |
|---|---|---|
| 転送時間 | データ量をビットに直し、回線速度と伝送効率の積で割る | バイトとビットの8倍を忘れる。効率を掛け忘れる |
| 必要な回線速度 | データ量のビット数を、許される時間と効率の積で割る | 許容時間を秒に直し忘れる |
| 実効スループット | 回線速度に伝送効率を掛ける | 効率を割ってしまう |
| 帯域遅延積 | 回線速度に往復遅延時間を掛け、8で割ってバイトにする | 片道遅延で計算してしまう |
| ウィンドウ制限の上限速度 | ウィンドウサイズのビット数を往復遅延時間で割る | ウィンドウをビットに直し忘れる |
| 並列2台の稼働率 | 1から、両方が同時に停止する確率を引く | 稼働率を単純に足してしまう |
- CSMA/CA
- 無線LANの制御方式。送信中に衝突を検知できないため、送る前に空きを確認し乱数時間だけ待つことで衝突を避ける。有線のCSMA/CDは衝突を検知してから対処する。
- 隠れ端末問題
- 互いの電波が届かない端末どうしが、アクセスポイントに対して同時に送信してしまう問題。送信許可を先に取り合うRTS/CTSで緩和する。
- WPA3
- 無線LANの暗号化と認証の規格。事前共有鍵を使う場合でも総当たり攻撃に強い鍵交換を導入している。WEPは解読方法が知られており使用してはならない。
- IEEE 802.1X
- 接続してきた端末や利用者を、RADIUSサーバと連携して認証してからネットワークに参加させる仕組み。有線ポートにも無線にも適用できる。
- 優先制御
- 印を付けた通信を待ち行列の先へ通し、遅延に弱い通信を守るQoSの手法。印はIPヘッダのDSCPやイーサネットフレームのCoSで運ぶ。
- シェーピングとポリシング
- 帯域制御の二方式。シェーピングは上限を超えた分をためて平らにならし、ポリシングは超えた分をその場で捨てる。前者は遅延が増え、後者は損失が出る。
- 伝送効率
- 回線速度のうち、実際のデータ転送に使える割合。ヘッダや確認応答、再送のぶんが差し引かれる。転送時間はこれを掛けた実効速度で割って求める。
- 帯域遅延積
- 回線速度と往復遅延時間を掛けた値で、その経路が同時に運べるデータ量を表す。ウィンドウサイズがこれを下回ると、帯域があっても速度が出ない。
- ストアアンドフォワード
- フレームを最後まで受け切ってから次へ送り出す転送方式。誤りのあるフレームを転送せずに済むが、経由する回線の本数だけ送出時間が積み上がる。
- 並列構成の稼働率
- どちらか一方が動いていればよい構成の稼働率。1から、両方が同時に停止する確率を引いて求める。直列構成は各稼働率の積になる。
- CDN
- コンテンツを利用者に近い配信拠点へ複製して届ける仕組み。元のサーバの負荷と、利用者までの遅延の両方を下げられる。
- SD-WAN
- 複数の広域回線を、通信の種類や状態に応じてソフトウェアで自動的に使い分ける方式。専用線と安価な回線を組み合わせて費用と品質の折合いを付ける。
例題 例題:3 Gバイトのデータを 1 Gbps の回線で送る。伝送効率が 60% のとき、転送に何秒かかるか。1 Gバイトは 10⁹ バイトとする。
データ量は 3×10⁹ バイト、ビットに直すと 24×10⁹ ビット。実効速度は 1 Gbps の60%で 6×10⁸ bps。割ると40秒です。効率を掛け忘れると24秒、バイトのまま割ると5秒と、いずれも短く出てしまいます。単位をそろえてから割る、という手順を必ず守ります。
例題 例題:稼働率0.95の回線を2本並列にし、その先に稼働率0.98の機器が1台直列に入っている。全体の稼働率はいくらか。
並列部分は 1-(1-0.95)×(1-0.95) で0.9975。これに直列の0.98を掛けて0.97755、およそ97.8%です。並列にすると0.95が0.9975まで跳ね上がる一方、直列の要素はそのまま足を引っ張ります。二重化の投資は、いちばん弱い直列部分から検討するのが効率的だと分かります。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類10:ネットワーク
セキュリティ
情報セキュリティの目的とリスクマネジメント
「何を守るのか」と「どこまで守るのか」を、組織が筋道立てて決める手順が分かります。
情報セキュリティとは、情報資産を機密性・完全性・可用性の三つの面から守ることです。機密性は許可された者だけが情報に触れられること、完全性は情報が正確で改ざんも欠落もないこと、可用性は必要なときに使えることを指し、頭文字を取ってCIAと呼びます。JIS Q 27000ではこれに加えて、名乗ったとおりの本人・本物であることを確実にする真正性、動作を行った主体まで一意にたどれる責任追跡性、行った事実を後から否定させない否認防止、意図したとおりにふるまう信頼性の四つが挙げられています。応用情報で問われるのは用語の暗記ではなく、目の前の対策がどの特性を守っているかを見分ける力です。暗号化は機密性、ハッシュ値やデジタル署名は完全性、二重化やバックアップは可用性、監査ログは責任追跡性、というように対応づけて考えます。
この三つは同時に最大化できません。機密性を高めて権限を絞り込むほど、必要な人がすぐ使えない場面が増えて可用性は下がります。可用性を高めて誰でもどこからでも使えるようにすれば、機密性は下がります。完全性を厳しく守って更新のたびに承認を求めれば、業務は遅くなります。だからセキュリティ対策は「全部を最高水準に」ではなく、守る対象の価値に見合った水準を選ぶ作業になります。その判断の枠組みがリスクマネジメントです。
出発点は情報資産の洗い出しです。サーバやPCのような機器だけでなく、顧客データ、設計書、ソースコード、業務ノウハウ、さらには要員そのものも情報資産になります。洗い出した資産は台帳にまとめ、機密区分と重要度を付けます。区分の付け方は組織が決めますが、漏えいしたときの影響、改ざんされたときの影響、使えなくなったときの影響を、それぞれ金額や業務停止時間で表しておくと後の分析が進みます。資産の価値が分からないままでは、対策にいくらまでかけてよいかが決められません。
次がリスクアセスメントです。JIS Q 31000の考え方では、リスクアセスメントはリスク特定・リスク分析・リスク評価の三段階からなります。リスク特定は、資産ごとに「どんな脅威が、どの脆弱性を突いて、どんな損失を起こしうるか」を列挙する段階です。リスク分析は、特定したリスクの発生頻度と影響の大きさを見積もる段階です。リスク評価は、見積もった大きさをあらかじめ決めておいたリスク基準と照らし、対応が必要かどうか、どれから手を付けるかを決める段階です。この順序と、それぞれが何をする段階なのかは、応用情報でそのまま問われます。
分析のやり方には定量的評価と定性的評価があります。定量的評価は損失を金額で表す方法で、代表的な指標が年間予想損失額(ALE)です。1回あたりの損失額(SLE)に年間発生回数(ARO)を掛けて求めます。たとえば1回の漏えいで500万円の損失が生じ、年0.2回の頻度で起きると見積もるなら、ALEは100万円です。この数値があると、年間コストが100万円を超える対策は割に合わない、という判断ができます。一方、定性的評価は発生頻度と影響度をそれぞれ3段階や5段階のレベルで表し、リスクマトリックスの上に置いて優先順位を付ける方法です。金額に換算しにくい信用の失墜などを扱いやすく、短時間で全体を見渡せますが、対策費用との比較には向きません。実務では、まず定性的に全体をふるいにかけ、上位のものだけ定量的に詰める進め方がよく採られます。
評価が終わったらリスク対応です。対応は四つに分類されます。リスク低減は、対策を打って発生頻度や影響を小さくするもので、暗号化、多要素認証、修正プログラムの適用などが該当します。リスク回避は、リスクの原因になっている活動そのものをやめるもので、収集する必要のない個人情報を集めない、危険なサービスを廃止する、といった判断です。リスク移転(リスク共有)は、損失の負担を他者に移すもので、サイバー保険への加入や、運用の外部委託が該当します。リスク保有(リスク受容)は、対応せずそのまま受け入れるもので、影響が小さいか、対策費用が損失見込みを上回る場合に選びます。選び分けの目安は、発生頻度が高く影響が小さいものは低減、頻度は低いが影響が甚大なものは移転、頻度も影響も小さいものは保有、頻度も影響も大きく事業として引き受けられないものは回避、という組合せです。
対策を打ってもリスクはゼロにはなりません。残ったものを残留リスクといい、これが受容水準に収まっていることを経営層が承認して初めて対応が完了します。また、対策の実施は費用対効果で判断します。判断の式は単純で、対策によって減る年間予想損失額が対策の年間費用を上回るなら実施する価値がある、上回らないならその対策は過剰である、というものです。ここを押さえておくと、「最も費用対効果が高い対策はどれか」という形の設問に迷わなくなります。
組織としての決めごとは情報セキュリティポリシにまとめます。一般に、なぜ守るのかと基本姿勢を示す基本方針、何をどこまで守るかを定める対策基準、具体的な手順を書いた実施手順の三階層で構成します。基本方針は外部にも公開して組織の姿勢を示すことが多く、実施手順は業務や機器の変更に合わせてこまめに改訂します。全体はPDCAで回し、計画・導入運用・点検・見直しを繰り返して水準を保ちます。この継続的な仕組みがISMSであり、認証規格がJIS Q 27001です。
| 区分 | 何をするか | 向いている場面 | 例 |
|---|---|---|---|
| リスク低減 | 対策を打って発生頻度か影響を小さくする | 発生頻度が高く、影響が中くらいまで | 暗号化、多要素認証、修正プログラムの適用、教育 |
| リスク回避 | 原因となる活動そのものをやめる | 頻度も影響も大きく、事業として引き受けられない | 不要な個人情報を収集しない、危険なサービスを廃止する |
| リスク移転 | 損失の負担を他者に移す(リスク共有) | 発生頻度は低いが、起きたときの影響が甚大 | サイバー保険への加入、運用の外部委託 |
| リスク保有 | 対応せずそのまま受け入れる(リスク受容) | 影響が小さい、または対策費用が損失見込みを上回る | 少額の損失を業務コストとして織り込む |
- 機密性・完全性・可用性
- 情報セキュリティの三つの基本特性。許可された者だけが読めること、情報が正確で改ざんされていないこと、必要なときに使えること。頭文字を取ってCIAという。
- 真正性
- エンティティが主張どおりの本人・本物であることを確実にする特性。認証やデジタル署名で確保する。
- 責任追跡性
- あるエンティティの動作が、その動作を行ったエンティティまで一意に追跡できる特性。個人別のアカウント付与と操作ログの取得で確保する。
- 否認防止
- ある事象や処置が実際に起きたことを、後から当事者に否定させないよう証明できる特性。タイムスタンプ付きのデジタル署名が代表的な手段。
- 信頼性
- 意図した動作と結果が一貫して一致する特性。障害や不具合で予期しない結果を返さないこと。
- 情報資産
- 組織にとって価値があり保護すべき対象。データやソフトウェアだけでなく、機器、書類、サービス、要員、組織の評判も含む。
- 脅威
- 情報資産に損害を与える可能性のある事象や行為。人的脅威、技術的脅威、物理的脅威に分けられる。
- 脆弱性
- 情報資産がもつ弱点。未修正のソフトウェアの欠陥、単純なパスワード、施錠されていない部屋など。脅威に突かれて初めて損失になる。
- リスクアセスメント
- リスク特定・リスク分析・リスク評価の三段階からなる一連の過程。リスク対応の前に行い、どこから手を付けるかを決める。
- リスク特定
- どんな脅威がどの脆弱性を突いて、どんな損失を起こしうるかを漏れなく洗い出す段階。ここで見落としたリスクは以降の段階に現れない。
- リスク分析
- 特定したリスクについて、発生頻度と影響の大きさを見積もる段階。金額で表す定量的評価とレベルで表す定性的評価がある。
- リスク評価
- 分析結果をあらかじめ定めたリスク基準と照らし、対応の要否と優先順位を決める段階。
- 年間予想損失額(ALE)
- 1回あたりの損失額(SLE)に年間発生回数(ARO)を掛けた金額。対策の年間費用と直接比較できるのが利点。
- リスクマトリックス
- 発生頻度と影響度をそれぞれ数段階のレベルで表し、二次元の表に配置して優先度を見る定性的評価の道具。
- リスク低減
- 対策を実施して発生頻度や影響を小さくするリスク対応。暗号化、多要素認証、修正プログラムの適用など。
- リスク回避
- リスクの原因となる活動そのものをやめるリスク対応。不要な個人情報を収集しない、危険なサービスを廃止するなど。
- リスク移転
- 損失の負担を他者に移すリスク対応。リスク共有ともいい、サイバー保険への加入や運用の外部委託が該当する。責任まで移せるわけではない点に注意する。
- リスク保有
- 対応せずリスクをそのまま受け入れること。リスク受容ともいう。影響が小さい場合や、対策費用が損失見込みを上回る場合に選ぶ。
- 残留リスク
- 対応を実施した後もなお残るリスク。受容水準に収まっていることを責任者が承認して初めてリスク対応が完了する。
- 情報セキュリティポリシ
- 基本方針・対策基準・実施手順の三階層で構成される組織の決めごと。基本方針は外部に公開して姿勢を示すことが多い。
- ISMS
- 情報セキュリティマネジメントシステム。方針を定め、リスクに基づいて対策を選び、PDCAで継続的に改善する仕組み。認証規格はJIS Q 27001。
例題 ある業務システムの停止による損失は1回あたり300万円で、年0.1回の頻度で起きると見積もられた。年20万円の保守契約を結ぶと発生頻度が年0.02回まで下がる。この契約は費用対効果の面で妥当か。
妥当である。対策前のALEは300万円×0.1で30万円、対策後は300万円×0.02で6万円だから、年間で24万円の損失削減になる。対策費用は年20万円なので、差引で年4万円だけ得になる。ここで注意したいのは、判断材料は「減る損失額」と「対策費用」の比較であって、対策後のALEの小ささや削減額の大きさだけを見ても答えは出ないという点である。もし保守契約が年30万円なら、削減額24万円を上回るので見送りが合理的な判断になる。
例題 自社の通販サイトが大規模なDDoS攻撃を受けて長時間停止した場合、売上機会の損失と信用の失墜で数億円規模の被害が想定される。ただし、そのような攻撃が自社に来る頻度は数年に1回程度と見積もられた。リスク対応としてまず検討すべき区分はどれか。
リスク移転である。発生頻度は低いが、いざ起きたときの影響が自社の体力を超える種類のリスクは、保険や外部サービスの利用で負担を分散するのが定石になる。具体的にはサイバー保険の付保や、DDoS防御を含むCDNサービスの利用が該当する。もちろん低減策(回線容量の確保、レート制限)も併用するが、頻度が低いものに自前で過大な設備投資を行うと費用対効果が合わなくなる。なお、外部委託しても説明責任や監督責任まで移るわけではない点は押さえておきたい。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類11:セキュリティ/JIS Q 27000(情報セキュリティマネジメントシステム-用語)
脅威と攻撃手法を「突かれる弱点」で整理する
攻撃名を丸暗記せず、どの弱点を突かれているのかで分類できるようになります。
攻撃手法は数が多く、名前だけを覚えても実務でも試験でも使えません。有効なのは「その攻撃はどの弱点を突いているのか」で整理することです。弱点が分かれば対策は自動的に決まりますし、初めて見る攻撃名でも説明文から分類できます。ここでは、入口を狙うもの、Webアプリケーションの実装を狙うもの、ネットワークの仕組みを狙うもの、認証情報を狙うもの、人と組織を狙うものの五つに分けて見ていきます。
まず入口です。標的型攻撃は特定の組織に狙いを定め、業務に見せかけたメールや文書で足がかりを作り、長期間かけて内部を移動しながら目的の情報に近づきます。侵入した後に権限を広げていく段階を権限昇格、内部を移動していく段階を水平展開(ラテラルムーブメント)と呼びます。この形の攻撃は入口で完全に止めることが難しいので、侵入されることを前提に、内部の通信を監視し、被害範囲を区切る多層防御へと考え方が移っています。標的型の一種であるやり取り型攻撃は、無害な問合せを何度か交わして信用させてから本命を送り付けるもので、添付ファイルの機械的な遮断だけでは防ぎきれません。水飲み場型攻撃は、標的がよく閲覧するサイトを改ざんして待ち伏せる手口です。
ランサムウェアは、侵入した後にファイルやバックアップを暗号化して業務を止め、復旧と引換えに金銭を要求します。近年はデータを窃取したうえで「支払わなければ公開する」と迫る二重脅迫型が主流で、暗号化への備えだけでは不十分になりました。対策の柱は、オフラインまたは書換え不可の媒体にバックアップを取り、復旧手順を実際に試しておくことです。バックアップがネットワーク上に置かれたままだと、同時に暗号化されて役に立ちません。3つの複製を2種類の媒体に、うち1つは別の場所に置くという3-2-1の考え方が知られています。サプライチェーン攻撃は、対策の手薄な取引先や委託先、あるいはソフトウェアの更新配布経路を踏み台にして本来の標的へ入り込むもので、自社だけを固めても防げないところが厄介です。委託先の選定基準と監査、利用しているソフトウェア部品の一覧(SBOM)の把握が対策になります。
Webアプリケーションの実装を狙う攻撃は、いずれも「利用者から受け取った値を、そのまま別の文法の世界に流し込んでいる」ことが弱点です。SQLインジェクションは、入力値を文字列連結でSQL文に埋め込んでいる箇所を突き、データベースを不正に検索・改ざんします。対策はプレースホルダ(バインド機構)を使い、入力値を必ず値として扱わせることです。クロスサイトスクリプティング(XSS)は、入力をそのままHTMLに出力しているサイトを経由して、閲覧者のブラウザ上で攻撃者のスクリプトを動かします。対策は出力する直前のエスケープ処理で、入力時の検査だけに頼るのは不十分です。OSコマンドインジェクションは、入力がシェルに渡る箇所を突きます。どれも「入口で悪い文字を弾く」より「出口で正しく扱う」ほうが確実です。
同じWeb系でも、クロスサイトリクエストフォージェリ(CSRF)は毛色が違います。これは値の解釈ではなく、「この更新要求は本当に利用者が意図して出したものか」を確かめていないことが弱点です。ログイン済みの利用者のブラウザに、本人の知らないうちに送金や設定変更の要求を送らせます。対策は、画面ごとに推測できないトークンを埋め込み、要求時に照合することです。ディレクトリトラバーサルは、公開すべきでないファイルの名前を組み立てられてしまうことが弱点で、ファイル名を利用者の入力から直接作らず、識別子で対応付ける方法が確実です。セッションハイジャックは、セッションIDが推測できる、または盗聴できることが弱点で、IDを十分に長い乱数にし、ログイン時に再発行し、通信をTLSで保護します。
ネットワークの仕組みを狙う攻撃も整理しておきます。DoS攻撃は大量の要求で処理能力や回線容量を使い切らせるもので、多数の踏み台から一斉に行うのがDDoS攻撃です。DNSリフレクション攻撃は、送信元IPアドレスを標的に詐称した問合せを多数のDNSサーバへ送り、問合せより大きな応答を標的に集中させる増幅型で、送信元の詐称ができることと応答が問合せより大きいことの二つを同時に突いています。DNSキャッシュポイズニングは、キャッシュに偽の対応関係を覚え込ませて利用者を偽サイトへ誘導するもので、応答に署名を付けるDNSSECが対策です。中間者攻撃は経路に割り込んで双方になりすますもので、サーバ証明書の検証を確実に行うことが防御になります。
認証情報を狙う攻撃では、ブルートフォース攻撃が総当たり、辞書攻撃がよくある語の試行、パスワードリスト攻撃が他サイトから流出したIDとパスワードの組の使い回しを突くものです。パスワードリスト攻撃はパスワードをいくら複雑にしても使い回していれば成立するので、対策の中心は多要素認証になります。リバースブルートフォース攻撃は、パスワードを固定して利用者IDのほうを変えていく手口で、アカウント単位の試行回数制限をすり抜けます。レインボーテーブル攻撃は、ハッシュ値と元の文字列の対応表を事前計算しておく手口で、利用者ごとに異なるソルトを付けてハッシュ化すれば表が使えなくなります。ストレッチングでハッシュ計算を何度も繰り返し、1回の照合を意図的に遅くするのも有効です。
最後に人と組織です。ソーシャルエンジニアリングは技術ではなく人の心理や不注意につけ込む手口の総称で、なりすましの電話、肩越しののぞき見、ごみ箱あさりなどがあります。ビジネスメール詐欺は取引先や役員になりすまして送金先を書き換えさせるもので、金額が大きくなりがちです。内部不正は、機会・動機・正当化の三つがそろったときに起きるとされ(不正のトライアングル)、組織が直接手を打てるのは主として機会です。最小権限、職務分離、操作ログの監視、記憶媒体の持出し制限が効きます。ゼロデイ攻撃は修正プログラムが提供される前の脆弱性を突くもので、パッチ適用だけでは防げないため、緩和策や検知の仕組みで時間を稼ぐという発想が要ります。
| 攻撃 | 突かれている弱点 | 根本対策 |
|---|---|---|
| SQLインジェクション | 入力値を文字列連結でSQL文に組み込んでいる | プレースホルダで値として渡す |
| クロスサイトスクリプティング | 入力値をそのままHTMLに出力している | 出力の直前にエスケープする |
| クロスサイトリクエストフォージェリ | 要求が本人の意図か確かめていない | 推測できないトークンを埋め込み照合する |
| ディレクトリトラバーサル | ファイル名を利用者の入力から組み立てている | 識別子で対応付け、パスを直接受け取らない |
| セッションハイジャック | セッションIDを推測できる、盗聴できる | 長い乱数、ログイン時の再発行、TLS |
| DDoS | 処理能力と回線容量に上限がある | レート制限、負荷分散、防御サービスの利用 |
| DNSリフレクション | 送信元IPを詐称でき、応答が問合せより大きい | オープンリゾルバの廃止、送信元アドレス検証 |
| パスワードリスト | 利用者がパスワードを使い回している | 多要素認証、流出パスワードの照合 |
| レインボーテーブル | 同じパスワードが同じハッシュ値になる | 利用者ごとのソルトとストレッチング |
| ランサムウェア | 唯一の複製がオンラインに置かれている | オフライン保管のバックアップと復旧訓練 |
| サプライチェーン | 委託先や配布経路の対策が自社より弱い | 委託先の選定基準と監査、SBOMの管理 |
| 内部不正 | 権限が広すぎ、監視もされていない | 最小権限、職務分離、ログ監視、持出し制限 |
- 標的型攻撃
- 特定の組織に狙いを定め、業務に見せかけた文書などで侵入し、長期間かけて内部を移動しながら目的の情報に近づく攻撃。
- 水平展開
- 侵入した端末を足がかりに、内部の別の端末やサーバへ移動していく段階。ラテラルムーブメントともいう。内部通信の監視と区画化が対策。
- 権限昇格
- 侵入後に、より高い権限のアカウントを奪って操作範囲を広げること。管理者権限の常用を避け、権限を必要なときだけ与えることで抑えられる。
- ランサムウェア
- ファイルを暗号化して業務を止め、復旧と引換えに金銭を要求するマルウェア。データを窃取して公開すると脅す二重脅迫型が主流。
- 3-2-1ルール
- 3つの複製を2種類の媒体に保存し、うち1つは別の場所に置くというバックアップの目安。オンライン上の複製だけでは同時に暗号化される。
- サプライチェーン攻撃
- 対策の手薄な取引先や委託先、ソフトウェアの更新配布経路を踏み台にして本来の標的へ侵入する攻撃。委託先の監査とSBOMの把握が対策。
- SBOM
- ソフトウェア部品表。製品に含まれるライブラリとその版を一覧にしたもの。脆弱性が公表されたとき、影響範囲を短時間で特定できる。
- SQLインジェクション
- 入力値を文字列連結でSQL文に埋め込んでいる箇所を突き、データベースを不正に操作する攻撃。プレースホルダの利用が根本対策。
- クロスサイトスクリプティング
- 入力をそのままHTMLに出力しているサイトを経由し、閲覧者のブラウザ上で攻撃者のスクリプトを実行させる攻撃。出力時のエスケープが対策。
- クロスサイトリクエストフォージェリ
- ログイン済み利用者のブラウザに、本人が意図しない更新要求を送らせる攻撃。要求が本人の意図かを確かめていないことが弱点で、トークン照合が対策。
- ディレクトリトラバーサル
- 相対パスを含むファイル名を与えて、公開を意図していないファイルを読み書きする攻撃。ファイル名を入力から直接作らないことが対策。
- セッションハイジャック
- 盗聴や推測で得たセッションIDを使って他人になりすます攻撃。IDを長い乱数にし、ログイン時に再発行し、通信をTLSで保護する。
- DDoS攻撃
- 多数の踏み台から一斉に大量の要求を送り、サービスを提供できない状態にする攻撃。可用性を直接損なう。
- DNSリフレクション攻撃
- 送信元IPアドレスを標的に詐称した問合せを多数のDNSサーバへ送り、問合せより大きな応答を標的へ集中させる増幅型のDDoS攻撃。
- DNSキャッシュポイズニング
- DNSサーバのキャッシュに偽の対応関係を覚え込ませ、利用者を偽サイトへ誘導する攻撃。DNSSECによる応答の署名検証が対策。
- パスワードリスト攻撃
- 他サイトから流出した利用者IDとパスワードの組をそのまま別サイトで試す攻撃。パスワードの使い回しがあると成立し、多要素認証が有効。
- リバースブルートフォース攻撃
- パスワードのほうを固定し、利用者IDを次々に変えて試す攻撃。アカウント単位の試行回数制限をすり抜けるため、送信元単位の制限も要る。
- レインボーテーブル攻撃
- ハッシュ値と元の文字列の対応表を事前計算しておき、盗んだハッシュ値から元のパスワードを高速に割り出す攻撃。ソルトの付与で無効化できる。
- ソルトとストレッチング
- ソルトは利用者ごとに異なる文字列をパスワードに連結してからハッシュ化する手法。ストレッチングはハッシュ計算を多数回繰り返して照合を遅くする手法。
- ビジネスメール詐欺
- 取引先や自社の役員になりすまし、振込先の変更などを指示して送金させる詐欺。技術的な侵入を伴わないことも多く、承認手続の見直しが対策。
- 不正のトライアングル
- 内部不正は機会・動機・正当化の三つがそろったときに起きるという考え方。組織が直接減らせるのは主に機会。
- ゼロデイ攻撃
- 修正プログラムが提供される前の脆弱性を突く攻撃。パッチ適用では防げないため、緩和策と検知で被害を抑える発想が要る。
例題 利用者からの入力を含む検索機能で、開発者が「危険な記号を入力時に取り除く」対策を入れた。それでもSQLインジェクションの根本対策とは言えないのはなぜか。
危険とされる記号の一覧は網羅できず、文字コードの解釈の違いや多段の変換で検査をすり抜ける余地が残るからである。さらに、入力時の検査は画面が増えるたびに漏れが生じる。根本対策は、SQL文の骨組みをあらかじめ固定し、利用者の値はプレースホルダを通じて必ず値として渡すことである。こうすれば、値の中にSQLの文法らしき文字列が含まれていても、それは単なる文字列として比較されるだけで、文の構造が変わることはない。入力検査は業務上の妥当性を確かめる目的で併用するとよい。
例題 毎日クラウドストレージへ自動でバックアップを取り、そのストレージは業務端末から常時書き込める状態にしていた組織がランサムウェアの被害に遭い、バックアップからも復旧できなかった。何が問題だったか。
バックアップが業務端末から書き換えられる状態でオンラインに置かれていたため、原本と一緒に暗号化されてしまったことが問題である。バックアップは、取得後に書き換えられないこと(オフライン保管、または書換え不可の設定)が要件になる。あわせて、世代を複数保持しておくこと、そして復旧手順を実際に試して所要時間を測っておくことが要る。取得できていることと、決められた時間内に戻せることは別の話である。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類11:セキュリティ
暗号技術とデジタル署名・PKI
共通鍵と公開鍵をなぜ組み合わせて使うのか、証明書が何を保証しているのかが分かります。
暗号は「鍵を知っている者だけが元に戻せる」変換で、機密性を守る中心的な技術です。方式は大きく二つあります。共通鍵暗号(対称鍵暗号)は暗号化と復号に同じ鍵を使い、代表例がAESです。処理が速く大量のデータに向きますが、通信相手ごとに別の鍵を安全に配る必要があります。公開鍵暗号(非対称鍵暗号)は、対になる二つの鍵のうち片方で暗号化したものをもう片方でしか戻せない仕組みで、代表例がRSAと楕円曲線暗号です。公開鍵は誰に配ってもよいので鍵の配送問題が解けますが、共通鍵暗号に比べて処理が桁違いに遅くなります。
鍵の管理コストは人数が増えるとはっきり差が出ます。n人が互いに共通鍵暗号で通信するには、組合せの数だけ鍵が要るのでn(n-1)/2本になります。50人なら1225本です。一方、公開鍵暗号では各自が公開鍵と秘密鍵を1対持つだけでよく、鍵の総数は2n本、50人なら100本で済みます。ここで多いのが、公開鍵暗号でもn(n-1)/2本と数えてしまう誤りと、共通鍵でn(n-1)本(相手ごとに1本ずつ両方向)と数えてしまう誤りです。共通鍵は2人で1本を共有するので、掛けた後に2で割ることを忘れないようにします。
実際のシステムはハイブリッド暗号方式を使います。まず公開鍵暗号でその通信だけに使う共通鍵(セション鍵)を安全に相手へ渡し、以降の本文は速い共通鍵暗号でやり取りする、という組合せです。公開鍵暗号の「鍵を配れる」利点と、共通鍵暗号の「速い」利点をどちらも取る方法で、TLSもこの構成です。さらに、セション鍵を毎回使い捨てにし、後から秘密鍵が漏れても過去の通信を復号できないようにする性質を前方秘匿性(PFS)といい、鍵交換にDH法やECDHEを使うことで実現します。
ハッシュ関数は、任意長のデータから固定長の値を作る一方向の関数です。同じ入力からは必ず同じ値が出て、値から元のデータは復元できず、わずかな違いでも値は大きく変わります。改ざん検出やパスワードの保管に使われ、SHA-256などが用いられます。安全性の目安は二つあり、ある値と同じハッシュ値になる別のデータを見つける原像探索は2ⁿ回程度、単に同じハッシュ値になる二つのデータの組を見つける衝突探索は誕生日のパラドックスにより2ⁿᐟ²回程度で済みます。だから256ビットのハッシュでも、衝突に対する強度は128ビット相当と見積もります。
デジタル署名は、公開鍵暗号を「逆向き」に使う技術です。送信者は文書のハッシュ値を自分の秘密鍵で変換したものを署名として添え、受信者は送信者の公開鍵でそれを戻し、自分で計算した文書のハッシュ値と一致するか確かめます。一致すれば、署名は送信者の秘密鍵を持つ者にしか作れないので本人が作ったこと(真正性と否認防止)と、途中で書き換えられていないこと(完全性)が同時に確かめられます。注意すべきは、デジタル署名は文書を暗号化しないので機密性は守らないこと、そしてハッシュ値に署名するのは処理を速くするためだという点です。
ここで残る問題が「その公開鍵は本当に相手のものか」です。これを第三者が保証する仕組みがPKI(公開鍵基盤)で、認証局(CA)が申請者の実在性を確認したうえで、公開鍵と持ち主の情報をまとめてCAの秘密鍵で署名したものがデジタル証明書です。利用者はCAの公開鍵で証明書の署名を検証し、そのCAの証明書もさらに上位のCAが署名し、と信頼の連鎖をたどって、あらかじめ端末に組み込まれたルート証明書まで到達できれば信頼します。失効した証明書の扱いも重要で、失効した証明書の一覧を配布するCRLと、1件ずつ問い合わせるOCSPがあります。CRLは配布間隔のぶんだけ情報が古くなり、OCSPは即時性が高い代わりに問合せ先の負荷と可用性が課題になります。
TLSの手順も押さえておきます。クライアントが使える暗号方式の一覧と乱数を送り、サーバが方式を一つ選んで自分の証明書と乱数を返します。クライアントは証明書の署名、有効期限、名前の一致、失効の有無を検証し、問題なければ鍵交換を行って両者が同じ共通鍵(セション鍵)を得ます。その後、これまでのやり取りが改ざんされていないことを確認してから、暗号化した通信に移ります。TLS 1.3では手順が簡素化され、往復回数が減り、安全性の低い方式が整理されました。証明書には、ドメインの管理権だけを確認するDV、組織の実在も確認するOV、より厳格な審査を行うEVの区分があり、どれでも暗号化の強度は同じで、違うのは「何を確認済みか」だけです。
暗号の運用で忘れてはいけないのが危殆化です。計算機の性能向上や解読法の進歩によって、かつて安全だった方式や鍵長がやがて安全でなくなります。だから、方式を差し替えられる設計にしておくこと(暗号アジリティ)と、CRYPTRECの電子政府推奨暗号リストのような公的な指針を定期的に確認することが求められます。将来的には量子計算機による解読に備えた耐量子計算機暗号への移行も課題になります。
| 観点 | 共通鍵暗号 | 公開鍵暗号 | ハッシュ関数 |
|---|---|---|---|
| 鍵 | 1つの鍵を2者で共有 | 公開鍵と秘密鍵の対 | 鍵を使わない |
| n人での鍵の数 | n(n-1)/2 本 | 2n 本 | 該当なし |
| 処理速度 | 速い | 遅い | とても速い |
| 主な用途 | 本文の暗号化 | 鍵の受渡し、デジタル署名 | 改ざん検出、パスワード保管 |
| 守れる特性 | 機密性 | 機密性、真正性、否認防止 | 完全性 |
| 代表例 | AES | RSA、楕円曲線暗号 | SHA-256 |
- 共通鍵暗号
- 暗号化と復号に同じ鍵を使う方式。対称鍵暗号ともいう。処理が速く大量データに向くが、相手ごとの鍵配送が課題。代表例はAES。
- 公開鍵暗号
- 対になる2つの鍵の片方で暗号化したものをもう片方でしか復号できない方式。鍵配送問題を解けるが処理は遅い。代表例はRSAと楕円曲線暗号。
- 鍵の本数
- n人が互いに共通鍵暗号で通信するには n(n-1)/2 本の鍵が要る。公開鍵暗号なら各自1対で足り、鍵の総数は 2n 本になる。
- ハイブリッド暗号方式
- 公開鍵暗号でセション鍵を安全に渡し、本文は共通鍵暗号でやり取りする組合せ。鍵配送の容易さと処理の速さを両立する。TLSもこの構成。
- セション鍵
- その通信の間だけ使う使い捨ての共通鍵。毎回変えることで、1つの鍵が漏れたときの影響を1回分の通信に限定できる。
- 前方秘匿性(PFS)
- 後からサーバの秘密鍵が漏れても、過去に記録された通信を復号できない性質。ECDHEなどの鍵交換方式で実現する。
- ハッシュ関数
- 任意長のデータから固定長の値を作る一方向の関数。同じ入力からは同じ値が出るが、値から元データは復元できない。SHA-256など。
- 衝突と誕生日攻撃
- 同じハッシュ値になる異なるデータの組を衝突という。誕生日のパラドックスにより、nビットのハッシュでも衝突探索は約 2ⁿᐟ² 回で済む。
- メッセージ認証符号(MAC)
- 共通鍵とメッセージからつくる検証用の値。改ざん検出はできるが、鍵を2者が共有しているため第三者に対する否認防止はできない。
- デジタル署名
- 文書のハッシュ値を送信者の秘密鍵で変換した値。受信者は送信者の公開鍵で検証する。完全性・真正性・否認防止を確保するが、機密性は守らない。
- 認証局(CA)
- 申請者の実在性を確認し、公開鍵と持ち主の情報に自らの秘密鍵で署名して証明書を発行する第三者機関。
- デジタル証明書
- 公開鍵とその持ち主の情報に認証局が署名した電子的な身分証。X.509の形式が広く使われる。
- 信頼の連鎖
- サーバ証明書を中間CAが署名し、中間CAの証明書をルートCAが署名する連なり。端末に組み込まれたルート証明書まで到達できれば信頼する。
- CRLとOCSP
- 証明書の失効を確認する方法。CRLは失効一覧を配布する方式で情報が配布間隔ぶん古くなる。OCSPは1件ずつ問い合わせる方式で即時性が高い。
- TLS
- 通信路を暗号化し、サーバの正当性を証明書で確認する仕組み。ハイブリッド暗号方式で、TLS 1.3では手順が簡素化され往復回数が減った。
- DV・OV・EV
- サーバ証明書の審査区分。順にドメインの管理権のみ、組織の実在まで、より厳格な審査まで確認する。暗号化の強度自体に差はない。
- 暗号の危殆化
- 計算機性能の向上や解読法の進歩で、かつて安全だった方式や鍵長が安全でなくなること。方式を差し替えられる設計にしておくことが要る。
- CRYPTREC
- 電子政府で利用する暗号技術を評価し、推奨暗号リストを公表している日本の取組み。採用する方式を選ぶときの公的な手掛かりになる。
例題 8人の部署で、全員が互いに共通鍵暗号だけで秘密の通信をしたい。必要な鍵は何本か。公開鍵暗号に切り替えると鍵の総数はどうなるか。
共通鍵暗号では2人の組合せごとに1本の鍵が要るので、8×7/2で28本である。公開鍵暗号なら各自が公開鍵と秘密鍵を1対ずつ持てばよいので、鍵の総数は2×8で16本になる。8人ではまだ差が小さいが、人数が増えると共通鍵は人数の2乗に比例して増える一方、公開鍵は人数に比例するだけなので差が急速に開く。ここでよくある誤りが、掛けた後に2で割り忘れて56本と答えることと、公開鍵でも組合せの数を数えてしまうことである。
例題 デジタル署名の付いた契約書のPDFを受け取った。この署名の検証に成功したことで確かめられるのは何で、確かめられないのは何か。
確かめられるのは、その文書が署名時点から書き換えられていないこと(完全性)と、署名鍵の持ち主が署名したこと(真正性)、そして後から本人が「署名していない」と言えないこと(否認防止)である。確かめられないのは中身の秘密で、デジタル署名は文書を暗号化しないため、経路上で第三者に読まれることは防げない。機密性も要るなら、署名に加えて暗号化を併用する。また、署名した時刻を第三者に証明したいならタイムスタンプを別途付与する必要がある。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類11:セキュリティ
認証とアクセス制御
「誰か」を確かめる認証と、「何をしてよいか」を決める認可の違いから整理します。
認証(authentication)は相手が名乗ったとおりの本人かを確かめること、認可(authorization)はその主体に何をしてよいかを与えることです。この二つは別の工程で、認証に成功したからといって何でもできるわけではありません。試験でも実務でも、この区別を曖昧にしたまま議論すると話が噛み合わなくなります。
認証の手段は三つの要素に分けられます。知識による認証は本人だけが知っていること(パスワード、暗証番号、秘密の質問)、所持による認証は本人だけが持っている物(ICカード、スマートフォン、ハードウェアトークン)、生体による認証は本人固有の身体的・行動的特徴(指紋、虹彩、静脈、声紋、署名の筆跡)です。これらのうち異なる要素を二つ以上組み合わせるのが多要素認証です。ここで大事なのは、パスワードと秘密の質問のように同じ知識の要素を二つ重ねても、それは多段階認証ではあっても多要素認証にはならないという点です。要素が違うからこそ、片方が破られてももう片方が残ります。
生体認証には、本人を誤って拒否する割合(本人拒否率、FRR)と、他人を誤って受け入れる割合(他人受入率、FAR)という二つの誤り率があります。判定のしきい値を厳しくするとFARは下がりますがFRRは上がり、緩めるとその逆になります。両者が等しくなる点を等誤り率(EER)といい、装置の性能比較に使われます。どちらを優先するかは用途で決まり、機密区画の入退室ならFARを抑える方向、大勢が毎朝通る一般の入口ならFRRを抑える方向に寄せる、という判断になります。
パスワードだけに頼る認証の弱さから、フィッシングに強い方式が広がっています。FIDOは、端末の中に秘密鍵を保管し、サーバには公開鍵だけを登録して、サーバから送られた乱数に署名して返すことで認証する方式です。パスワードそのものがネットワークを流れず、サーバ側にも保管されないので、流出や中間者による横取りが原理的に起こりにくくなります。さらに、署名の対象に接続先のドメイン名が含まれるため、偽サイトでは正しい署名が作れず、フィッシングが成立しません。この方式を鍵の同期や端末間の共有まで含めて利用者向けに整理したものがパスキーです。ワンタイムパスワードも有効な手段ですが、偽サイトに入力させて即座に転送されると突破されうるので、フィッシング耐性という点ではFIDOに劣ります。
利用するシステムが増えるとログインの回数も増えます。一度の認証で複数のシステムを使えるようにする仕組みがシングルサインオン(SSO)です。実現方式には、認証情報をクッキーに持たせる方式、利用者に代わって各システムへログインするリバースプロキシ方式、認証結果を標準の書式でやり取りするSAML方式などがあります。SSOは利便性とパスワード管理の負担軽減に大きく効きますが、認証基盤が単一障害点になり、そこが破られると全システムへ波及するという裏返しがあります。だから認証基盤自体の多要素化と冗長化が前提になります。
SSOと混同されやすいのがOAuth 2.0とOpenID Connectです。OAuth 2.0は認可の枠組みで、「利用者のパスワードを渡さずに、あるサービスに他のサービスの特定の権限だけを一時的に貸す」ためのものです。写真共有サービスに印刷サービスから読取りだけを許す、といった使い方がこれにあたります。一方、OpenID Connect(OIDC)はOAuth 2.0の上に認証を載せた仕様で、「誰がログインしたか」を表すIDトークンを発行します。つまり、OAuthだけでは「この操作を許された」ことしか分からず、本人確認の用途にそのまま流用してはいけません。この違いは応用情報で頻繁に問われます。
認可の側、つまりアクセス制御にも型があります。任意アクセス制御(DAC)は資源の所有者が権限を決める方式で、柔軟ですが管理が属人的になります。強制アクセス制御(MAC)は組織が定めた規則で一律に制御する方式で、所有者でも規則を覆せません。役割ベースアクセス制御(RBAC)は、権限を人ではなく役割に付け、人には役割を割り当てる方式です。人事異動のたびに個人ごとの権限を触らずに済み、棚卸しもしやすいので、企業システムの標準的な選択になっています。さらに、利用者の属性や時刻・場所などの条件で判定する属性ベースアクセス制御(ABAC)もあります。
権限設計を貫く原則が最小権限です。業務に必要な最小限の権限だけを、必要な期間だけ与えます。管理者権限を常用しない、権限は申請と承認を経て一時的に付与する、期限が来たら自動的に外れるようにする、といった運用がこれを支えます。あわせて、申請する人と承認する人、実行する人と検証する人を分ける職務分離を入れると、1人の判断だけでは不正が完結しなくなります。そして、与えた権限は放っておくと積み上がるので、定期的なアクセス権の棚卸しで、異動や退職に伴う不要な権限を確実に落とすことが要ります。
| 用語 | 答えているのは | 誤解しやすい点 |
|---|---|---|
| 認証 | あなたは誰か | 認証に成功しても操作範囲が決まるわけではない |
| 認可 | あなたは何をしてよいか | 認可だけでは本人確認にならない |
| SAML | 認証結果を組織間でどう伝えるか | 認可の細かい制御は主目的ではない |
| OAuth 2.0 | 権限をどう安全に貸すか | 本人確認の用途に流用してはいけない |
| OpenID Connect | 誰がログインしたか | OAuthの置換えではなく、その上に認証を足した仕様 |
| FIDO | 秘密を送らずにどう本人を示すか | サーバ側に秘密が保管されないので流出しても悪用されにくい |
- 認証と認可
- 認証は相手が名乗ったとおりの本人かを確かめること。認可はその主体に何をしてよいかを与えること。別の工程であり、混同してはならない。
- 認証の3要素
- 知識(本人だけが知っていること)、所持(本人だけが持っている物)、生体(本人固有の特徴)。異なる要素の組合せが多要素認証。
- 多要素認証と多段階認証
- 多要素認証は異なる要素を組み合わせるもの。パスワードと秘密の質問のように同じ要素を重ねるのは多段階認証にすぎず、強度は大きくは上がらない。
- 本人拒否率(FRR)
- 生体認証で、本人を誤って拒否してしまう割合。しきい値を厳しくすると上がる。
- 他人受入率(FAR)
- 生体認証で、他人を誤って本人と認めてしまう割合。しきい値を緩めると上がる。FRRとはトレードオフの関係にある。
- 等誤り率(EER)
- FRRとFARが等しくなる点の誤り率。装置どうしの性能比較に使われる指標。
- チャレンジレスポンス方式
- サーバが送った乱数(チャレンジ)に対し、利用者側が秘密情報を使って応答を計算して返す方式。パスワードそのものが流れないので盗聴と再送に強い。
- ワンタイムパスワード
- 1回限り有効なパスワード。時刻同期方式やチャレンジレスポンス方式がある。再送攻撃には強いが、偽サイトに入力させて即転送される攻撃には弱い。
- FIDO
- 端末内に秘密鍵を保管し、サーバには公開鍵だけを登録して署名で認証する方式。パスワードが流れず、署名対象に接続先のドメイン名が含まれるためフィッシングに強い。
- パスキー
- FIDOの仕組みを利用者向けに整理した呼び名。端末の生体認証や画面ロックで秘密鍵を使えるようにし、複数端末での利用にも対応する。
- シングルサインオン(SSO)
- 一度の認証で複数のシステムを利用できる仕組み。利便性は高いが、認証基盤が単一障害点になるため多要素化と冗長化が前提になる。
- SAML
- 認証結果や属性を標準の書式でやり取りする仕様。企業のSSOで、社内の認証基盤とクラウドサービスをつなぐ用途に広く使われる。
- OAuth 2.0
- 認可の枠組み。利用者のパスワードを渡さずに、あるサービスへ他のサービスの限定的な権限を一時的に委譲する。それ自体は本人確認の仕組みではない。
- OpenID Connect
- OAuth 2.0の上に認証を載せた仕様。誰がログインしたかを示すIDトークンを発行する。認証が必要ならOAuthではなくこちらを使う。
- 任意アクセス制御(DAC)
- 資源の所有者が誰に何を許すかを決める方式。柔軟だが管理が属人的になり、権限の全体像がつかみにくい。
- 強制アクセス制御(MAC)
- 組織が定めた規則によって一律に制御する方式。所有者であっても規則を覆せない。高い機密性が要る環境で使う。
- 役割ベースアクセス制御(RBAC)
- 権限を役割に付与し、人には役割を割り当てる方式。異動時の付替えと棚卸しが容易で、企業システムの標準的な選択。
- 属性ベースアクセス制御(ABAC)
- 利用者や資源の属性、時刻、場所、端末の状態といった条件を組み合わせて許否を判定する方式。細かい制御ができる反面、規則が複雑になりやすい。
- 最小権限の原則
- 業務に必要な最小限の権限を、必要な期間だけ与えるという原則。管理者権限の常用を避け、期限付き付与と定期的な棚卸しで支える。
- 職務分離
- 申請と承認、実行と検証を別の人に割り当て、1人の判断だけでは不正が完結しないようにする統制。
例題 ある社内システムが、パスワード入力の後に「母親の旧姓」を尋ねる方式を採用し、これを多要素認証だと説明している。この説明は適切か。
適切ではない。パスワードも秘密の質問も、どちらも「本人だけが知っていること」という知識の要素であり、要素は1種類しかない。段階が2つあるという意味で多段階認証ではあるが、多要素認証ではない。フィッシングでパスワードを入力させる画面を作れば、続けて秘密の質問も入力させられるので、攻撃者にとっての難易度はほとんど変わらない。所持(スマートフォンのアプリやセキュリティキー)か生体を組み合わせて初めて多要素になる。
例題 外部の分析サービスに、自社の会計クラウド上の売上データを読み取らせたい。分析サービスに会計クラウドのIDとパスワードを教えるのは避けたい。どの仕組みを使うのが適切か。
OAuth 2.0による権限の委譲が適切である。利用者は会計クラウドの画面で分析サービスに与える権限(この場合は売上データの読取りのみ)を確認して同意し、分析サービスにはアクセストークンだけが渡る。パスワードは分析サービスに渡らず、権限の範囲と期限も限定でき、必要なくなれば利用者側から取り消せる。なお、分析サービス側が「誰がログインしたか」まで知る必要があるなら、OAuthの上に認証を載せたOpenID Connectを使う。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類11:セキュリティ
セキュリティ実装技術と組織的対応・法令
機器と設計で守る技術面と、体制・手順・法律で守る組織面を、ひとつながりで押さえます。
ネットワークの防御は、境界を守る道具の役割分担から整理します。ファイアウォールは主にIPアドレスとポート番号を見て通信を通すか遮るかを決めます。パケットフィルタリング型は1つの通信単位ごとに判断し、ステートフルインスペクション型は接続の状態を覚えていて「こちらから出した通信への応答か」を判断できます。ただし、通過を許したポートの中身までは見ません。IDSは通信を監視して不審な挙動を検知し管理者に知らせる装置、IPSはさらにその通信を遮断まで行う装置です。WAFはHTTPの中身を解釈し、Webアプリケーションを狙う攻撃に特化して防ぎます。つまり、80番や443番を通す設計にしている以上、SQLインジェクションのような攻撃はファイアウォールでは止まらず、WAFの領分になります。この役割の違いが応用情報での定番の問いです。
配置の考え方も押さえます。外部に公開するサーバを内部ネットワークと外部の間の別区画に置くのがDMZ(非武装地帯)で、公開サーバが乗っ取られても内部へ直接届かないようにする設計です。さらに内部を業務や重要度で細かく区切るのがネットワークセグメンテーションで、侵入後の水平展開を遅らせます。近年は、社内は安全という前提そのものを捨てるゼロトラストの考え方が広がりました。すべてのアクセスを、利用者・端末・文脈の観点から毎回検証し、必要最小限の権限だけを与え、常に記録して監視する、という構えです。境界防御の代わりというより、境界が曖昧になったクラウドとリモートワークの時代に合わせた重ね方だと理解しておくとよいでしょう。
端末と監視の技術も広がっています。従来のアンチウイルスがファイルの特徴で既知のマルウェアを弾くのに対し、EDRは端末上のふるまいを記録し、侵入後の不審な動きを検知して調査と封じ込めを支援します。SIEMは各種機器のログを1か所に集めて相関分析し、単体では見えない攻撃の兆候を浮かび上がらせます。侵入を完全には防げないという前提に立つと、検知と対応にかける比重が上がる、というのがこの分野の流れです。
アプリケーション側の作り込みがセキュアプログラミングです。原則は三つに集約できます。第一に、外から来た値は必ず検証すること。長さ、型、範囲、書式を許可する形で確かめます。第二に、値を別の文法の世界へ渡すときは、その世界の作法で正しく扱うこと。SQLならプレースホルダ、HTMLなら出力時のエスケープ、シェルならシェルを介さないAPIです。第三に、失敗したときに安全側へ倒すこと。エラー画面に内部情報を出さない、既定値を「拒否」にする、例外時に権限が開いたままにしない、といった設計です。あわせて、秘密情報をソースコードに書き込まない、乱数は暗号用途に適したものを使う、といった基本も守ります。
脆弱性の管理には共通の物差しがあります。CVEは個別の脆弱性に付ける識別番号で、同じ問題を組織をまたいで指せるようにするものです。CWEは脆弱性の種類の分類で、「入力検証の不備」「境界外書込み」のような型を表します。CVSSは深刻度を数値で表す枠組みで、攻撃の難しさや影響の大きさから0.0から10.0までの値を算出します。値は基本評価基準(脆弱性そのものの性質)、現状評価基準(攻撃コードの出回り具合や対策の状況)、環境評価基準(自組織での重要度)に分かれ、対応の優先順位を決めるときは基本値だけでなく自組織の文脈を加味します。基本値の目安は、9.0以上が緊急、7.0以上9.0未満が重要、4.0以上7.0未満が警告、0.1以上4.0未満が注意です。数値が高いから必ず先に直す、ではなく、その資産がインターネットから触れるのか、既に攻撃が観測されているのか、を合わせて判断するのが実務です。
組織としての体制も問われます。ISMSは、方針を定め、リスクに基づいて管理策を選び、運用し、点検して改善する仕組み全体で、認証規格がJIS Q 27001、管理策の実施の手引がJIS Q 27002です。インシデントに備える専門チームがCSIRTで、検知の受付、影響範囲の判断、封じ込め、復旧、外部との連絡、再発防止までを担います。日常的にログを監視して検知に専念する組織はSOCと呼ばれ、CSIRTとは役割が異なります。インシデント対応の流れは、準備、検知と分析、封じ込め・根絶・復旧、事後活動という順序で整理されます。特に大事なのは準備の段階で、連絡体制と判断基準を平時に決めておかないと、いざというときに時間を失います。
事業継続の観点も欠かせません。BCPは、災害や大規模障害が起きても重要業務を継続または早期復旧するための計画で、目標復旧時間(RTO)と目標復旧時点(RPO)を業務ごとに定めます。RTOは「いつまでに復旧するか」、RPOは「どの時点のデータまで戻せればよいか」です。RPOを短くするほどバックアップの間隔を詰める必要があり費用が上がるので、業務の性質に応じて水準を決めます。ランサムウェアの被害も事業継続の課題として扱われるようになり、復旧手順を実際に試す訓練が重視されています。
最後に法令です。不正アクセス行為の禁止等に関する法律は、第3条で不正アクセス行為そのものを禁じ、第4条で不正アクセスに使う目的での他人の識別符号の取得を、第5条で識別符号を第三者に提供する助長行為を、第6条で不正に取得した識別符号の保管を、第7条でアクセス管理者になりすまして識別符号の入力を求める行為(いわゆるフィッシングの一形態)を禁じています。同法第8条は、アクセス管理者に対して識別符号の適正な管理とアクセス制御機能の有効性の検証を努力義務として課しています。個人情報の保護に関する法律では、第17条で利用目的をできる限り特定すること、第18条で本人の同意なく利用目的の達成に必要な範囲を超えて取り扱わないこと、第20条で偽りその他不正の手段による取得の禁止、第23条で安全管理措置、第24条で従業者の監督、第25条で委託先の監督、第26条で漏えい等が生じたときの個人情報保護委員会への報告と本人への通知、第27条で第三者提供の制限が定められています。サイバーセキュリティ基本法は第2条でサイバーセキュリティを定義し、第12条で政府にサイバーセキュリティ戦略の策定を義務付けています。マルウェアの作成や提供そのものは刑法第168条の2(不正指令電磁的記録作成等)で処罰されます。
/* 危ない書き方: 入力値を文字列連結でSQLに埋め込んでいる */ sql ← "SELECT id, name FROM users WHERE login_id = '" + in + "'" /* 安全な書き方: 骨組みを固定し、値はプレースホルダ経由で渡す */ SELECT id, name FROM users WHERE login_id = ? AND status = 1 /* in に SQL の文法らしき文字列が入っていても、単なる文字列として比較されるだけで */ /* 文の構造は変わらない。実際に sqlite3 で試すと該当行なしになる */
| 装置 | 主に見るもの | 止められる例 | 止められない例 |
|---|---|---|---|
| パケットフィルタリング型ファイアウォール | IPアドレス、ポート番号 | 許可していないポートへの接続 | 許可したポートを通る攻撃の中身 |
| ステートフルインスペクション型ファイアウォール | 接続の状態と対応関係 | 内部から出していない通信への偽の応答 | 正規のHTTP要求に見せかけた攻撃 |
| IDS | 通信のパターンとふるまい | 検知して警報を出す | 通信そのものの遮断は行わない |
| IPS | 通信のパターンとふるまい | 不審な通信の遮断 | 暗号化されて中身が見えない通信 |
| WAF | HTTPの要求と応答の中身 | SQLインジェクション、XSSの試み | ネットワーク層の帯域を埋める攻撃 |
- ファイアウォール
- 主にIPアドレスとポート番号で通信の可否を判断する機器。ステートフルインスペクション型は接続の状態を覚えて応答パケットかどうかを判断できる。
- IDSとIPS
- IDSは不審な通信を検知して知らせる装置、IPSは検知に加えて遮断まで行う装置。誤検知があると正常な通信も止まる点がIPSの運用上の注意点。
- WAF
- HTTPの中身を解釈し、Webアプリケーションを狙う攻撃を防ぐ機器やサービス。ファイアウォールでは止められない層の攻撃に対応する。
- DMZ
- 外部に公開するサーバを、内部ネットワークと外部の間の別区画に置く構成。公開サーバが侵害されても内部へ直接到達させない。
- ゼロトラスト
- 社内だから安全という前提を置かず、すべてのアクセスを毎回検証し、最小権限を与え、常時監視する考え方。境界が曖昧な環境に合わせた設計指針。
- EDR
- 端末上のふるまいを記録し、侵入後の不審な動きを検知して調査と封じ込めを支援する仕組み。既知の特徴に頼らない点が従来型と異なる。
- SIEM
- 各種機器のログを1か所に集めて相関分析し、単体では見えない攻撃の兆候を検出する仕組み。
- セキュアプログラミング
- 外部から来た値を必ず検証し、別の文法へ渡すときはその作法で正しく扱い、失敗時は安全側へ倒すという実装上の原則。
- CVE
- 個別の脆弱性に付けられる共通の識別番号。組織をまたいで同じ問題を指せるようにする。
- CWE
- 脆弱性の種類の分類。入力検証の不備、境界外書込みといった弱点の型を表し、再発防止の議論に使う。
- CVSS
- 脆弱性の深刻度を0.0から10.0の数値で表す共通の枠組み。基本評価基準・現状評価基準・環境評価基準からなる。
- ISMS認証
- 情報セキュリティマネジメントシステムが規格に適合していることを第三者が認証する制度。規格はJIS Q 27001、管理策の手引はJIS Q 27002。
- CSIRT
- インシデントの受付、影響範囲の判断、封じ込め、復旧、外部連絡、再発防止までを担う組織内の専門チーム。
- SOC
- ログや通信を常時監視して脅威を検知することに専念する組織。検知後の判断と対応の主体はCSIRTであり、役割が異なる。
- インシデント対応の流れ
- 準備、検知と分析、封じ込め・根絶・復旧、事後活動という順序。連絡体制と判断基準を平時に決めておく準備の段階が最も効く。
- RTOとRPO
- RTOは目標復旧時間で、いつまでに復旧するかの目標。RPOは目標復旧時点で、どの時点のデータまで戻せればよいかの目標。
- 不正アクセス禁止法
- 第3条で不正アクセス行為を禁止し、第4条で不正取得、第5条で助長行為、第6条で不正保管、第7条でなりすましによる識別符号の入力要求を禁じている。
- 個人情報保護法の安全管理措置
- 同法第23条が、取り扱う個人データの漏えい・滅失・毀損の防止その他の安全管理のために必要かつ適切な措置を講じることを義務付けている。
- 漏えい等の報告
- 個人情報保護法第26条により、一定の事態が生じたときは個人情報保護委員会への報告と本人への通知が義務付けられている。
- サイバーセキュリティ基本法
- 第2条でサイバーセキュリティを定義し、第12条で政府にサイバーセキュリティ戦略の策定を義務付ける法律。基本理念と各主体の責務を定める。
- 不正指令電磁的記録に関する罪
- 刑法第168条の2。正当な理由なく、人の電子計算機で実行させる目的でマルウェアを作成・提供する行為などを処罰する規定。
例題 自社のサーバから見慣れない外部あてに大量の通信が出ている、という警報が監視から上がった。CSIRTの初動として、まず行うべきことは何か。
事実の確認と影響範囲の把握を先に行い、そのうえで封じ込めの方法を決めることである。警報だけで機器を止めると、誤検知だった場合に業務を無用に止め、正しかった場合でも証拠となる情報を失うことがある。まず、その通信がいつから、どの端末で、どの権限で発生しているかをログから確かめ、影響しうる資産と業務を洗い出す。そのうえで、ネットワークからの隔離か、通信先の遮断か、稼働を続けたまま監視するかを、業務への影響と証拠保全の両面から判断する。この判断を短時間で下せるかどうかは、平時の準備、すなわち連絡体制と判断基準、権限をあらかじめ決めてあるかで決まる。
例題 脆弱性情報を集めたところ、CVSSの基本値が9.1のものと6.5のものが見つかった。9.1のほうは社内だけで使う閉じたシステム、6.5のほうはインターネットに公開しているサーバだった。どちらから対応すべきか。
一律には決まらないが、この状況なら6.5のほうを先に検討する余地が大きい。CVSSの基本値は脆弱性そのものの性質だけを表す指標で、自組織での重要度や露出の度合いは環境評価基準の側で加味する。インターネットから到達できる資産は攻撃の機会が桁違いに多く、攻撃コードが出回っていればなおさら急ぐ。逆に、閉じた環境で到達経路が限られているなら、基本値が高くても回避策で当面しのげることがある。数値の大小だけで機械的に順番を決めない、というのが実務の勘どころである。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類3:技術要素 中分類11:セキュリティ/不正アクセス行為の禁止等に関する法律 第3条・第4条・第5条・第6条・第7条・第8条/個人情報の保護に関する法律 第17条・第18条・第20条・第23条・第24条・第25条・第26条・第27条/サイバーセキュリティ基本法 第2条・第12条/刑法 第168条の2
開発技術
開発プロセスと要件定義
どの進め方をいつ選ぶか、そして「作るものを決める工程」で何をするかが分かります。
ソフトウェア開発の進め方には型があり、それぞれ得意な状況が違います。ウォーターフォールモデルは、要件定義、外部設計、内部設計、プログラミング、テスト、運用という工程を順に進め、前の工程が終わってから次に進みます。工程ごとに成果物と承認があるので進捗が管理しやすく、大人数でも分担しやすい反面、後工程で要件の誤りが見つかると手戻りが大きくなります。だから、要件が安定していて、法令や取引先との取決めで作るものがはっきり決まっている案件に向きます。
要件が固まりきらない案件には別の型が要ります。プロトタイピングモデルは、早い段階で試作品を見せて認識のずれを潰す方法です。スパイラルモデルは、システムをいくつかの部分に分け、各部分について設計・実装・評価を繰り返しながら、リスクの大きいところから片付けていく方法です。段階的に動くものを増やしていくインクリメンタル開発、機能を少しずつ育てるエボリューショナル開発なども、いずれも「一度で全部決めない」ことで手戻りの被害を小さくしようとしています。応用情報では、案件の性質を示す文章を読んで、どのモデルが適切かを選ばせる形で問われます。
アジャイル開発は、短い期間の反復で動くソフトウェアを作り続け、変化に対応することを重んじる考え方の総称です。代表的な枠組みがスクラムで、プロダクトオーナー、スクラムマスター、開発者という役割と、スプリント計画、デイリースクラム、スプリントレビュー、レトロスペクティブという場、プロダクトバックログ、スプリントバックログ、インクリメントという成果物で構成されます。プロダクトオーナーは何を作るかの優先順位に責任をもち、スクラムマスターは進め方を支える役で、指示を出す管理者ではありません。ここを取り違える設問がよく出ます。エクストリームプログラミング(XP)はより実装寄りの技法群で、ペアプログラミング、テスト駆動開発、継続的インテグレーション、リファクタリング、小さなリリースなどを掲げます。
見積もりと進捗の見方もウォーターフォールとは異なります。アジャイルでは、作業量を絶対時間ではなく相対的な大きさ(ストーリポイント)で表し、1回の反復でこなせた合計をベロシティとして記録して、次回以降の予測に使います。残作業の推移を描いた図がバーンダウンチャートです。また、機能を減らせても納期と品質は動かしたくない、というように、スコープを調整弁にする点も特徴です。逆に、契約で機能一式と納期が同時に固定されている案件では、アジャイルの利点が出にくくなります。
DevOpsは、開発と運用が対立せずに協働し、変更を素早く安全に本番へ届けることを目指す文化と実践です。これを支える技術がCI/CDです。継続的インテグレーション(CI)は、変更を1日に何度も共通のリポジトリへ統合し、そのたびに自動でビルドとテストを走らせて、壊れたことをすぐ知る仕組みです。継続的デリバリは、そこからいつでもリリースできる状態を常に保つこと、継続的デプロイメントは、検査に通った変更を自動で本番へ反映することを指します。あわせて、サーバの構成をコードで定義して再現可能にするInfrastructure as Codeや、コンテナによる環境の統一が使われます。狙いは、1回のリリースを大きくしないことで失敗の影響を小さくし、切り戻しを容易にすることにあります。
工程の共通の言葉としては、共通フレームが用意されています。企画、要件定義、開発、運用、保守といった作業を、発注側と受注側が同じ言葉で語れるようにするための枠組みで、「何をどこまでやるか」の取り違えを防ぐことが目的です。何をどう作るかまで規定するものではない点に注意します。
作るものを決める工程が要求分析と要件定義です。まず現状の業務と課題を把握し、利害関係者から要求を引き出します。引出しの技法には、インタビュー、アンケート、観察、ワークショップ、既存資料の分析、プロトタイプへの反応の観察などがあります。集めた要求は整理して、実現する範囲を決めます。要件は、業務要件(業務としてどうなっていたいか)、機能要件(システムが何をするか)、非機能要件(どのくらいの品質で提供するか)に分けます。非機能要件には、可用性、性能・拡張性、運用・保守性、移行性、セキュリティ、システム環境などの区分があり、IPAの非機能要求グレードが整理の手掛かりになります。
要件定義の成否を分けるのは、要求の質を確かめる作業です。よい要件は、検証可能であること(何をもって満たしたと言えるかが書いてある)、一意であること(読む人によって解釈が変わらない)、実現可能であること、そして要求元までたどれること(トレーサビリティ)を満たします。「使いやすいこと」「高速であること」のような書き方は検証できないので、応答時間や操作手順数のように測れる形に直します。また、要件は途中で必ず変わるので、変更を受け付ける手続と、変更が及ぼす影響の評価方法を最初に決めておくことが、後の混乱を防ぎます。
| モデル | 向いている案件 | 弱点 |
|---|---|---|
| ウォーターフォール | 要件が安定し、成果物と承認を明確にしたい大規模案件 | 後工程で要件の誤りが判明したときの手戻りが大きい |
| プロトタイピング | 画面や操作感の合意が難しく、言葉では詰めきれない案件 | 試作品が完成品と誤解されやすく、作り捨ての工数がかかる |
| スパイラル | 技術的なリスクが高く、早く見極めたい案件 | 反復の管理が複雑になり、終わりが見えにくくなりやすい |
| アジャイル(スクラム) | 要件の変化が前提で、利用者と密に関われる案件 | 機能一式と納期が同時に固定された契約とは相性が悪い |
- ウォーターフォールモデル
- 工程を順に進め、前工程の完了を承認してから次へ進む開発モデル。進捗管理と分担がしやすい反面、後工程での手戻りが大きい。
- プロトタイピングモデル
- 早い段階で試作品を作って利用者に見せ、認識のずれを解消してから作り込む開発モデル。要件が固まりにくい案件に向く。
- スパイラルモデル
- システムを部分に分け、各部分で設計・実装・評価を繰り返しながら、リスクの大きいところから解決していく開発モデル。
- アジャイル開発
- 短い反復で動くソフトウェアを作り続け、変化への対応を重んじる開発の考え方の総称。スクラムやXPが代表的な実践。
- スクラム
- プロダクトオーナー、スクラムマスター、開発者の役割と、スプリントを軸とした場と成果物で構成されるアジャイルの枠組み。
- プロダクトオーナー
- 何を作るかの優先順位に責任をもつ役割。プロダクトバックログの並び順を決める権限をもつ。
- スクラムマスター
- 進め方が機能するよう支援し、障害を取り除く役割。開発者に作業を割り当てる管理者ではない。
- スプリント
- スクラムにおける固定長の反復期間。期間中に完成の定義を満たすインクリメントを作る。期間の途中で目標を差し替えない。
- ストーリポイントとベロシティ
- 作業量を相対的な大きさで表した値と、1回の反復で完了できた合計値。実績から次回の予測を立てるために使う。
- バーンダウンチャート
- 残作業量の推移を時間軸に沿って描いた図。予定線との差から遅れや前倒しを早く見つけられる。
- エクストリームプログラミング
- ペアプログラミング、テスト駆動開発、継続的インテグレーション、リファクタリング、小さなリリースなどを掲げる実装寄りのアジャイル技法群。
- DevOps
- 開発と運用が協働し、変更を素早く安全に本番へ届けることを目指す文化と実践。自動化と計測、責任の共有を柱とする。
- 継続的インテグレーション
- 変更を頻繁に共通のリポジトリへ統合し、そのたびに自動でビルドとテストを実行して、壊れたことを早く知る仕組み。
- 継続的デリバリと継続的デプロイメント
- 前者はいつでもリリースできる状態を保つこと、後者は検査に通った変更を自動で本番へ反映すること。人の承認を挟むかどうかが違う。
- Infrastructure as Code
- サーバやネットワークの構成をコードで定義し、同じ環境を何度でも再現できるようにする手法。差異による障害を減らせる。
- 共通フレーム
- 企画から保守までの作業を、発注側と受注側が同じ言葉で語れるように整理した枠組み。作り方そのものを規定するものではない。
- 要求分析
- 現状の業務と課題を把握し、利害関係者から要求を引き出して整理する作業。インタビュー、観察、ワークショップなどの技法がある。
- 機能要件と非機能要件
- 機能要件はシステムが何をするか、非機能要件はどのくらいの品質で提供するか。可用性、性能、運用保守性、移行性、セキュリティなどが後者に含まれる。
- 非機能要求グレード
- 非機能要件の項目と水準を段階で示し、発注側と受注側で合意しやすくするために整理された手引。
- トレーサビリティ
- ある要件がどの要求から来て、どの設計・実装・テストに対応するかをたどれること。変更時の影響範囲の特定に効く。
例題 「新サービスの利用者向け画面を作りたいが、どんな機能が受け入れられるか自社でも読み切れていない。利用部門の担当者は週2回、開発チームと同席できる」という案件がある。適した進め方はどれか。
アジャイル開発、なかでもスクラムのような反復型が適する。作るものが読み切れていない以上、最初に全機能を確定させる前提のウォーターフォールでは、要件の誤りが後工程でまとめて表面化する。短い反復ごとに動くものを見せ、利用部門の反応を次の優先順位に反映できるほうが有利で、利用部門が定期的に同席できるという条件もこれを後押しする。逆に、
例題 非機能要件として「レスポンスが速いこと」と書かれていた。この記述の何が問題で、どう直せばよいか。
問題は検証可能でないことである。「速い」の水準が人によって異なるため、完成後に満たしたかどうかを誰も判定できず、受入れの場で争いになる。直すには、対象の処理、条件、測る位置、目標値、達成率を明示する。たとえば「同時利用者50人の状態で、月次の一覧表示の応答時間が3秒以内であることを、全要求の90パーセントについて満たす」といった形にする。同じ考え方は可用性(稼働率と計画停止の扱い)、移行性(切替えに許される時間)にも当てはまる。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類4:開発技術
設計とモジュールの良し悪し
構造化設計とオブジェクト指向の道具立てと、「よい分割」を測る物差しを身につけます。
設計は、外部設計と内部設計に分けて考えます。外部設計は利用者やほかのシステムから見える面を決める工程で、画面、帳票、外部インタフェース、コード体系、論理データ構造などを設計します。内部設計はそれを実現する内側を決める工程で、モジュールへの分割、モジュール間のインタフェース、物理データ構造、処理の詳細などを設計します。境目は「利用者に見えるかどうか」で、たとえば画面の項目配置は外部設計、その画面を作るモジュールの分け方は内部設計です。
構造化設計では、処理の流れとデータの流れに着目します。DFDはデータの流れ、処理、データストア、外部実体の四つの記号で業務やシステムを表す図で、データがどこから来てどこへ行くかを追えます。状態が意味をもつ対象には状態遷移図、データの意味と関連を整理するにはE-R図を使います。モジュールへの分割方針としては、データの流れの変換点で切るSTS分割、入力データの種類ごとに切るトランザクション分割、共通処理を切り出す共通機能分割などが知られています。
分割の良し悪しを測る物差しが結合度と凝集度です。結合度はモジュール間の結び付きの強さで、弱いほどよい設計です。弱い順に、データ結合(必要なデータ項目だけを引数で渡す)、スタンプ結合(データ構造全体を渡し、受け手は一部だけ使う)、制御結合(相手の動作を切り替える制御用の値を渡す)、外部結合(外部宣言した個々のデータを共有する)、共通結合(共通領域のデータを複数モジュールが参照する)、内容結合(相手の内部を直接参照したり飛び込んだりする)の順に強くなります。結合が強いほど、片方を直すともう片方も壊れやすくなります。
凝集度はモジュール内部のまとまりの良さで、強いほどよい設計です。弱い順に、暗合的凝集(関係のない処理を寄せ集めただけ)、論理的凝集(似た種類の処理をまとめ、引数で選ばせる)、時間的凝集(初期化処理のように同じ時期に実行するものをまとめる)、手順的凝集(順に実行する処理をまとめる)、連絡的凝集(同じデータを扱う処理を順にまとめる)、情報的凝集(同じデータ構造を扱う複数の入口をもつ)、機能的凝集(単一の機能だけを実現する)の順に強くなります。目指すのは「結合度は弱く、凝集度は強く」で、この二つは対の物差しとして覚えます。
オブジェクト指向設計は、データとそれを操作する手続きを一体にしたオブジェクトを単位に組み立てます。中心となる概念はカプセル化、継承、多相性(ポリモーフィズム)です。カプセル化は内部のデータを隠して公開した操作だけを通じて扱わせること、継承は共通の性質を上位のクラスにまとめて下位が引き継ぐこと、多相性は同じ呼び出しに対してオブジェクトの種類ごとに異なる動作を返せることです。多相性があると、種類が増えても呼び出す側を書き換えずに済みます。関連する概念に、実装をもたない操作だけを定めた抽象クラスやインタフェース、クラスの集約と合成、そして継承よりも委譲を優先するという設計上の指針があります。
モデルを表す標準の記法がUMLです。構造を表す図にはクラス図、オブジェクト図、コンポーネント図、配置図があり、ふるまいを表す図にはユースケース図、シーケンス図、コミュニケーション図、アクティビティ図、状態マシン図があります。どの図が何を表すかは頻出です。クラス図はクラスと属性、操作、関連、多重度を表し、シーケンス図はオブジェクト間のメッセージのやり取りを時間軸に沿って表し、ユースケース図は利用者から見た機能のまとまりと利用者との関係を表します。アクティビティ図は処理や業務の流れ、状態マシン図は一つの対象がとる状態と遷移の条件を表します。
設計の定石を名前付きで共有したものがデザインパターンです。生成に関するもの、構造に関するもの、ふるまいに関するものに大別されます。よく問われるのは、インスタンスを一つに限るSingleton、生成するクラスの決定を下位に委ねるFactory Method、状態の変化を登録された相手へ知らせるObserver、既存のインタフェースを別の形に合わせるAdapter、アルゴリズムを差し替え可能にするStrategy、対象を包んで機能を足すDecoratorあたりです。パターンは目的があってこそ意味があるので、当てはめること自体が目的にならないように注意します。
設計を評価するときの一般的な指針もあります。単一責任の原則は、一つのモジュールが変更される理由は一つであるべきだという考え方です。開放閉鎖の原則は、機能追加に対しては開いていて、既存コードの修正に対しては閉じている構造を目指すという考え方で、多相性やインタフェースの活用で実現します。関心の分離、疎結合と高凝集、そして重複を作らないことは、構造化設計でもオブジェクト指向設計でも共通して効く指針です。
クラス図の読み方(属性・操作・関連の多重度)
+-----------------+ +-----------------+
| 注文 | | 注文明細 |
+-----------------+ 1 0..* +-----------------+
| -注文番号 | ----------- | -行番号 |
| -注文日 | | -数量 |
+-----------------+ +-----------------+
| +合計を求める() | | +小計を求める() |
+-----------------+ +-----------------+
| 0..*
|
| 1
+-----------+
| 商品 |
+-----------+
| -商品番号 |
| -単価 |
+-----------+
/* 端の数字は多重度。1つの注文に明細が0本以上、
1つの明細が指す商品はちょうど1つ、と読む */
| 望ましさ | 結合度(弱いほどよい) | 凝集度(強いほどよい) |
|---|---|---|
| 最もよい | データ結合 | 機能的凝集 |
| よい | スタンプ結合 | 情報的凝集 |
| ふつう | 制御結合 | 連絡的凝集 |
| やや悪い | 外部結合 | 手順的凝集 |
| 悪い | 共通結合 | 時間的凝集 |
| 最も悪い | 内容結合 | 論理的凝集、暗合的凝集 |
- 外部設計と内部設計
- 外部設計は画面、帳票、外部インタフェースなど利用者から見える面を決める工程。内部設計はモジュール分割や物理データ構造など内側を決める工程。
- DFD
- データの流れ、処理、データストア、外部実体の4記号で業務やシステムを表す図。データがどこから来てどこへ行くかを追える。
- STS分割
- 処理を入力(源泉)、変換、出力(吸収)の3つに分け、データの流れの変換点でモジュールを切る分割技法。
- 結合度
- モジュール間の結び付きの強さ。弱いほどよい。弱い順にデータ結合、スタンプ結合、制御結合、外部結合、共通結合、内容結合。
- データ結合
- 必要なデータ項目だけを引数として受け渡す、最も弱い結合。相手の内部構造に依存しないので変更に強い。
- 制御結合
- 相手の動作を切り替えるための制御用の値を渡す結合。呼ぶ側が相手の内部の処理分岐を知っている状態になるため、結合が強い。
- 共通結合
- 共通領域に置いたデータを複数のモジュールが参照・更新する結合。誰がいつ書き換えたかを追いにくく、影響範囲が広がる。
- 内容結合
- 相手の内部データを直接参照したり、途中へ飛び込んだりする最も強い結合。片方の変更がそのまま相手を壊す。
- 凝集度
- モジュール内部のまとまりの良さ。強いほどよい。弱い順に暗合的、論理的、時間的、手順的、連絡的、情報的、機能的。
- 論理的凝集
- 似た種類の処理をひとまとめにし、引数で実行する処理を選ばせる弱い凝集。分岐が増え、呼ぶ側との結合も強くなりやすい。
- 機能的凝集
- 単一の機能だけを実現している最も強い凝集。再利用しやすく、変更の影響も閉じ込めやすい。
- カプセル化
- 内部のデータを隠し、公開した操作を通じてのみ扱わせること。内部の作りを変えても利用側に影響が及ばない。
- 多相性
- 同じ呼び出しに対して、オブジェクトの種類ごとに異なる動作が実行される性質。種類が増えても呼ぶ側を変えずに済む。
- クラス図
- クラスとその属性・操作、クラス間の関連や多重度、継承関係を表すUMLの構造図。
- シーケンス図
- オブジェクト間でやり取りされるメッセージを、時間の流れに沿って表すUMLのふるまい図。
- ユースケース図
- 利用者(アクタ)から見た機能のまとまりと、その利用関係を表すUMLの図。システムの範囲を合意するのに使う。
- 状態マシン図
- 一つの対象がとりうる状態と、状態を移す事象や条件を表すUMLの図。状態が意味をもつ対象の設計に使う。
- Singleton
- そのクラスのインスタンスが一つしか存在しないことを保証する生成に関するデザインパターン。
- Observer
- 対象の状態が変わったときに、登録された相手へ自動的に通知するふるまいに関するデザインパターン。
- Strategy
- アルゴリズムを個別のクラスに切り出し、実行時に差し替えられるようにするふるまいに関するデザインパターン。
- 単一責任の原則
- 一つのモジュールが変更される理由は一つであるべきだという設計指針。責任が混ざると、片方の変更が他方を壊す。
- 開放閉鎖の原則
- 機能の追加に対しては開いており、既存コードの修正に対しては閉じている構造を目指す設計指針。多相性やインタフェースで実現する。
例題 あるモジュールが、呼出し側から渡された区分値によって「登録」「更新」「削除」のいずれかを内部で選んで実行している。結合度と凝集度の観点でどう評価できるか。
結合度は制御結合、凝集度は論理的凝集にあたり、どちらも望ましくない側である。呼出し側が相手の内部の分岐を知っていないと正しい区分値を渡せないので、相手の作りを変えると呼出し側も直すことになる。また、モジュールの中に関係の薄い三つの処理が同居しているので、片方の修正が他方を壊す危険がある。登録・更新・削除をそれぞれ独立したモジュールに分け、必要なデータ項目だけを引数で渡すデータ結合にすれば、結合度は弱く、凝集度は機能的凝集まで上げられる。
例題 ある顧客クラスが、顧客の属性の保持に加えて、請求書のPDFへの整形と、データベースへの保存処理まで抱えている。設計上どこが問題で、どう直すか。
一つのクラスが変更される理由を三つ抱えている点が問題で、単一責任の原則に反している。請求書の様式が変わっても、保存先のデータベース製品が変わっても、顧客の属性が増えても、同じクラスを直すことになるため、無関係な変更が互いに影響し合う。直すには、顧客の属性と業務上のふるまいを持つクラス、整形を担うクラス、保存を担うクラスに分ける。こうすると、それぞれのクラスの変更理由が一つになり、テストも独立して書けるようになる。関心の分離と高凝集は、オブジェクト指向でも構造化設計でも共通して効く指針である。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類4:開発技術
実装とテスト
「どこまでテストしたか」を数字で言えるようになり、品質の判断ができるようになります。
実装工程では、書き方をそろえるコーディング規約が土台になります。命名、字下げ、コメント、エラー処理の書き方、禁止する構文などを決めておくと、読みやすさが上がり、レビューでの指摘が本質的な内容に集中します。規約への適合や典型的な不具合の兆候は、プログラムを実行せずにソースコードを解析する静的解析ツールで機械的に調べられます。実際に動かして挙動を調べるのは動的解析で、両者は補い合う関係です。
人の目による確認がレビューです。作成者が説明して参加者が指摘するウォークスルー、あらかじめ役割と手順を定めて記録を残す公式なインスペクション、机上で他人のコードを読むデスクチェック、その場で相談しながら書くペアプログラミングなどがあります。レビューの効用は、テストより前の段階で欠陥を見つけられることにあります。欠陥は見つかるのが遅いほど修正費用が大きくなるため、上流での検出は費用対効果が高くなります。レビューの場では、欠陥を指摘することに集中し、人を責めないこと、その場で修正方法まで議論しすぎないことが実務上の要点です。
テストは、内部構造を見て設計するホワイトボックステストと、仕様だけを見て設計するブラックボックステストに大別されます。ホワイトボックステストの網羅基準には段階があります。命令網羅(C0)はすべての命令を少なくとも1回実行すること、判定条件網羅(分岐網羅、C1)はすべての判定の真と偽を少なくとも1回ずつ通ること、条件網羅(C2)は判定の中の個々の条件が真と偽を少なくとも1回ずつとること、複数条件網羅は個々の条件の真偽のすべての組合せを通ることです。強さは、命令網羅より分岐網羅、分岐網羅より複数条件網羅が強くなります。注意したいのは、条件網羅を満たしても判定条件網羅を満たすとは限らない点です。個々の条件の真偽はそろっていても、判定全体の結果が片方に偏ることがあるためです。
ブラックボックステストの基本技法は、同値分割と境界値分析です。同値分割は、入力の集合を「同じ結果になるはず」のグループに分け、各グループから代表値を1つ選ぶ方法です。有効な値のグループと、無効な値のグループを両方作るのが要点になります。境界値分析は、グループの境目の値とその隣の値を選ぶ方法です。境目の判定は不等号の向きや等号の有無を間違えやすく、欠陥が集中するので、少ないケース数で多くの欠陥を拾えます。ほかに、条件の組合せを表にする決定表、入力の順序や状態の遷移に着目する状態遷移テスト、複数の要因の組合せを効率よく網羅する直交表を使う技法などがあります。
テストの工程は段階を追って広がります。単体テストはモジュール単体の内部構造まで見て確かめ、結合テストはモジュール間のインタフェースを確かめます。結合の進め方には、上位から順に組んで下位の代わりにスタブを使うトップダウンテストと、下位から順に組んで上位の代わりにドライバを使うボトムアップテスト、両方から進めるサンドイッチテストがあります。システムテストは、機能だけでなく性能、負荷、セキュリティ、障害時のふるまいなど、システム全体の要件を確かめます。運用テストや受入テストは、発注側が実際の業務の流れで使えるかを確かめる段階です。あわせて、変更した箇所以外が壊れていないことを確かめる回帰テストが、修正のたびに要ります。回帰テストは繰り返し実行されるので、自動化の効果が最も大きい領域です。
品質の状態を数字で判断するための指標もあります。バグ密度は、検出した欠陥数を規模で割った値で、単位は1キロステップあたりの件数がよく使われます。テスト密度は、テストケース数を規模で割った値です。この二つを組み合わせると、テストが足りないのか、品質が高いのかを切り分けられます。たとえばバグ密度が想定より低いとき、品質が高いという解釈と、テストが十分に行われていないという解釈の両方がありえます。テスト密度も低ければ後者の疑いが濃くなり、テスト密度が十分なのにバグ密度が低いなら前者の可能性が高まる、という読み方をします。数字を1つだけ見て結論を出さないのが要点です。
テストの進み具合を見る図が信頼度成長曲線(ゴンペルツ曲線やロジスティック曲線)です。横軸にテストの経過(時間やテストケースの累計)、縦軸に累積の欠陥検出数をとると、初期はゆるやかに、中盤は急に、終盤は再びゆるやかになるS字を描きます。曲線が寝てきて新たな欠陥がほとんど出なくなったことが、テスト終了を判断する材料の一つになります。ただし、曲線が寝ているのは欠陥が出尽くしたからではなく、テストの内容が偏っていて同じ経路ばかり通っている場合もあるので、網羅率や未実施のテストケース数と合わせて判断します。
テストで見つけた欠陥は記録して管理します。発見日、発生条件、再現手順、原因、修正内容、確認結果を残すと、同じ原因の欠陥がどこに潜んでいるかを推測でき、再発防止の議論にもつながります。欠陥の原因を「作り込んだ工程」と「見つけた工程」の組合せで集計すると、どの工程の検証が弱いかが見えてきます。上流で作り込んだ欠陥が下流で見つかっているなら、レビューの強化が効く、という判断ができます。
○文字列型: 判定(整数型: score)
文字列型: rank
if (score ≧ 80)
rank ← "A"
elseif (score ≧ 60)
rank ← "B"
else
rank ← "C"
endif
return rank
/* 命令網羅も判定条件網羅も、最小3ケースで満たせる(例: 80、60、0)*/
/* 境界値分析で選ぶ値は 59、60、79、80 の4点 */
/* 境目のずれは探索にも現れる。while の条件を lo < hi と書くと、
候補が1個になった時点で抜けてしまい、その1個を調べ損ねる */
○整数型: 二分探索(整数型の配列: a, 整数型: 値)
整数型: lo ← 1
整数型: hi ← aの要素数
整数型: mid
while (lo ≦ hi)
mid ← (lo + hi) ÷ 2 の商
if (a[mid] = 値)
return mid
elseif (a[mid] < 値)
lo ← mid + 1
else
hi ← mid - 1
endif
endwhile
return -1 /* 見つからない */
| 工程 | 確かめること | 特徴的な道具・技法 |
|---|---|---|
| 単体テスト | モジュール単体が仕様どおり動くか | ホワイトボックステスト、網羅基準、静的解析 |
| 結合テスト | モジュール間のインタフェースが合っているか | スタブ、ドライバ、トップダウン・ボトムアップ |
| システムテスト | 性能、負荷、セキュリティ、障害時のふるまい | 負荷試験、障害注入、セキュリティ診断 |
| 運用テスト・受入テスト | 実際の業務の流れで使えるか | 業務シナリオ、本番相当データ |
| 回帰テスト | 変更した箇所以外が壊れていないか | テストの自動化、継続的インテグレーション |
- コーディング規約
- 命名、字下げ、コメント、エラー処理などの書き方をそろえる取決め。読みやすさが上がり、レビューが本質的な指摘に集中できる。
- 静的解析
- プログラムを実行せずにソースコードを解析し、規約違反や典型的な不具合の兆候を検出する手法。動的解析と補い合う。
- インスペクション
- あらかじめ役割と手順を定め、記録を残して行う公式なレビュー。検出した欠陥を集計し、工程の改善につなげられる。
- 命令網羅(C0)
- すべての命令を少なくとも1回実行するホワイトボックステストの網羅基準。最も弱い基準で、判定の偽の側を通らないことがある。
- 判定条件網羅(C1)
- すべての判定について、真になる場合と偽になる場合を少なくとも1回ずつ通す基準。分岐網羅ともいう。
- 条件網羅(C2)
- 判定の中の個々の条件が、真と偽を少なくとも1回ずつとるようにする基準。判定全体の結果が偏り、分岐網羅を満たさないことがある。
- 複数条件網羅
- 判定の中の個々の条件の真偽について、すべての組合せを通す最も強い基準。条件が増えるとケース数が急増する。
- 同値分割
- 入力を同じ結果になるはずのグループに分け、各グループから代表値を1つ選ぶ技法。有効なグループと無効なグループの両方を作る。
- 境界値分析
- グループの境目の値とその隣の値を選ぶ技法。不等号の向きや等号の有無の誤りが集中するため、少ないケースで多くの欠陥を拾える。
- 決定表
- 条件の組合せと、それに対する動作を表形式で整理したもの。条件が複数絡む仕様の抜け漏れを見つけやすい。
- スタブとドライバ
- 結合テストで使う仮のモジュール。スタブは呼ばれる側の代わり(トップダウンで使う)、ドライバは呼ぶ側の代わり(ボトムアップで使う)。
- 回帰テスト
- 変更した箇所以外が壊れていないことを確かめるテスト。修正のたびに繰り返すため、自動化の効果が最も大きい。
- バグ密度
- 検出した欠陥数を規模で割った値。1キロステップあたりの件数で表すことが多い。単独では品質の高低を判断できない。
- テスト密度
- テストケース数を規模で割った値。バグ密度と組み合わせて、テスト不足なのか品質が高いのかを切り分ける。
- 信頼度成長曲線
- テストの経過に対する累積欠陥検出数を描いたS字の曲線。ゴンペルツ曲線やロジスティック曲線が使われ、終了判断の材料になる。
- システムテスト
- 機能に加えて性能、負荷、セキュリティ、障害時のふるまいなど、システム全体の要件を確かめる工程。
- 受入テスト
- 発注側が、実際の業務の流れでシステムが使えるかを確かめる工程。合格をもって検収に進む。
- 欠陥の作り込み工程と検出工程
- 欠陥をこの2つの組合せで集計すると、どの工程の検証が弱いかが見える。上流で作り込み下流で検出されているならレビューの強化が効く。
例題 上の擬似言語のプログラムについて、命令網羅と判定条件網羅を満たす最小のテストケース数はそれぞれいくつか。また境界値分析ではどの値を選ぶか。
命令網羅は3ケース、判定条件網羅も3ケースである。rankへの代入は3か所あり、それぞれ別の経路でしか実行されないので、命令をすべて通すには3ケースが要る。そしてこの3ケースを通せば、2つの判定それぞれについて真と偽の両方を通っているので、判定条件網羅も同時に満たされる。境界値分析では、区分の境目が60と80なので、59、60、79、80の4点を選ぶ。80以上と60以上という判定は、不等号に等号を含めるかどうかを間違えやすいところで、まさに境界値が効く。
例題 「x が 5 以上、かつ y が 3 以下」という判定について、テストケースを(x が5、y が10)と(x が1、y が3)の2件だけ用意した。条件網羅と判定条件網羅のどちらを満たしているか。
条件網羅は満たすが、判定条件網羅は満たさない。1件目では「x が5以上」が真、「y が3以下」が偽、2件目では「x が5以上」が偽、「y が3以下」が真となり、個々の条件はどちらも真と偽の両方をとっている。ところが、かつ(論理積)で結んだ判定全体の結果は、1件目も2件目も偽である。判定が真になる場合を1度も通っていないので、分岐網羅は満たしていない。条件網羅は判定条件網羅を包含しない、という定番の注意点がここに表れている。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類4:開発技術
見積もり・構成管理・保守と品質
工数をどう見積もり、変更をどう管理し、品質をどんな観点で語るかを整理します。
見積もりの方法は大きく三系統です。類推見積法は、過去の似た案件の実績を土台に、規模や難易度の差を補正して見積もる方法で、手早くできる反面、似た実績がないと精度が落ちます。ボトムアップ見積法(積上げ法、標準タスク法)は、作業を細かく分解して各作業の工数を積み上げる方法で、精度は高いものの、作業を分解できる程度まで内容が固まっていないと使えません。パラメトリック見積法は、規模などの数値から統計的な式で工数を算出する方法で、ファンクションポイント法やCOCOMOが該当します。ほかに、複数の専門家の見積もりを匿名で集めて収束させるデルファイ法があります。工程の初期は類推やパラメトリック、内容が固まってきたらボトムアップ、と使い分けるのが定石です。
ファンクションポイント法は、利用者から見た機能の数と複雑さから規模を測る方法です。数えるのは、システムが内部で保持するデータの集まり(内部論理ファイル)、外部から参照するデータの集まり(外部インタフェースファイル)、外部からの入力(外部入力)、外部への出力(外部出力)、外部からの照会(外部照会)の五種類です。それぞれの件数に複雑さに応じた重みを掛けて合計したものが未調整ファンクションポイントで、ここにシステム特性による補正係数を掛けて調整済みの値を得ます。この方法の利点は、プログラム言語や実装方法に依存せず、利用者と会話できる単位で規模を語れることです。逆に、内部の処理が重いだけで画面や帳票が少ないシステムでは実態より小さく出ることがあります。
COCOMOは、規模(キロステップ)から工数を推定する式を用いる方法です。工数は規模の1より大きいべき乗に比例する形になっていて、規模が2倍になると工数は2倍より大きくなります。たとえば指数が1.05なら、規模2倍で工数は約2.07倍です。これは、規模が大きくなるほど連絡や調整の手間が増えることを表しています。同じ理由で、遅れているプロジェクトに人を追加するとかえって遅くなる、というブルックスの法則が知られています。工数と期間は独立ではなく、要員を増やして期間を無理に縮めようとすると、追加の伝達コストが効いて破綻しやすくなります。
見積もりで押さえたいのは、工数と期間の区別です。工数は延べの作業量(人月、人日)で、期間は暦の上での長さです。10人月の作業を1か月で終わらせるには10人が同時に動ける前提が要りますが、作業には順序の制約があるので、単純に割り算はできません。また、見積もりには前提条件が必ず付きます。要件の確定時期、利用できる要員の技能、既存システムの資料の有無などを明記しないと、後で「そんな話は聞いていない」となります。
変更を管理する仕組みが構成管理です。何を管理対象とするか(構成品目の識別)、変更をどう申請し承認するか(変更管理)、いまどの版が正なのかをどう記録するか(構成状況の記録)、実物と記録が一致しているか(構成監査)という要素からなります。管理対象はソースコードだけでなく、設計書、テスト仕様書、環境の設定、依存するライブラリの版も含みます。リリースした版と、その版に含まれる構成品目の対応が記録されていないと、障害が起きたときに何が動いているのかが分からなくなります。
バージョン管理システムは構成管理を支える道具です。変更の履歴を記録し、誰がいつ何を変えたかを追え、任意の時点へ戻せます。複数人での同時作業は、ブランチを切って独立に進め、完了したら本流へ統合する形で扱います。統合の際に同じ箇所を別々に変更していると競合が起き、人が判断して解決します。ブランチを長く放置するほど競合は大きくなるので、こまめに統合するのが継続的インテグレーションの発想です。タグを打ってリリース時点を記録しておくと、後から正確にその版を再現できます。
本番化の前後で必要になるのが移行と保守です。移行では、データの移し替え、並行稼働の期間、切戻しの判断基準と手順、利用者への周知を計画します。切替え方式には、いっせいに切り替える一斉移行、部門や機能ごとに段階的に移す段階移行、新旧を一定期間並べて動かす並行運用があり、リスクとコストの兼ね合いで選びます。保守は、障害を直す是正保守、障害になる前に予兆に手を打つ予防保守、環境の変化に合わせる適応保守、性能や保守性を高める完全化保守に分類されます。是正保守だけが保守ではない、という点が問われます。
品質を語る共通の言葉がソフトウェア品質特性です。ISO/IEC 25010:2011では、機能適合性、性能効率性、互換性、使用性、信頼性、セキュリティ、保守性、移植性といった特性が定められ、それぞれが副特性に分かれます。要件定義でこの一覧を手掛かりにすると、抜け落ちがちな観点に気付けます。あわせて、ソフトウェアの再利用も品質と生産性の両面に効きます。共通部品化、ライブラリやフレームワークの活用、コード生成、そして既存システムを解析して仕様を取り出すリバースエンジニアリング、取り出した仕様から作り直すフォワードエンジニアリングといった手法があります。再利用は、部品の品質と説明書、そして版の管理が伴って初めて効果が出ます。
| 技法 | 使える時期 | 強み | 弱み |
|---|---|---|---|
| 類推見積法 | 企画から要件定義の初期 | 短時間で概算が出せる | 似た実績がないと精度が落ちる |
| ファンクションポイント法 | 要件が機能単位で見えてきた時期 | 言語に依存せず利用者と会話できる | 内部処理が重いシステムでは小さく出やすい |
| COCOMO | 規模をキロステップで見積もれる時期 | 規模と工数の非線形な関係を扱える | 規模の見積もりそのものに精度が要る |
| ボトムアップ見積法 | 作業を分解できる程度に固まった時期 | 精度が高く、担当者の納得も得やすい | 分解に手間がかかり、初期には使えない |
- 類推見積法
- 過去の似た案件の実績を土台に、規模や難易度の差を補正して見積もる方法。手早いが、似た実績がないと精度が落ちる。
- ボトムアップ見積法
- 作業を細かく分解し、各作業の工数を積み上げる方法。標準タスク法ともいう。精度は高いが、作業を分解できるまで内容が固まっている必要がある。
- パラメトリック見積法
- 規模などの数値から統計的な式で工数を算出する方法。ファンクションポイント法やCOCOMOが該当する。
- デルファイ法
- 複数の専門家の見積もりを匿名で集め、結果を共有して繰り返すことで収束させる方法。声の大きさに引きずられにくい。
- ファンクションポイント法
- 内部論理ファイル、外部インタフェースファイル、外部入力、外部出力、外部照会の件数に重みを掛けて規模を測る方法。言語に依存しない。
- 未調整ファンクションポイント
- 各機能の件数に複雑さに応じた重みを掛けて合計した値。ここにシステム特性による補正係数を掛けて調整済みの値を得る。
- COCOMO
- 規模から工数を推定する式を用いる見積技法。工数は規模の1より大きいべき乗に比例し、規模が2倍になると工数は2倍より大きくなる。
- ブルックスの法則
- 遅れているプロジェクトに人を追加すると、伝達と教育の手間が増えてさらに遅れるという経験則。
- 工数と期間
- 工数は延べの作業量(人月、人日)、期間は暦の上での長さ。作業には順序の制約があるため、工数を人数で割っても期間にはならない。
- 構成管理
- 構成品目の識別、変更管理、構成状況の記録、構成監査からなる仕組み。ソースコードだけでなく設計書や環境設定、依存ライブラリの版も対象になる。
- 構成監査
- 記録されている構成と実物が一致しているかを確かめる活動。記録だけが更新されて実物が違う、という食い違いを見つける。
- ブランチとマージ
- 本流から分岐して独立に作業し、完了後に本流へ統合する仕組み。放置するほど競合が大きくなるため、こまめな統合が望ましい。
- 一斉移行・段階移行・並行運用
- 新システムへの切替え方式。順に、いっせいに切り替える、部門や機能ごとに移す、新旧を一定期間並べて動かす。リスクとコストの兼ね合いで選ぶ。
- 是正保守
- 発生した障害を取り除く保守。発見された欠陥への対応にあたる。
- 予防保守
- 障害として現れる前に、潜在的な欠陥や劣化の予兆に手を打つ保守。
- 適応保守
- OSの更新、法令の改正、業務の変更といった環境の変化にソフトウェアを合わせる保守。
- 完全化保守
- 性能、保守性、使いやすさなどを高めるための保守。障害への対応ではなく、よりよくするための変更である。
- ソフトウェア品質特性
- ISO/IEC 25010:2011が定める、機能適合性、性能効率性、互換性、使用性、信頼性、セキュリティ、保守性、移植性などの観点。要件の抜け漏れを防ぐ手掛かりになる。
- リバースエンジニアリング
- 既存のソフトウェアを解析して、設計や仕様を取り出す手法。資料が失われた既存システムの刷新で使われる。
- リエンジニアリング
- 既存システムを解析して仕様を取り出し、それをもとに新しい技術で作り直す取組み全体。リバースエンジニアリングとフォワードエンジニアリングを合わせたもの。
- フォワードエンジニアリング
- リバースエンジニアリングで取り出した仕様をもとに、新しいソフトウェアを作成する手法。
例題 内部論理ファイルが2件、外部インタフェースファイルが1件、外部入力が5件、外部出力が3件、外部照会が4件と数えられた。重みをそれぞれ10、7、4、5、4とするとき、未調整ファンクションポイントはいくつか。
件数と重みを掛けて足し合わせる。2×10で20、1×7で7、5×4で20、3×5で15、4×4で16となり、合計は78である。ここでよくある誤りが、外部インタフェースファイルを数え忘れて71としてしまうこと、そして件数をそのまま足して15としてしまうことである。実際にはこの後、システム特性による補正係数を掛けて調整済みの値を求める。補正係数は0.65に影響度の合計の1パーセント分を足す形で計算されるので、影響度の合計が35なら係数は1.00、45なら1.10になる。
例題 あるチームの過去の実績では、ソフトウェア規模が2倍になると工数はおよそ2.07倍になっていた。この関係が意味することは何か。
工数が規模に単純比例せず、規模の1より大きいべき乗に比例していることを意味する。指数を1.05とすると、2の1.05乗が約2.07になり実績と合う。規模が大きくなるほど、要員間の連絡、仕様のすり合わせ、統合作業といった調整の手間が増えるためで、COCOMOの式もこの形をとる。ここから導かれる実務上の判断が二つある。一つは、大きな案件を分割できるなら分割したほうが総工数は小さくなりうること。もう一つは、遅れを人員追加で取り戻そうとすると伝達コストが増えてかえって遅れる、というブルックスの法則である。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類4:開発技術
マネジメントと監査
プロジェクトマネジメントの型とスコープ
プロジェクトを立ち上げてから閉じるまでに何を決めるのか、そのうちスコープ・資源・リスク・品質・調達・ステークホルダをどう扱うのかが分かります。
プロジェクトとは、決められた期間の中で、これまでにない成果物やサービスを作り出すために行う活動です。有期性(始まりと終わりがある)と独自性(毎回どこか違う)の二つを持つ点で、同じ手順を毎日回し続ける定常業務と区別されます。応用情報のレベルでは「用語を知っているか」ではなく「この状況でマネージャは何を根拠にどう判断するか」が問われます。判断の物差しになるのが、目的・成果物・体制・制約・前提を書いてプロジェクトを正式に発足させるプロジェクト憲章です。憲章はプロジェクトマネージャの権限の裏づけでもあるので、憲章に書かれていない要求が持ち込まれたときは、まず憲章と計画に照らして扱いを決めます。
国際的な進め方の枠組みとしてはPMBOKガイドとJIS Q 21500があります。JIS Q 21500では、活動を立上げ・計画・実行・管理・終結という五つのプロセス群に分け、管理する側面を統合・ステークホルダ・スコープ・資源・時間・コスト・リスク・品質・調達・コミュニケーションの十の対象群に整理します。PMBOKガイドは第7版で、決まった工程を順に踏む記述から、価値を届けるための原理原則とパフォーマンス領域を軸にした記述へと重心を移し、その方向は第8版にも引き継がれています。どちらにしても大事なのは、十の側面が独立ではなく互いに縛り合うという点です。スコープを広げれば時間とコストが増え、期間を縮めれば品質かコストのどちらかが犠牲になります。この綱引き(制約条件のトレードオフ)を明示して合意することが、マネジメントの中身そのものです。
スコープには、成果物の範囲を示すプロダクトスコープと、それを作るために必要な作業の範囲を示すプロジェクトスコープがあります。要求事項を集めてスコープを定義したら、成果物と作業を大きいものから小さいものへ階層的に分解します。これがWBS(Work Breakdown Structure)で、分解の最小単位をワークパッケージといいます。ここまで細かくして初めて、工数・期間・担当者・完了条件を具体的に決められます。各ワークパッケージの作業内容・成果物・受入基準を記した文書がWBS辞書です。「WBSにない作業はやらない」と決めておくことで、正式な変更手続を経ないまま範囲がじりじり膨らむスコープクリープを防げます。逆に必要な変更まで拒むのは誤りで、変更要求は変更管理委員会(CCB)で影響を評価し、承認されたらベースラインを改訂したうえで実施します。
資源のマネジメントでは、WBSの作業と組織の役割を対応づけた責任分担マトリックス(RAM)を作ります。実行責任・説明責任・相談先・報告先の4区分を割り当てる書き方をRACIチャートといい、1作業に説明責任者を1人だけ置くのが原則です。要員が特定の時期に集中しないよう、必要工数を時間軸に積み上げてから平準化する作業を山積み・山崩しといいます。なお、工数の単位である人月は、10人月を「10人で1か月」と読み替えられるとは限りません。遅れているプロジェクトへの要員追加は、教育と意思疎通の負担を増やしてかえって遅らせる(ブルックスの法則)ことがあります。関係者が増えるとコミュニケーション経路はn人でn(n-1)/2本に増え、人数の二乗に近い勢いで増えることも押さえておきます。
リスクマネジメントでは、リスクを洗い出し、発生確率と影響度で評価し(定性的分析)、必要なら金額や日数に換算して(定量的分析)、対応方針を決めます。マイナスのリスクへの対応は、原因となる作業や方式そのものをやめる回避、保険や外部委託で損失負担を他者に移す転嫁、確率か影響を小さくする軽減、対策せずに受け入れる受容の4種類です。プラスのリスク(好機)には活用・共有・強化・受容が対応します。対策を打ったあとに残るリスクを残留リスク、対策そのものが生む新たなリスクを二次リスクといいます。想定できたリスクの備えとして計画に織り込む金額がコンティンジェンシー予備、想定外の事象に備えて上位管理者が握る金額がマネジメント予備で、両者は権限の所在が違います。
品質のマネジメントは、作り込みの仕組みを整える品質保証と、成果物を測って基準に合っているか確かめる品質管理に分かれます。テストで欠陥を取り除くよりレビューや標準化で欠陥を作り込まないほうが安いというのが基本の考え方で、後工程で見つかるほど手戻り費用は大きくなります。調達のマネジメントでは、内製と外注のどちらが有利かを判断し、外注するなら契約形態と受入基準を先に決めます。ステークホルダのマネジメントでは、利害関係者を洗い出し、関心度と影響力の二軸で分類して関与の方針を変えます。影響力が大きく関心も高い相手には密に報告し、影響力が小さく関心も低い相手には定型の情報提供にとどめる、といった使い分けです。反対する立場の関係者ほど早期に巻き込むほうが、後の手戻りが小さくなります。
/* 関係者がn人のときの1対1コミュニケーション経路数 */ ○整数型: keiro(整数型: n) return n * (n - 1) / 2 /* n = 6 のとき 15、n = 10 のとき 45、n = 15 のとき 105 */ /* 人数が2.5倍で経路は7倍になる。会議体を階層化する根拠になる */
| 対象群 | 中心となる問い | 代表的な成果物や道具 |
|---|---|---|
| 統合 | 全体のつじつまは合っているか | プロジェクト憲章、プロジェクト計画書、変更管理 |
| ステークホルダ | 誰が何を気にしているか | ステークホルダ登録簿、関心度と影響力の分類 |
| スコープ | どこまで作り、どこからは作らないか | 要求事項一覧、WBS、WBS辞書 |
| 資源 | 誰が、どの設備でやるか | 責任分担マトリックス、要員計画、山積み表 |
| 時間 | いつ終わるか、どこが押しているか | アローダイアグラム、ガントチャート、マイルストーン |
| コスト | いくらかかり、いま超えていないか | 見積書、コストベースライン、EVM |
| リスク | 何が起きうるか、どう備えるか | リスク登録簿、リスク対応計画、予備費 |
| 品質 | 求める水準に届いているか | 品質計画、レビュー記録、テスト報告 |
| 調達 | 内製か外注か、どんな契約か | 調達計画、提案依頼書、契約書、受入基準 |
| コミュニケーション | 誰に、何を、どの頻度で伝えるか | コミュニケーション計画、進捗報告、議事録 |
- プロジェクト憲章
- プロジェクトの目的・成果物・主要関係者・体制・制約・前提を記し、プロジェクトの発足を正式に承認する文書。プロジェクトマネージャの権限の根拠にもなる。
- JIS Q 21500
- プロジェクトマネジメントの手引を定めた規格。立上げ・計画・実行・管理・終結の5プロセス群と、統合・ステークホルダ・スコープ・資源・時間・コスト・リスク・品質・調達・コミュニケーションの10対象群で整理する。
- プロダクトスコープとプロジェクトスコープ
- 前者は成果物そのものに含める機能や特性の範囲、後者はそれを作るために必要な作業の範囲。両方を定義しないと「作るもの」と「やること」がずれる。
- WBS
- 作業分解構成図。成果物と作業を階層的に分解した図で、最小単位のワークパッケージまで細分化して工数・期間・担当・完了条件を決める。
- WBS辞書
- 各ワークパッケージについて、作業内容・成果物・受入基準・前提などを記述した文書。WBSの箱だけでは分からない中身を補い、認識のずれを防ぐ。
- スコープクリープ
- 正式な変更手続を経ないまま、小さな追加要求の積み重ねで範囲がじりじり広がっていく現象。期間とコストの超過の主要な原因になる。
- 変更管理委員会
- CCB。変更要求を受け付け、スコープ・期間・コスト・品質への影響を評価して承認または却下する意思決定の場。承認後にベースラインを改訂する。
- RACIチャート
- 作業と役割の対応表で、実行責任・説明責任・相談先・報告先の4区分を割り当てたもの。説明責任者は1作業につき1人にするのが原則。
- 山積み・山崩し
- 各時期に必要な要員工数を積み上げて(山積み)、山が高すぎる時期の作業を余裕のある時期へずらして平準化すること(山崩し)。資源平準化ともいう。
- コミュニケーション経路数
- 関係者がn人のとき、1対1の経路はn(n-1)/2本になる。人数を増やすほど意思疎通の負担が急に重くなる根拠として使われる。
- リスク対応の4分類
- マイナスのリスクに対する回避・転嫁・軽減・受容。原因を断つ、他者に移す、確率や影響を小さくする、そのまま受け入れる、の4通り。
- 残留リスクと二次リスク
- 残留リスクは対策後になお残るリスク、二次リスクは対策を実施したこと自体が新たに生むリスク。どちらも計画に明記して監視する。
- コンティンジェンシー予備
- 特定できているリスクが顕在化したときのために、コストベースラインに含めて確保しておく予備費。プロジェクトマネージャの裁量で使える。
- マネジメント予備
- 想定していなかった事象に備え、コストベースラインの外側に置く予備費。使用には上位管理者の承認が必要で、権限の所在がコンティンジェンシー予備と異なる。
- ステークホルダ分析
- 利害関係者を関心度と影響力の二軸で分類し、関与や報告の濃さを変える手法。影響力が大きく関心も高い相手を最重点で管理する。
例題 メンバ15人のチームに、全員が互いに直接やり取りする運用を続けさせると、1対1の経路は何本になるか。5人のサブチーム3組に分け、代表者3人だけが組をまたいでやり取りする形に変えると何本になるか。
15人なら15*14/2 = 105本。サブチーム制なら、各組の中が5*4/2 = 10本で3組ぶんの30本に、代表どうしの3*2/2 = 3本を足して33本。3分の1以下に減る。人数nに対して経路がn(n-1)/2で増えるので、規模が大きいほど階層化の効果が効いてくる。ただし階層を挟むぶん情報が伝わるまでの時間は延びるので、緊急連絡の経路だけは別に用意しておく。
例題 テスト工程に入ってから利用部門が「この画面にも項目を1つ足したい。小さい変更だから今回のスコープ内で対応してほしい」と言ってきた。プロジェクトマネージャとして最初に取るべき行動はどれか。
その場で引き受けることも、その場で断ることもしない。まず変更要求として正式に受け付け、WBSと計画に照らしてスコープ・期間・コスト・品質への影響を見積もり、変更管理委員会に諮る。承認されたらベースラインを改訂してから着手する。「小さいから」と手続を省いて受けると、同じ理屈の追加が積み重なってスコープクリープになる。逆に「スコープ外だから」と評価もせず断るのも誤りで、判断材料を作るのがマネージャの仕事である。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類5:プロジェクトマネジメント 中分類14:プロジェクトマネジメント
スケジュールとクリティカルパス
アローダイアグラムから最早・最遅とトータルフロートを求め、どの作業を縮めれば全体が縮むのかを判断できるようになります。
スケジュールを作る手順は、WBSの作業を洗い出す、作業どうしの前後関係をつなぐ、各作業の所要期間を見積もる、資源の制約を当てはめる、という順です。前後関係を表す図には二つの流儀があります。作業を矢印で、作業のつなぎ目を結合点(丸)で表すのがアローダイアグラム(PERT図、AOA)で、作業を四角で、依存関係を矢印で表すのがプレシデンスダイアグラム(PDM、AON)です。アローダイアグラムでは、実際の作業を伴わないが前後関係だけを示したい場合に、所要日数0の点線の矢印であるダミー作業を使います。PDMでは、前の作業が終わってから始める終了-開始(FS)のほかに、同時に始める開始-開始(SS)、同時に終える終了-終了(FF)、前が始まるまで終えられない開始-終了(SF)の4種類の依存関係を表せます。前の作業の終了から次の開始までわざと空ける待ち時間をラグ、逆に前が終わる前に先行して始める重なりをリードといいます。
日程計算は前から後ろへ1回、後ろから前へ1回の2回で終わります。前向き計算では、各作業について「先行作業がすべて終わる最も早い時点」を最早開始時刻(ES)とし、それに所要日数を足したものを最早終了時刻(EF)とします。先行作業が複数あるときは、そのうち最も遅く終わるものに合わせるので最大値を取ります。すべての作業のEFの最大値が、プロジェクト全体の最短所要日数です。後ろ向き計算では、全体の完了日を出発点にして、各作業について「後続作業をすべて予定どおり始められる最も遅い時点」を最遅終了時刻(LF)とし、そこから所要日数を引いたものを最遅開始時刻(LS)とします。後続が複数あるときは、最も早く始めなければならないものに合わせるので最小値を取ります。
この2回の計算から余裕が求まります。全体の完了を遅らせずにその作業を遅らせてよい日数がトータルフロート(全余裕)で、LS-ESまたはLF-EFで計算します。これに対し、後続作業の最早開始時刻を遅らせずに遅らせてよい日数がフリーフロート(自由余裕)で、後続作業のESの最小値からその作業のEFを引いて求めます。フリーフロートはトータルフロート以下になります。トータルフロートが0の作業をつないだ経路がクリティカルパスで、その長さが全体の最短所要日数と一致します。クリティカルパス上の作業が1日遅れれば全体も1日遅れるので、進捗管理の重点はここに置きます。逆にクリティカルパス以外の作業が余裕日数の範囲で遅れても、全体の完了日は動きません。クリティカルパスは1本とは限らず、同じ長さの経路が複数あれば全部がクリティカルパスです。
全体を縮めたいときは、まずクリティカルパス上の作業を縮めます。ここが応用情報でよく問われるところで、「クリティカルパス上の作業をn日縮めれば全体もn日縮む」とは限りません。縮めていくと、それまで2番目に長かった経路のほうが長くなり、クリティカルパスが移ってしまうからです。移った時点でそれ以上は縮まなくなるので、短縮できる日数は、元のクリティカルパスと2番目に長い経路の差までが上限になります。それを超えて縮めたいなら、2番目の経路も同時に縮める必要があります。短縮の手段には、要員や設備を追加投入して期間を買うクラッシングと、本来は順に行う作業を一部重ねて並行させるファストトラッキングがあります。クラッシングはコストが増え、ファストトラッキングは手戻りのリスクが増えるという、それぞれ別の代償を払う点が判断の分かれ目です。
進捗を見せる道具も使い分けます。ガントチャートは作業名を縦、日付を横に取って予定と実績を横棒で並べる図で、誰が何をいつまでにやるかと進み具合が直感的に分かりますが、作業間の前後関係は表しにくいのが弱点です。アローダイアグラムは前後関係とクリティカルパスが分かる代わりに、進捗の見せ方には向きません。重要な節目だけを日付で置くマイルストーンチャートは、経営層への報告のように粒度の粗い共有に向きます。実務では、計画時にアローダイアグラムでクリティカルパスを押さえ、日々の管理はガントチャートで行い、上位報告はマイルストーンで行う、という組み合わせが多く取られます。
資源の制約も日程を動かします。日程計算だけで作った計画では、特定の時期に必要な要員が手持ちを超えることがあります。そこで、余裕のある作業を後ろへずらして山を崩す資源平準化を行いますが、余裕を使い切った作業は新たにクリティカルになるため、平準化のあとはクリティカルパスを引き直します。また、遅れが出たときの対処としてよく挙がる要員追加は、その作業がクリティカルパス上にあり、かつ人を増やせば期間が縮む性質の作業(分割できる作業)であることが前提です。設計のように人を増やすと意思疎通の手間が増える作業では、追加投入が逆効果になり得ます。
/* 上の表から、開始から終了までの経路をすべて書き出して長さを比べる */ 経路1: A -> C -> E -> G = 3 + 4 + 6 + 3 = 16日 経路2: B -> D -> E -> G = 5 + 2 + 6 + 3 = 16日 経路3: B -> F -> G = 5 + 9 + 3 = 17日 <- 最長 /* 最長の経路 B -> F -> G がクリティカルパス。全体の最短所要日数は17日 */ /* 前向き計算と後ろ向き計算の結果(ES:最早開始 LF:最遅終了 TF:全余裕) */ 作業 ES EF LS LF TF A 0 3 1 4 1 B 0 5 0 5 0 C 3 7 4 8 1 D 5 7 6 8 1 E 7 13 8 14 1 F 5 14 5 14 0 G 14 17 14 17 0
| 作業 | 先行作業 | 所要日数 |
|---|---|---|
| A | なし | 3日 |
| B | なし | 5日 |
| C | A | 4日 |
| D | B | 2日 |
| E | CとD | 6日 |
| F | B | 9日 |
| G | EとF | 3日 |
- アローダイアグラム
- 作業を矢印、結合点を丸で表し、前後関係と所要日数を示す図。PERT図ともいう。前向き計算と後ろ向き計算でクリティカルパスを求める。
- ダミー作業
- アローダイアグラムで、実際の作業を伴わないが前後関係だけを示すために引く所要日数0の点線の矢印。日程には影響しないが順序の制約は生む。
- プレシデンスダイアグラム
- PDM。作業を四角、依存関係を矢印で表す図法。FS・SS・FF・SFの4種類の依存関係とラグやリードを表現できる。
- 最早開始時刻
- ES。先行作業がすべて終わる最も早い時点。先行が複数あるときは、それぞれの最早終了時刻の最大値を取る。
- 最遅開始時刻
- LS。全体の完了を遅らせない範囲で、その作業を最も遅く始めてよい時点。最遅終了時刻から所要日数を引いて求める。
- トータルフロート
- 全余裕。LS-ES(またはLF-EF)で求め、全体の完了日を遅らせずにその作業を何日遅らせてよいかを表す。0の作業がクリティカルパス上にある。
- フリーフロート
- 自由余裕。後続作業の最早開始時刻を遅らせずに遅らせてよい日数。後続のESの最小値からその作業のEFを引く。トータルフロート以下になる。
- クリティカルパス
- 所要日数の合計が最長になる経路。全体の最短所要日数を決め、経路上の作業には余裕がない。同じ長さの経路が複数あれば、そのすべてがクリティカルパスになる。
- クラッシング
- 要員や設備を追加投入して作業期間を短縮する手法。コストは増えるが、作業の順序そのものは変えないので手戻りのリスクは増えにくい。
- ファストトラッキング
- 本来は順に行う作業を一部重ねて並行実施し、全体を短縮する手法。追加費用は少ないが、前工程の結果が変わると手戻りが起きるリスクがある。
- ガントチャート
- 作業名を縦、日付を横に取り、予定と実績を横棒で表す図。進捗は分かりやすいが、作業間の前後関係やクリティカルパスは読み取りにくい。
- マイルストーン
- 要件確定や本番移行などの重要な節目に置く、所要期間0の管理点。粒度の粗い報告や、契約上の区切りとして使われる。
- 資源平準化
- 特定時期に集中した要員の山を、余裕のある作業を後ろへずらして均すこと。余裕を使い切った作業は新たにクリティカルになるため、実施後は経路を引き直す。
例題 上の表のプロジェクトで、作業Eの担当者が2日休むことになった。全体の完了日は何日遅れるか。
Eのトータルフロートは1日しかない。1日目の遅れは余裕で吸収できるが、2日目は吸収できず、全体は1日遅れて18日になる。遅れ日数からトータルフロートを引いた分だけ全体が遅れる、と考えればよい。このときA-C-E-Gが18日、B-D-E-Gが18日、B-F-Gが17日となり、クリティカルパスは元のB-F-GからEを通る2本へ移る。余裕を食い潰した作業が新たにクリティカルパスを作る、という典型例である。
例題 上の表のプロジェクトで、作業Fに要員を追加して所要日数を9日から5日に縮めた。全体は何日縮むか。
縮むのは1日だけで、16日にしかならない。Fを縮めるとB-F-Gは5+5+3 = 13日になるが、他の2経路が16日のまま残るからである。クリティカルパスは4日ぶん縮めた時点でA-C-E-GとB-D-E-Gに移っており、それ以上Fを縮めても全体は動かない。短縮できる上限は、元のクリティカルパス17日と2番目に長い経路16日の差である1日。この「縮めた日数がそのまま全体の短縮にならない」点が、クラッシングの費用対効果を評価するときの要になる。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類5:プロジェクトマネジメント 中分類14:プロジェクトマネジメント
コスト見積りとEVMによる進捗管理
工数と費用の見積り方を選び分け、EVMのPV・EV・ACから遅れと超過を同じ物差しで読み取れるようになります。
コストの見積りは、規模を測る、規模から工数を出す、工数から費用を出す、という三段構えで考えると整理できます。規模の測り方の代表がファンクションポイント法で、外部入力・外部出力・外部照会・内部論理ファイル・外部インタフェースファイルという利用者から見える機能の数と複雑度に点数を付けます。実装言語に左右されないので、企画段階から発注側と受注側が同じ土俵で話せるのが利点です。対してLOC法は想定ソースコード行数を基準にするため、同じ機能でも言語や作り方で値が変わり、比較には向きません。COCOMOは規模を入力として工数と期間を数式モデルで求める方法で、係数を自組織の実績で較正しないと当たりません。
見積りの進め方には、過去の似た案件の実績から推定する類推見積法、WBSの末端ごとに見積もって積み上げるボトムアップ見積法(積算法)、作業種別ごとの標準工数を掛けて積み上げる標準値法、複数の専門家に匿名で回答させて意見を収束させるデルファイ法、楽観値・最可能値・悲観値の3点から期待値を出す3点見積法などがあります。どれを選ぶかは、情報の量と求める精度で決まります。企画段階のように情報が少ない時期は類推見積法が現実的で、設計が固まったあとはボトムアップ見積法のほうが精度が高くなります。ボトムアップ見積法は精度が高い代わりに、見積り自体に工数がかかり、末端が漏れると全体も漏れるという弱点があります。見積りの不確かさは時間とともに小さくなっていく(不確実性のコーン)ので、企画段階の見積りに幅を付けて示し、段階ごとに精緻化するのが実務の作法です。
決めた見積りを時間軸に並べ、いつまでにいくら使う予定かを累積で表したものがコストベースラインです。これを基準に、実績と比べて進捗とコストを同時に管理する手法がEVM(アーンドバリューマネジメント)です。EVMは三つの値を金額に換算して比べます。PV(プランドバリュー、計画価値)はその時点までに完了しているはずの作業の予算額、EV(アーンドバリュー、出来高)は実際に完了した作業に割り当てられていた予算額、AC(アクチュアルコスト、実コスト)はその作業に実際に費やした金額です。ポイントは、EVが「かかった金額」ではなく「終わった作業の値段」だという点です。EVを基準にPVと比べれば進み具合が、ACと比べれば費用対効果が分かります。
差異は引き算、効率は割り算で出します。スケジュール差異SV = EV - PV は、正なら計画より進んでおり、負なら遅れています。コスト差異CV = EV - AC は、正なら予算内、負なら超過です。比率で見るときはスケジュール効率指数SPI = EV / PV、コスト効率指数CPI = EV / AC を使い、1を超えれば良好、1を下回れば問題ありと判断します。引く順番と割る順番はどちらもEVが先だと覚えると取り違えません。SVを金額で見るとき「遅れているのに金額が小さいから軽微だ」と読むのは危険で、単位が金額なので工程末期には自然に0へ近づきます。進捗の遅れを日数で語りたいときは、EVがPVの水準に達した時点との差を見るなど、別の見方を併用します。
将来の予測もEVMの役目です。プロジェクト全体の予算総額をBAC(完成時総予算)とし、いまのコスト効率がこのまま続くと仮定すると、完成時総コストの予測EACはBAC / CPI で求まります。残作業に必要な額ETCはEAC - AC、完成時の差異VACはBAC - EACです。CPIが1を下回っているのにBACのままで報告するのは、予算超過を隠しているのと同じことになります。ただしEAC = BAC / CPI は「いまの効率が最後まで続く」という仮定に依存します。効率が悪い原因が初期の学習コストのように一時的なものだと分かっているなら、残作業は当初見積りどおりに進むと考えたEAC = AC + (BAC - EV) を使うほうが実態に近くなります。どちらの前提で予測したのかを添えて報告することが大切です。
SPIとCPIの組合せで打つ手が変わります。SPIが低くCPIが高いなら、安く進んでいるが遅い状態なので、要員追加や残業でコストを使って日程を買い戻す判断が成り立ちます。逆にSPIが高くCPIが低いなら、急いだ結果として金を使いすぎている可能性が高く、まず費用の使い方を絞ります。両方1未満ならスコープの見直しや納期の再交渉まで含めた計画変更が必要です。両方1を超えていても、見積りが甘すぎた、あるいは品質を犠牲にしていないかを疑うべきで、EVの計上基準(何をもって完了とするか)が甘いと数字だけがよく見えます。EVMは基準が明確でないと機能しない、という点が最後の落とし穴です。
/* EVMの計算手順(BAC:完成時総予算) */
○なし: EVMを計算する(実数型: PV, 実数型: EV, 実数型: AC, 実数型: BAC)
SV ← EV - PV /* 金額で見た進捗の差異 */
CV ← EV - AC /* 金額で見たコストの差異 */
SPI ← EV / PV /* 進捗の効率 */
CPI ← EV / AC /* コストの効率 */
EAC ← BAC / CPI /* いまの効率が続く前提の完成時予測 */
ETC ← EAC - AC /* 残りに必要な額 */
VAC ← BAC - EAC /* 完成時の予算差異 */
if (SPI < 1 かつ CPI ≧ 1)
/* 安いが遅い。費用を使って日程を買い戻す判断が成り立つ */
elseif (SPI ≧ 1 かつ CPI < 1)
/* 速いが高い。まず費用の使い方を絞る */
elseif (SPI < 1 かつ CPI < 1)
/* 遅くて高い。スコープや納期を含む計画変更を検討する */
endif
| 指標 | 式 | 意味と判断 |
|---|---|---|
| PV | 計画上の出来高 | その時点までに終わっているはずの作業の予算額 |
| EV | 実績の出来高 | 実際に終わった作業に割り当てられていた予算額。支出額ではない |
| AC | 実際の支出 | その作業に実際に費やした金額 |
| SV | EV - PV | 正なら計画より先行、負なら遅れ。単位は金額 |
| CV | EV - AC | 正なら予算内、負なら予算超過 |
| SPI | EV / PV | 1超なら進捗良好、1未満なら遅れ |
| CPI | EV / AC | 1超ならコスト効率良好、1未満なら超過 |
| EAC | BAC / CPI | いまの効率が最後まで続くとしたときの完成時総コスト予測 |
| ETC | EAC - AC | 残作業に今後必要となる額 |
| VAC | BAC - EAC | 完成時に見込まれる予算との差異。負なら超過見込み |
- ファンクションポイント法
- 利用者から見える機能の数と複雑度に点数を付けて規模を求める手法。実装言語に依存しないので、企画段階から発注側と受注側が同じ基準で議論できる。
- COCOMO
- 規模を入力として工数と期間を数式モデルで算出する見積手法。係数を自組織の過去実績で較正しないと精度が出ない。
- 類推見積法
- 過去の類似案件の実績から規模や工数を推定する手法。情報の少ない企画段階でも使えるが、精度は類似度と実績データの整備状況に左右される。
- ボトムアップ見積法
- WBSの末端作業ごとに見積もって積み上げる手法。積算法ともいう。詳細化後は精度が高いが、見積り自体に工数がかかり、末端の漏れが全体の漏れになる。
- 3点見積法
- 楽観値・最可能値・悲観値の3つの値から期待値を求める手法。PERTでは(楽観値 + 4 * 最可能値 + 悲観値)/ 6 を使う。
- デルファイ法
- 複数の専門家に匿名で見積りを回答させ、集計結果を戻して再回答させることを繰り返し、意見を収束させる手法。声の大きい人に引きずられにくい。
- コストベースライン
- 承認された見積りを時間軸に並べ、累積で表した支出計画。EVMのPVはこの曲線から読み取る。変更は正式な変更管理を経て行う。
- PV・EV・AC
- PVはその時点までに完了しているはずの作業の予算額、EVは実際に完了した作業に割り当てられていた予算額、ACはそれに実際に費やした額。EVは出来高であって支出額ではない。
- SVとCV
- SV = EV - PV はスケジュール差異で、正なら先行、負なら遅れ。CV = EV - AC はコスト差異で、正なら予算内、負なら超過。どちらもEVから引く。
- SPIとCPI
- SPI = EV / PV はスケジュール効率指数、CPI = EV / AC はコスト効率指数。1を超えれば良好、下回れば問題あり。どちらもEVが分子。
- BACとEAC
- BACは完成時総予算。EACは完成時総コストの予測で、いまの効率が続く前提ならBAC / CPI、非効率が一時的な前提ならAC + (BAC - EV)で求める。
- ETCとVAC
- ETCは残作業に必要な額でEAC - AC。VACは完成時の差異でBAC - EAC。VACが負なら予算超過の見込みを意味する。
- 不確実性のコーン
- 見積りの誤差の幅が、企画段階では大きく、工程が進むほど狭まっていくという性質。企画段階の見積りは幅を付けて示し、段階ごとに精緻化する。
例題 完成時総予算BACが4000万円のプロジェクトで、ある時点のPVが1200万円、EVが1000万円、ACが1250万円だった。SV・CV・SPI・CPIと、いまの効率が続くとしたときの完成時総コストの予測はいくらか。
SV = 1000 - 1200 = -200万円で進捗は遅れ。CV = 1000 - 1250 = -250万円でコストは超過。SPI = 1000 / 1200 = 0.83、CPI = 1000 / 1250 = 0.80。どちらも1未満なので「遅れていて、かつ高い」状態である。EAC = BAC / CPI = 4000 / 0.80 = 5000万円で、当初予算より1000万円多くかかる見込み。残りに必要なETCは5000 - 1250 = 3750万円。両方の指数が1を割っているので、要員追加のような一方向の手当てでは足りず、スコープの見直しや納期の再交渉を含む計画変更を検討する場面である。
例題 EVMで、ACがPVを大きく下回っているのを見て「予算を使っていないから順調だ」と報告してよいか。
よくない。ACが小さいのは、コスト効率がよいからかもしれないが、そもそも作業が始まっていないだけかもしれない。この二つはACとPVだけでは区別できず、EVを見て初めて分かる。EVも小さければ作業が進んでいないだけであり、SPI = EV / PV が1を大きく下回る深刻な遅れである。EVが十分あってACが小さいなら本当に効率がよい。EVMが三つの値を必要とするのは、まさにこの区別のためである。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類5:プロジェクトマネジメント 中分類14:プロジェクトマネジメント
サービスマネジメントとファシリティ
ITILの考え方を軸に、インシデント管理と問題管理の役割の違い、SLAの決め方、可用性とキャパシティの守り方が分かります。
システムは作って終わりではなく、動かし続けて初めて価値を生みます。運用の良い進め方をまとめた事実上の標準がITILで、これを規格にしたものがJIS Q 20000(ISO/IEC 20000)です。ITILの新しい版では、需要から価値までを一つの仕組みとして扱うサービスバリューシステムと、その中核である6つの活動からなるサービスバリューチェーン(計画・改善・エンゲージ・設計と移行・獲得と構築・提供とサポート)という捉え方をします。細かい版の違いより大事なのは、運用の活動を「いま起きている障害を止める」「二度と起こさないようにする」「変えるときに壊さない」という役割ごとに分け、それぞれ別の指標で評価するという設計思想です。この分け方が分かっていれば、初見の場面でもどのプロセスの話かを判断できます。
利用者からの連絡を一手に引き受ける単一窓口がサービスデスクです。窓口を分散させると、たらい回しが起きて記録も残らないため、単一窓口にすることが原則になります。サービスデスクが受けた申告のうち、サービスの品質低下や中断を引き起こす事象への対応がインシデント管理です。インシデント管理の目的は「合意した時間内にサービスを復旧させること」であり、原因の究明ではありません。原因が分からなくても、再起動や代替機への切替え、既知の誤りに対する回避策(ワークアラウンド)の適用でサービスが戻るなら、それが正解です。これに対し、インシデントの根本原因を突き止めて恒久的に取り除くのが問題管理です。原因がまだ分からない段階の管理対象を問題といい、原因と回避策が判明したものを既知の誤りとして登録しておくと、次に同じインシデントが起きたときすぐ回避できます。同じインシデントが繰り返し起きているのに問題管理へ渡さないと、復旧作業だけが永久に続くことになります。
サービスを変えるときの守りが、変更管理・リリース管理・構成管理です。変更管理は、変更要求を受け付けて影響とリスクを評価し、承認と切戻し手順の準備を経て承認する活動です。リリース管理(リリース及び展開管理)は、承認された変更を本番環境へ実際に移す活動で、リリース単位の計画、テスト、展開、そして失敗したときの切戻しを担います。構成管理は、ハードウェア・ソフトウェア・文書などの構成品目とその関係を構成管理データベース(CMDB)で正確に保つ活動で、変更の影響範囲を判断する土台になります。三つの関係は、構成管理が地図を持ち、変更管理が行き先を決め、リリース管理が実際に運ぶ、と考えると整理できます。緊急変更は通常の承認手順を短縮できますが、記録を省いてよいわけではなく、事後に必ず正式な記録と評価を行います。
提供する品質の約束がSLA(サービスレベル合意書)です。SLAは提供者と利用者の合意文書で、サービス時間帯、可用性、応答時間、障害時の回復目標、報告方法、未達時の措置などを、測れる形で書きます。SLAの中の個々の目標値をSLO、内部の計測指標をSLIと呼び分けることもあります。同じ提供者の中で部門間に置く目標をOLA、外部委託先との契約に置く目標を裏付け契約(UC)といい、外部委託先の目標が甘いと自社のSLAは守れません。決めた目標を継続的に測り、報告し、改善へ回す活動全体がSLM(サービスレベル管理)です。目標値は高ければよいというものではありません。可用性を99.9%から99.99%へ上げると、許される年間停止時間は約8.8時間から約53分になり、必要な冗長構成と運用体制の費用は跳ね上がります。業務が本当に必要とする水準を決めることが、SLAを結ぶ実質的な作業です。
可用性管理は、稼働率の目標を決めて設計と運用で守る活動です。稼働率はMTBF / (MTBF + MTTR) で求まり、上げる手は二つしかありません。故障しにくくする(MTBFを延ばす)か、直りを速くする(MTTRを縮める)かです。冗長化やホットスタンバイはMTTRを縮める側の投資、部品の品質向上や予防保全はMTBFを延ばす側の投資と整理できます。災害時の目標としては、どの時点のデータまで戻せるかを示すRPO(目標復旧時点)と、いつまでに復旧させるかを示すRTO(目標復旧時間)を分けて決めます。RPOはバックアップの取得間隔で、RTOは切替えの仕組みで決まるので、投資先が違います。キャパシティ管理は、処理量・応答時間・資源使用率を監視し、需要の伸びを予測して、不足する前に増強する活動です。閾値を超えてから慌てるのではなく、傾向から先回りするのがキャパシティ管理の値打ちです。
設備そのものを守るのがファシリティマネジメントです。停電への備えとしては、瞬断や短時間の停電をしのぐ無停電電源装置(UPS)と、長時間の停電に備える自家発電装置を組み合わせます。UPSだけでは数分から数十分しか持たないので、UPSは「安全に落とすまでの時間」または「発電機が立ち上がるまでの時間」を稼ぐ装置だと理解します。地震対策には、建物ごと揺れを絶つ免震と、揺れを吸収して小さくする制震があります。空調は温度と湿度の両方を管理し、湿度が低すぎると静電気、高すぎると結露の問題が出ます。入退室管理では、共連れを防ぐアンチパスバックや二重扉方式が使われ、電源系統や通信回線を二重化して単一障害点をなくす設計も、ファシリティ側の可用性対策に含まれます。
/* 可用性の目標値から、許される停止時間を出す */ ○実数型: 停止許容時間(実数型: サービス提供時間, 実数型: 目標可用率) return サービス提供時間 * (1 - 目標可用率) /* 24時間365日運用(年8760時間)の場合 */ 目標99.0% -> 8760 * 0.010 = 87.6時間/年 目標99.9% -> 8760 * 0.001 = 8.76時間/年 目標99.99% -> 8760 * 0.0001 = 0.876時間/年(約53分) /* 稼働率 = MTBF / (MTBF + MTTR) */ MTBF=1200時間, MTTR=30時間 -> 1200 / 1230 = 0.9756(97.56%)
| プロセス | 目的 | 主な指標と成果物 |
|---|---|---|
| サービスデスク | 問合せと申告を単一窓口で受け付ける | 一次解決率、応答時間、記録の網羅性 |
| インシデント管理 | 合意した時間内にサービスを復旧させる | 平均復旧時間、SLA順守率、回避策の適用 |
| 問題管理 | 根本原因を除去して再発をなくす | 既知の誤りの登録件数、再発インシデント件数 |
| 変更管理 | 変更のリスクを評価して安全に承認する | 変更成功率、緊急変更の比率、切戻し手順 |
| リリース及び展開管理 | 承認された変更を本番へ確実に移す | リリース計画、展開失敗率、切戻し実績 |
| 構成管理 | 構成品目と関係を正確に保つ | CMDB、構成情報の正確性、監査結果 |
| サービスレベル管理 | 合意した水準を測り、報告し、改善する | SLA、SLO、サービスレベル報告書 |
| 可用性管理 | 目標稼働率を設計と運用で守る | 稼働率、MTBF、MTTR、単一障害点の有無 |
| キャパシティ管理 | 需要の伸びを予測して不足前に増強する | 資源使用率の傾向、応答時間、増強計画 |
| サービス継続管理 | 災害時に決めた水準で業務を戻す | RPO、RTO、復旧手順、訓練記録 |
- サービスデスク
- 利用者からの問合せや障害申告を受け付ける単一窓口。連絡先を一つに集約して記録を残し、たらい回しを防ぐことが目的。
- インシデント管理
- サービスの中断や品質低下を、合意した時間内に復旧させる活動。目的は復旧であって原因究明ではなく、回避策で戻せるならそれでよい。
- 問題管理
- インシデントの根本原因を特定し、恒久的に取り除く活動。原因未特定のものを問題、原因と回避策が判明したものを既知の誤りとして管理する。
- ワークアラウンド
- 根本原因を除かないまま、サービスを暫定的に回復させる回避策。インシデント管理の武器であり、恒久対策は問題管理へ引き継ぐ。
- 変更管理
- 変更要求の影響とリスクを評価し、切戻し手順の準備を確認して承認する活動。緊急変更でも記録と事後評価は省かない。
- 構成管理データベース
- CMDB。ハードウェア・ソフトウェア・文書などの構成品目と、その相互関係を記録したデータベース。変更の影響範囲の判断に使う。
- SLA
- サービスレベル合意書。サービス時間帯、可用性、応答時間、回復目標、報告方法、未達時の措置などを測れる形で合意した文書。
- OLAと裏付け契約
- OLAは同一組織内の部門間で結ぶ運用レベル合意、裏付け契約(UC)は外部委託先との契約。これらの水準が甘いと対外的なSLAは守れない。
- SLM
- サービスレベル管理。SLAで決めた目標を継続的に測定し、報告し、レビューして改善につなげる管理活動全体を指す。
- 稼働率
- MTBF / (MTBF + MTTR)。故障しにくくする(MTBFを延ばす)か、直りを速くする(MTTRを縮める)かの二方向でしか改善できない。
- RPOとRTO
- RPOはどの時点のデータまで復旧させるかの目標でバックアップ間隔が決める。RTOはいつまでに復旧させるかの目標で切替えの仕組みが決める。
- キャパシティ管理
- 処理量・応答時間・資源使用率を監視し、需要の伸びを予測して不足前に増強する活動。閾値超過後の対処ではなく先回りが役割。
- UPS
- 無停電電源装置。瞬断や短時間の停電の間だけ電力を供給し、安全に停止させるか自家発電装置が立ち上がるまでの時間を稼ぐ。
- アンチパスバック
- 認証済みの人に続いて入る共連れがあると入退室の記録の整合が崩れるため、共連れを検出でき、成立しにくくできる仕組み。
例題 月間のサービス提供時間が400時間の業務システムで、SLAの可用性目標を99.5%と合意した。1か月に許される停止時間は何時間か。また目標を99.9%に引き上げると何時間になるか。
99.5%なら400 * (1 - 0.995) = 2.0時間、99.9%なら400 * (1 - 0.999) = 0.4時間。0.4ポイント上げるだけで、許される停止が5分の1になる。0.4時間ということは、障害を検知して原因を切り分けて復旧させる一連の作業を24分で終えなければならず、人が駆けつけてから判断する運用では届かない。自動切替えの仕組みと常時監視の体制が要ることになり、費用の桁が変わる。SLAの数字は「業務がどこまでの停止に耐えられるか」から決めるべきで、高い値を置けばよいというものではない。
例題 同じ帳票の出力が月に4回も止まり、そのたびにサービスデスクがサーバを再起動して復旧させている。この対応の何が問題で、どう扱うべきか。
再起動で復旧させること自体はインシデント管理として正しい。合意時間内にサービスを戻すのがインシデント管理の目的だからである。問題は、繰り返し起きているのに問題管理へ渡していない点にある。同一事象の再発は問題として起票し、根本原因を調査して恒久対策を打つべき局面である。原因が判明して回避策が確立した段階で既知の誤りとして登録しておけば、次の発生時の復旧も速くなる。恒久対策の適用が本番環境の変更を伴うなら、変更管理を通して影響評価と切戻し手順の準備を行ってから実施する。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類6:サービスマネジメント 中分類15:サービスマネジメント
システム監査と内部統制
監査人の独立性、監査手続と監査証拠の集め方、監査証跡と可監査性、内部統制とITガバナンスの関係が分かります。
システム監査は、情報システムにまつわるリスクへの対応が適切に整備され、運用されているかを、独立した立場の者が点検・評価し、関係者に助言・勧告する活動です。ここでいちばん大事なのが独立性で、二つの面から見ます。一つは外観上の独立性で、監査の対象となる部門や業務から組織的に離れていること。もう一つは精神上の独立性で、公正かつ客観的に判断する態度を保つことです。自分が設計したシステムを自分で監査すれば外観上の独立性を欠きますし、上司の意向を忖度して結論を変えれば精神上の独立性を欠きます。なお、システム監査人は助言や勧告を行いますが、指摘した不備を自ら直したり、被監査部門に代わって統制を運用したりはしません。それをすると、次の監査で自分の仕事を監査することになるからです。監査人が外部の者か組織内の者かは独立性とは別の話で、内部監査部門の監査人でも、被監査部門から独立し社長直属など上位に報告する体制があれば独立性は保てます。
監査の進め方は、計画・実施・報告・フォローアップの順です。まず監査計画を立て、リスクの高い領域に資源を厚く配分します(リスクアプローチ)。実施の段階は、対象の概要をつかむ予備調査と、実際に証拠を集めて確かめる本調査に分かれます。証拠を集めるためにあらかじめ定める手順が監査手続で、その結果得られた事実が監査証拠、実施した手続と得た証拠を記録したものが監査調書です。監査調書は、結論の裏づけであり、後から第三者が同じ判断に至れることを示すものなので、いつ・誰が・何を・どうやって確かめたかを残します。最後に監査報告書で意見を述べ、指摘事項について改善の実施状況を後日確認するフォローアップまでが監査人の役目です。改善そのものを行うのは被監査部門であって監査人ではありません。
証拠の集め方にはいくつもの技法があり、確かめたいことによって選びます。チェックリスト法とインタビュー法は運用の実態を広く把握するのに向き、突合・照合法は帳票と記録を突き合わせて整合を確かめます。コンピュータ処理そのものを確かめる技法としては、あらかじめ結果の分かるデータを流して処理結果を確かめるテストデータ法、本番のファイルに監査用のダミー口座などを設けて本番処理の中で検証するITF法(組込み監査法)、処理の途中経過を抜き出して記録するスナップショット法、監査用のモジュールをアプリケーションに組み込んで条件に合う取引を抽出する監査モジュール法(埋込み監査モジュール)、監査用のプログラムでファイルを直接分析する監査ツール法などがあります。テストデータ法は本番データを汚さない代わりに、テストしていない経路の欠陥は見つかりません。ITF法は本番環境の実態を確かめられる代わりに、ダミーデータが本番の集計に混ざらないよう厳重な管理が要ります。
監査が成り立つ前提が監査証跡と可監査性です。監査証跡とは、ある取引や処理について、入力から出力まで、あるいは出力から入力まで、経路をたどって追跡できるようにする記録の連なりです。ログ、更新履歴、承認記録、帳票の連番などがこれにあたります。可監査性とは、システムが監査証跡を備え、監査が実施できるように作られている性質のことです。ここが要点で、可監査性は運用が始まってから足せるものではありません。ログの取得項目や保存期間、権限の記録といった要件は、要件定義や設計の段階で組み込んでおく必要があります。だからこそ、開発の各工程に監査の視点を入れる開発中の監査という考え方があります。
監査の背後にあるのが内部統制です。内部統制とは、業務の有効性と効率性、財務報告の信頼性、事業活動に関わる法令等の遵守、資産の保全という四つの目的を達成するために、組織内のすべての者によって遂行される仕組みを指します。基本的要素は、統制環境、リスクの評価と対応、統制活動、情報と伝達、モニタリング、ITへの対応の六つです。統制活動の代表が職務分掌で、申請する人と承認する人、開発する人と本番へ反映する人を分けることで、一人の不正や誤りが最後まで通らないようにします。ITに関する統制は、IT全般統制と業務処理統制に分けて考えます。IT全般統制は、開発と変更の管理、アクセス管理、運用管理といった、複数の業務処理を下支えする土台の統制です。業務処理統制は、入力チェックやマスタとの突合のように、個々の業務処理の中に組み込まれた統制です。土台であるIT全般統制が弱いと、いくら業務処理統制を作り込んでも、後から改ざんできてしまうため信頼できません。
内部統制を制度として求めているのが、金融商品取引法に基づく内部統制報告制度、いわゆるJ-SOXです。上場会社の経営者が、財務報告に係る内部統制の有効性を自ら評価して内部統制報告書を作成し、公認会計士等の監査を受けて提出します。ポイントは対象が財務報告に係る内部統制に絞られていること、そして評価するのは経営者自身であることです。情報システムの統制も、財務報告に影響する範囲でこの評価の対象になります。より広い枠組みがITガバナンスで、経営者が、ITへの投資と利用を組織の戦略に沿った方向へ導き、評価し、監視する責任を負うという考え方です。JIS Q 38500では、この責務をEDMすなわち評価(Evaluate)・指示(Direct)・モニタ(Monitor)の三つで表します。ITガバナンスの主体は経営者であり、システム監査はそのモニタを助ける手段の一つ、という位置づけになります。
/* 主な監査技法の選び分け */ 確かめたいこと -> 向いている技法 運用の実態や手順の遵守状況 -> インタビュー法, チェックリスト法 帳票と記録の整合 -> 突合法, 照合法 処理ロジックが仕様どおりか -> テストデータ法 本番処理そのものの正しさ -> ITF法(組込み監査法) 処理の途中でデータがどう変わったか -> スナップショット法 運用中の異常な取引を継続的に拾いたい -> 監査モジュール法 大量データの網羅的な分析 -> 監査ツール法
| 段階 | やること | 残すもの |
|---|---|---|
| 監査計画 | リスクの高い領域を見極め、範囲と資源を配分する | 監査計画書 |
| 予備調査 | 対象業務とシステムの概要、統制の設計状況をつかむ | 調査メモ、質問票の回答 |
| 本調査 | 監査手続に従い、証拠を集めて事実を確かめる | 監査証拠、監査調書 |
| 評価と結論 | 集めた証拠から、統制の整備と運用の状況を評価する | 評価結果、指摘事項の一覧 |
| 監査報告 | 監査意見を述べ、改善のための助言と勧告を行う | システム監査報告書 |
| フォローアップ | 改善が実施されたかを後日確認する | 改善状況の確認記録 |
- 外観上の独立性
- 監査人が、監査対象の部門や業務から組織上・身分上離れていること。自分が設計や運用に関与したシステムを監査すると、この独立性を欠く。
- 精神上の独立性
- 監査人が、公正かつ客観的に判断する態度を保つこと。組織図の上で離れていても、忖度して結論を変えればこの独立性を欠く。
- リスクアプローチ
- 限られた監査資源を、リスクが高いと評価した領域へ重点的に配分する監査計画の考え方。すべてを一律に調べるより効果が高い。
- 監査手続
- 監査目的に照らして十分かつ適切な監査証拠を得るために、あらかじめ定めておく手順。予備調査と本調査で用いる。
- 監査調書
- 実施した監査手続と、得られた監査証拠、判断の過程を記録した文書。監査意見の裏づけであり、第三者が追跡できるように残す。
- テストデータ法
- 結果があらかじめ分かっているデータを処理させ、出力を確かめる技法。本番データを汚さないが、用意しなかった経路の欠陥は検出できない。
- ITF法
- 組込み監査法。本番ファイルに監査用のダミー口座などを設け、本番処理の中で検証する技法。実態を確かめられるが、集計への混入防止の管理が要る。
- 監査モジュール法
- 監査用のモジュールをアプリケーションに組み込んでおき、条件に合う取引を継続的に抽出して記録する技法。運用中の異常を継続監視できる。
- 監査証跡
- 取引や処理を、入力から出力へ、または出力から入力へたどれるようにする記録の連なり。ログ、更新履歴、承認記録、帳票の連番などが該当する。
- 可監査性
- システムが監査証跡を備え、監査を実施できるように作られている性質。運用開始後には足しにくいので、要件定義や設計の段階で作り込む。
- 職務分掌
- 申請と承認、開発と本番反映のように、相互に牽制すべき役割を別の担当者に分ける統制活動。一人の誤りや不正が最後まで通らないようにする。
- IT全般統制
- 開発と変更の管理、アクセス管理、運用管理など、複数の業務処理を下支えする統制。ここが弱いと、業務処理統制の結果も信頼できなくなる。
- IT業務処理統制
- 入力チェック、マスタとの突合、例外処理の記録など、個々の業務処理の中に組み込まれた統制。処理の正確性と網羅性を確保する。
- 内部統制報告制度
- J-SOX。金融商品取引法に基づき、上場会社の経営者が財務報告に係る内部統制の有効性を評価して内部統制報告書を作成し、監査を受けて提出する制度。
- ITガバナンス
- 経営者が、ITの利用と投資を組織の戦略に沿うよう方向づけ、評価し、監視する責務。JIS Q 38500では評価・指示・モニタの3活動で表す。
例題 販売管理システムの開発に設計者として関わった技術者が、そのシステムの運用開始後に社内のシステム監査人として監査を担当することになった。何が問題か。
外観上の独立性を欠く。自分が設計した対象を自分で評価することになり、不備を見つけても自らの仕事の否定になるため、公正な判断が期待できないと外から見なされる。本人がどれだけ誠実でも、外観上の独立性は「そう見えるかどうか」の問題なので、担当を外すのが正しい対応である。なお、内部監査部門に所属していること自体は問題ではない。被監査部門から組織上分離され、経営者など上位者へ直接報告する体制があれば、内部の監査人でも独立性は保てる。
例題 運用開始後の監査で「ログの保存期間が3日しかなく、半年前の不正処理の経路をたどれない」と指摘された。どの段階で手を打つべきだったか。
要件定義から設計の段階である。指摘の本質は可監査性の欠如であり、監査証跡が残っていないという事実は、運用中の努力では取り返せない。何のログをどの粒度で取り、どれだけの期間保存し、誰が消せないようにするかは、非機能要件として最初に決めて設計に組み込むものである。だからこそ、開発の各工程に監査の視点を入れる開発中の監査という考え方がある。運用開始後にできるのは、これから先のログ取得を直すことだけで、過去は復元できない。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類6:サービスマネジメント 中分類16:システム監査
システム戦略と企画
情報システム戦略と業務プロセス
個別最適に陥らないための全体最適化の考え方と、EA・業務モデリング・BPR/BPMという道具の使い分けが分かります。
情報システム戦略とは、経営戦略を実現するために、情報システムをどんな姿にしていくかを定めた方針と計画です。出発点になる問題意識は、部門ごとに都合よく作ったシステムが乱立すると、同じ顧客データが三つの台帳に別々に入り、つなぐたびに変換処理が増え、全体としては誰も幸せにならないという現実です。これを避けるため、組織全体を見渡して重複や断絶をなくす全体最適化を掲げ、その方針を全体最適化方針、実現の道筋を全体最適化計画としてまとめます。方針を決めて優先順位を裁く場が情報システム戦略委員会で、ここに経営層が入っていないと、部門間の利害調整ができずに個別最適へ戻ってしまいます。責任者を置く場合はCIO(最高情報責任者)と呼び、経営とITの橋渡しを担わせます。
全体最適化を具体的に進めるための枠組みがEA(エンタープライズアーキテクチャ)です。組織の姿を四つの体系に分けて記述します。ビジネスアーキテクチャは業務の内容と流れ、データアーキテクチャは業務が扱う情報の構造と相互関係、アプリケーションアーキテクチャは業務を支えるシステムの機能構成、テクノロジアーキテクチャはそれを動かすハードウェア・ネットワーク・基盤ソフトウェアです。上の層が下の層の要求を決め、下の層が上の層を支える関係にあります。進め方は、まず現状(As-Is)を記述し、次にあるべき姿(To-Be)を描き、両者の差を洗い出して(ギャップ分析)、埋める順番を移行計画にする、という流れです。To-Beだけを描いても、現状との差が見えなければ何から手を付けるか決められません。共通に使える型をあらかじめ用意した参照モデルを使うと、記述の粒度がそろって比較しやすくなります。
業務そのものを作り直す取組みがBPR(ビジネスプロセスリエンジニアリング)です。既存の手順を前提に少しずつ改善するのではなく、業務の目的にさかのぼって業務プロセスを根本から設計し直します。ITはその手段として使いますが、順序が逆になってはいけません。いまの業務をそのままシステム化すると、無駄な承認段階や重複入力までシステムに固定してしまい、あとから変えにくくなります。BPRが一度きりの大きな作り直しであるのに対し、BPM(ビジネスプロセスマネジメント)は、業務プロセスの設計・実行・監視・改善というPDCAを回し続ける継続的な活動です。BPMを支えるソフトウェアがBPMSで、定義したプロセスをそのまま実行し、進行状況を計測して改善に返します。定型の手続をあらかじめ定めた順路で流す仕組みがワークフローシステムで、BPMの実行部分を担います。
業務を設計し直すには、まず現状を目に見える形にしなければなりません。そのための表記法がいくつかあります。DFD(データフロー図)は、データの流れに着目して業務を表す図で、処理(プロセス)・データストア・外部実体(源泉と吸収)・データフローの四つの記号だけで書きます。全体を1枚で表したコンテキストダイアグラムから、段階的に詳細化していくのが基本の使い方です。DFDは「データがどこからどこへ流れるか」は表せますが、処理の順序や条件分岐、タイミングは表せません。BPMN(ビジネスプロセスモデル表記法)は、レーンで担当者や組織を分け、イベント・アクティビティ・ゲートウェイ・シーケンスフローで、誰が何をどんな順で行うかを表します。分岐や並行、例外の扱いまで書けるので、部門をまたぐ業務の合意形成に向きます。ほかに、データの構造を表すE-R図、業務の状態変化を表す状態遷移図、UMLのアクティビティ図やユースケース図も使われます。要は、データの流れを見たいならDFD、手順と担当を見たいならBPMNやアクティビティ図、というように、見たいものに合わせて表記法を選ぶということです。
業務プロセスの善し悪しを測る物差しも決めておきます。最終的に達成したい目標がKGI(重要目標達成指標)、その達成に決定的に効く要因がCSF(重要成功要因)、CSFの進み具合を数値で追うのがKPI(重要業績評価指標)です。たとえば「解約率を年5%まで下げる」がKGIなら、CSFは「問合せへの初回応答の速さ」、KPIは「初回応答までの平均時間」といった具合につながります。KPIは、それを改善すればKGIに近づくと言える指標でなければ意味がありません。測りやすいというだけの理由で選んだ指標を追いかけると、指標だけが良くなって目的が達成されない事態を招きます。業務プロセスの改善では、こうした指標を先に決めてから現状を測り、改善後に同じ物差しで測り直すのが基本です。
組織をまたぐ改善では、外部に任せるという選択肢も出てきます。自社の中核でない業務をまとめて外部の専門事業者に委託するのがBPO(ビジネスプロセスアウトソーシング)で、給与計算やコールセンタが典型です。効果は、専門事業者の規模の経済とノウハウを使えることと、自社の資源を中核業務に集中できることにあります。一方で、委託した業務の知見が自社から失われ、後から内製へ戻しにくくなること、委託先の品質や情報管理に依存することが代償です。したがって、何を中核業務とみなすかという判断が先にあり、その線引きなしにコストだけを理由にBPOを選ぶと、あとで戦略の自由度を失います。全体最適化とは、こうした「自社でやること」と「任せること」の線引きも含めた設計だと考えると、EAやBPRの位置づけが見えてきます。
/* DFDで使う記号は4つだけ */ 外部実体(源泉と吸収): システムの外側にあるデータの出どころと行き先。例 顧客, 取引先銀行 処理(プロセス) : データを受け取って変換し、送り出す働き。例 受注を登録する データストア : データが留まる場所。例 受注ファイル, 商品マスタ データフロー : 上の3つの間を流れるデータ。矢印に名前を付ける。例 受注データ /* 受注業務の第1階層をDFDで書き下すと */ 顧客 --注文書--> [1 受注を登録する] --受注データ--> 《受注ファイル》 《商品マスタ》 --在庫数--> [2 在庫を引き当てる] --引当結果--> 《受注ファイル》 《受注ファイル》 --出荷指示--> [3 出荷を指示する] --出荷指示書--> 倉庫 /* DFDに書けないもの: 処理の順序, 条件分岐, 実行のタイミング, 制御の流れ */ /* それらを表したいときはBPMNやアクティビティ図を使う */
| 体系 | 記述する対象 | よく使う成果物 |
|---|---|---|
| ビジネスアーキテクチャ | 業務の内容、流れ、組織と役割 | 業務機能構成図、業務フロー、DFD、BPMN |
| データアーキテクチャ | 業務が扱う情報の構造と関係 | 情報体系整理図、E-R図、データ定義 |
| アプリケーションアーキテクチャ | 業務を支えるシステムの機能構成 | 情報システム関連図、機能構成図 |
| テクノロジアーキテクチャ | システムを動かす技術基盤 | ネットワーク構成図、ハードウェア構成図、基盤方式 |
- 全体最適化
- 部門ごとの個別最適で生じる重複や断絶をなくし、組織全体として効率と効果が最大になるよう情報システムを設計する考え方。方針と計画の形で文書化する。
- CIO
- 最高情報責任者。情報システム戦略の策定と全体最適化に責任を持ち、経営戦略とITを結び付ける役割を担う経営層の職位。
- EA
- エンタープライズアーキテクチャ。組織の姿をビジネス・データ・アプリケーション・テクノロジの4体系で記述し、現状とあるべき姿の差から移行計画を作る枠組み。
- ギャップ分析
- 現状(As-Is)とあるべき姿(To-Be)を並べ、両者の差を洗い出す作業。差が見えて初めて、何から着手するかの優先順位を決められる。
- 参照モデル
- EAで用いる、あらかじめ用意された記述の型。業務やデータの分類体系を共通化することで、部門間で粒度をそろえて比較できるようにする。
- BPR
- ビジネスプロセスリエンジニアリング。既存の手順を前提とせず、業務の目的にさかのぼってプロセスを根本から設計し直す取組み。ITは目的ではなく手段として使う。
- BPM
- ビジネスプロセスマネジメント。業務プロセスの設計・実行・監視・改善のPDCAを継続的に回す活動。一度きりの作り直しであるBPRとは時間軸が異なる。
- ワークフローシステム
- 申請から承認までの定型の手続を、あらかじめ定めた順路に沿って電子的に流す仕組み。BPMの実行部分を担い、滞留箇所の可視化にも役立つ。
- DFD
- データフロー図。処理・データストア・外部実体・データフローの4記号でデータの流れを表す。処理の順序や条件分岐、タイミングは表現しない。
- コンテキストダイアグラム
- 対象システム全体を一つの処理として描き、外部実体との間のデータの出入りだけを示したDFDの最上位の図。ここから段階的に詳細化していく。
- BPMN
- ビジネスプロセスモデル表記法。レーンで担当を分け、イベント・アクティビティ・ゲートウェイ・シーケンスフローで手順と分岐を表す。部門をまたぐ業務の合意形成に向く。
- KGIとCSFとKPI
- KGIは最終的に達成したい目標、CSFはその達成に決定的に効く要因、KPIはCSFの進み具合を測る数値指標。KPIは改善すればKGIに近づくものを選ぶ。
- BPO
- ビジネスプロセスアウトソーシング。中核でない業務を外部の専門事業者にまとめて委託すること。資源の集中が利点だが、知見の流出と委託先依存が代償になる。
例題 「まず現行業務を詳細に調査し、その手順をそのままシステムに置き換えて効率化する」という進め方は、BPRの考え方に合っているか。
合っていない。BPRは、いまの手順を所与とせず、業務の目的にさかのぼってプロセスそのものを設計し直す取組みである。現行手順をそのまま写し取ると、紙の時代に必要だった三段階の押印や、部門間の重複入力までシステムに固定してしまい、しかも一度作ると変えにくくなる。正しい順序は、業務の目的と成果を定義し、あるべきプロセス(To-Be)を描き、現状(As-Is)との差を洗い出したうえで、その差を埋める手段としてITを位置づけることである。なお現行業務の調査そのものは不要ではなく、差を測るための基準として必要になる。
例題 複数の部門がそれぞれ別の台帳に同じ顧客情報を持っていて、重複入力が起きている。この重複を洗い出して整理したい。DFDとBPMNのどちらが適しているか。
DFDである。知りたいのは「どのデータがどこに溜まり、誰が読み書きしているか」であり、これはデータストアとデータフローで素直に表せる。同じ顧客データを指すデータストアが複数現れ、同じデータフローが別々の処理へ枝分かれしている箇所が、そのまま重複の候補になる。BPMNは担当と順序と分岐を表す図なので、同じことを書こうとすると手順の記述に埋もれてデータの重複が見えにくい。逆に、承認がどこで滞っているかのように順序とタイミングが論点になる場面ではBPMNが向く。見たいものに合わせて表記法を選ぶ、というのが要点である。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類7:システム戦略 中分類17:システム戦略
ソリューションとクラウドの選び方
SaaS・PaaS・IaaSの責任分界を押さえ、クラウド移行やSOA・API連携をどんな基準で選ぶかが判断できるようになります。
自社で機器を持って自社で運用する形をオンプレミスといい、これに対して、ネットワーク越しに必要なだけ計算資源やサービスを借りる形をクラウドコンピューティングといいます。米国NISTの定義では、クラウドの本質的な特徴を五つ挙げます。利用者が事業者とやり取りせずに資源を確保できるオンデマンドセルフサービス、ネットワーク経由でどこからでも使える幅広いネットワークアクセス、複数の利用者で物理資源を共有する資源の共用、需要に応じて即座に増減できる迅速な弾力性、使った量が計測され従量課金の根拠になる測定されたサービスの五つです。この五つのうち、判断に効くのは弾力性と従量課金です。需要の変動が大きい業務ほどクラウドの相対的な利点が大きく、負荷がほぼ一定で長期に使い続ける業務ほどオンプレミスのほうが安くなる可能性が出てきます。
サービスモデルは三つに分かれます。IaaS(Infrastructure as a Service)は、仮想サーバ・ストレージ・ネットワークといった基盤だけを借りる形で、OSから上は利用者が用意します。PaaS(Platform as a Service)は、OSとミドルウェア、実行環境まで事業者が用意し、利用者はアプリケーションとデータを載せます。SaaS(Software as a Service)は、完成したアプリケーションそのものを使う形で、利用者が管理するのは自分のデータと設定、利用者アカウントだけです。ここで大事なのが責任共有モデルです。事業者と利用者のどちらが何に責任を負うかは層で決まり、上のモデルへ行くほど利用者の責任範囲は狭くなります。ただし、どのモデルでも利用者の責任として必ず残るものがあります。自社のデータそのもの、アクセス権限の設定、利用者アカウントの管理です。「SaaSだからセキュリティは事業者任せでよい」という判断は成り立たず、設定ミスによる情報公開は利用者側の責任になります。
配備モデルは、単一組織が専用で使うプライベートクラウド、不特定多数が共用するパブリッククラウド、共通の関心を持つ複数組織で共用するコミュニティクラウド、これらを組み合わせて連携させるハイブリッドクラウドに分かれます。似た言葉のマルチクラウドは、複数の事業者のパブリッククラウドを併用する形で、特定事業者への依存(ベンダロックイン)を避けたり、事業者ごとの得意分野を使い分けたりする狙いがあります。ハイブリッドが「自社環境と外部を組み合わせる」話であるのに対し、マルチクラウドは「外部を複数使う」話だ、と区別すると混同しません。なお、事業者の設備に自社の機器を置かせてもらう形をハウジング、事業者の機器を借りる形をホスティングといい、これらは仮想化と自動化を前提とするクラウドとは別の概念です。
既存システムをクラウドへ移す方法にもいくつかの段階があります。仮想サーバへほぼそのまま載せ替えるリフトアンドシフト(再ホスト)は、短期間で移せる代わりに、クラウドの弾力性や運用の自動化といった利点をあまり享受できません。ミドルウェアや実行基盤をクラウドのマネージドサービスへ置き換える方式(リプラットフォーム)はその中間、アプリケーションの構造から作り直す方式(リファクタリング)は、効果が最も大きい代わりに費用と期間がかかります。市販のSaaSへ乗り換える、あるいは廃止するという判断もあります。実務では、まず移せるものを短期間で移し、効果の大きいものから順に作り直す、という二段構えが取られることが多くなります。移行の判断で見落とされがちなのが、データの持ち出しにかかる通信料金と、事業者固有のサービスに依存することで生じる乗り換えの困難さです。
システムどうしをつなぐ考え方も整理しておきます。SOA(サービス指向アーキテクチャ)は、業務機能を独立した部品(サービス)として定義し、それらを組み合わせてシステムを構成する設計思想です。業務が変わったときに、組み合わせを変えるだけで対応できることを狙います。似た方向の発想を、より小さい独立した単位と独立した配備で徹底したのがマイクロサービスアーキテクチャで、サービスごとに別のチームが別の技術で開発し、個別に配備できます。柔軟さと引き換えに、サービス間通信の遅延、分散したデータの整合、障害箇所の特定の難しさといった運用の負担が増えます。連携の実装手段としては、HTTPとJSONを使うWeb API、とりわけリソースをURIで表し、GETやPOSTなどのメソッドで操作するRESTスタイルが主流です。公開したAPIを通じて他社サービスと結び付き、新しい価値を生む動きをAPIエコノミーと呼びます。
選択の判断は、機能の適合、費用、統制の三つで考えると整理できます。SaaSは、標準機能で業務が回るなら最も安く速い選択ですが、業務のほうを標準機能に合わせる覚悟が要ります。過度なカスタマイズを求めるなら、SaaSの利点は失われ、PaaSでの構築や内製のほうが妥当になります。IaaSは自由度が高い代わりに、OS以上の運用と脆弱性対応が自社に残ります。統制の面では、データの保存場所が国外になる場合の法令適用、事業者の監査報告書の入手可否、サービス終了時のデータ返却条件を、契約前に確認しておく必要があります。クラウドの採用可否は技術の問題に見えて、実際には「業務を標準に合わせられるか」「統制を契約で担保できるか」という経営判断になります。
/* RESTスタイルのWeb APIの例(受注リソース) */
GET /orders 受注の一覧を取得する
GET /orders/1024 受注番号1024を取得する
POST /orders 受注を新規に登録する
PUT /orders/1024 受注番号1024を置き換える
DELETE /orders/1024 受注番号1024を削除する
/* 応答の例 */
HTTP/1.1 201 Created
Content-Type: application/json
{ "orderId": 1024, "status": "accepted" }
/* 状態をサーバに持たせないので、台数を増やすだけで処理能力を伸ばせる */
/* URIは操作ではなくリソースを表す。/getOrder のような設計にはしない */
| 層 | オンプレミス | IaaS | PaaS | SaaS |
|---|---|---|---|---|
| 自社データと権限設定 | 利用者 | 利用者 | 利用者 | 利用者 |
| アプリケーション | 利用者 | 利用者 | 利用者 | 事業者 |
| ミドルウェアと実行環境 | 利用者 | 利用者 | 事業者 | 事業者 |
| OS | 利用者 | 利用者 | 事業者 | 事業者 |
| 仮想化基盤 | 利用者 | 事業者 | 事業者 | 事業者 |
| 物理サーバとストレージ | 利用者 | 事業者 | 事業者 | 事業者 |
| ネットワークと施設 | 利用者 | 事業者 | 事業者 | 事業者 |
- クラウドの5つの特徴
- オンデマンドセルフサービス、幅広いネットワークアクセス、資源の共用、迅速な弾力性、測定されたサービス。判断に効くのは弾力性と従量課金の2つ。
- IaaS
- 仮想サーバ・ストレージ・ネットワークなどの基盤を借りる形態。OS以上は利用者が用意し、運用も脆弱性対応も利用者に残るため自由度が高い。
- PaaS
- OSとミドルウェア、実行環境まで事業者が用意する形態。利用者はアプリケーションとデータに集中できるが、使える言語や構成は事業者の枠内に限られる。
- SaaS
- 完成したアプリケーションを利用する形態。最も速く安く始められるが、業務を標準機能に合わせる必要があり、過度なカスタマイズには向かない。
- 責任共有モデル
- 事業者と利用者の責任範囲を層で分ける考え方。上位のモデルほど利用者の範囲は狭まるが、自社データ、アクセス権限の設定、アカウント管理は常に利用者に残る。
- ハイブリッドクラウド
- 自社のプライベート環境とパブリッククラウドを組み合わせ、連携させて使う配備モデル。機密性の高い処理を自社に残す使い分けに用いる。
- マルチクラウド
- 複数の事業者のパブリッククラウドを併用する形。特定事業者への依存を避け、得意分野を使い分ける狙いがある。ハイブリッドとは論点が異なる。
- ベンダロックイン
- 特定の事業者や製品に固有の機能へ依存した結果、他へ乗り換える費用が大きくなり、実質的に離れられなくなる状態。
- リフトアンドシフト
- 既存システムをほぼそのまま仮想サーバへ載せ替えるクラウド移行。短期間で移せるが、弾力性や運用自動化といったクラウドの利点は限定的にしか得られない。
- SOA
- サービス指向アーキテクチャ。業務機能を独立したサービスとして定義し、組み合わせてシステムを構成する設計思想。業務変更への追随のしやすさを狙う。
- マイクロサービス
- 小さく独立したサービスに分割し、それぞれを個別に開発・配備する方式。柔軟だが、通信の遅延、分散データの整合、障害箇所の特定という運用負担が増える。
- REST
- リソースをURIで表し、GETやPOSTなどのHTTPメソッドで操作するWeb APIの設計スタイル。状態を持たない呼出しにすることで拡張しやすくする。
- APIエコノミー
- 自社の機能をAPIとして公開し、他社サービスと結び付くことで新たな価値や収益を生む経済圏。決済や地図の連携が代表例。
例題 オンプレミスのサーバをIaaSへ移した。移行後、ゲストOSのセキュリティパッチ適用は誰の責任になるか。
利用者の責任である。IaaSで事業者が責任を負うのは、物理サーバ、ストレージ、ネットワーク、施設、そして仮想化基盤までで、その上に載るOS・ミドルウェア・アプリケーションは利用者が用意し、運用する。したがってゲストOSのパッチ適用も脆弱性の把握も利用者側に残る。ここを事業者任せと誤解すると、パッチが当たらないまま放置される。OSまで事業者が見るのはPaaS以上であり、どの層までを任せたいかがIaaSとPaaSを選び分ける実質的な基準になる。なお、どのモデルであっても、自社データ、アクセス権限の設定、利用者アカウントの管理は利用者の責任として必ず残る。
例題 初期費用4000万円、年間運用費500万円のオンプレミス案と、初期費用なし、年間利用料1500万円のクラウド案がある。何年使うと総額が並ぶか。長期利用が確実な場合、どちらが有利か。
オンプレミス案の総額は 4000 + 500n、クラウド案は 1500n。等しくなるのは 4000 = 1000n より n = 4年で、どちらも6000万円になる。4年より短ければクラウドが安く、4年を超えるとオンプレミスが安い。したがって長期利用が確実なら費用だけを見ればオンプレミスが有利になる。ただし判断材料は総額だけではない。需要が急に増減する見込み、機器の陳腐化と更改費用、運用要員の確保、初期投資を避けたいという資金繰りの事情も加味する。逆に、負荷がほぼ一定で長く使い続ける業務ほど、クラウドの弾力性という利点が効かなくなる点は押さえておきたい。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類7:システム戦略 中分類17:システム戦略
システム化企画と調達
構想から要件定義までの段取りと、RFI・RFPによる調達、請負と準委任の使い分けが分かります。
システムを作ると決めてから作り始めるまでには、順番の決まった段取りがあります。まずシステム化構想の立案で、経営上の課題からシステム化の対象業務と目的、期待する効果、大まかな全体像を描きます。次にシステム化計画の立案で、対象範囲、開発方式、体制、概算費用、スケジュール、投資対効果、リスクを具体化して、投資の可否を経営が判断できる材料にします。そして要件定義で、利用者にとって何ができればよいかを定めます。ここで押さえるべきは、構想と計画は「何のために作るか」「投資に見合うか」を決める段階であり、要件定義は「何を作るか」を決める段階だという役割の違いです。共通フレームでも、企画プロセスと要件定義プロセスは開発プロセスの前段として位置づけられています。順番を飛ばして要件定義から始めると、そもそも何のための投資だったかが誰も答えられなくなります。
要件は三つに分けて考えます。業務要件は、新しい業務をどう回すかという業務側の要求です。機能要件は、システムが何をするかという振る舞いの要求です。非機能要件は、性能、可用性、拡張性、運用性、移行性、セキュリティ、システム環境といった、機能以外の品質と制約の要求です。応用情報でよく問われるのは非機能要件の扱いで、これが曖昧なまま契約すると、後で「応答が遅い」「障害時に戻せない」といった揉め事になります。合意の粒度をそろえるための道具がIPAの非機能要求グレードで、可用性・性能拡張性・運用保守性・移行性・セキュリティ・システム環境とエコロジーの六つの観点ごとに、達成すべき水準を段階で示して選ばせる形になっています。要件定義の成果物は要件定義書で、これに合意しないまま設計へ進むのは、行き先を決めずに出発するのと同じです。
作るものが決まったら、誰に作ってもらうかを決めます。調達の入口がRFI(情報提供依頼書)で、市場にどんな製品や技術があるか、どの事業者が対応できそうかという情報を集める段階です。ここではまだ提案を求めません。次にRFP(提案依頼書)で、システム化の背景と目的、要件、前提条件と制約、提案してほしい範囲、契約条件、そして提案の評価基準とスケジュールを示して、正式に提案を求めます。RFPに要件と評価基準を書いておくことが要点で、これが曖昧だと事業者ごとに前提の違う提案が出てきて比較できません。受け取った提案書は、あらかじめ決めた基準と重み付けに従って評価します。金額だけで選ぶと、実現性の低い安値提案を掴むことになりかねないので、技術的な実現性、体制、実績、保守の条件も含めた総合評価にするのが通例です。評価の公正さを保つため、評価基準は提案を受け取る前に確定させ、評価に関わる者と提案者との個別接触を制限します。
契約の形は、成果に対して払うのか、行為に対して払うのかで大きく変わります。請負は、当事者の一方がある仕事を完成することを約束し、相手方がその仕事の結果に対して報酬を支払う契約です(民法 第632条)。仕事の完成が義務なので、完成しなければ原則として報酬を請求できません。引き渡した目的物が種類または品質について契約の内容に適合しない場合は契約不適合責任を負い、注文者は不適合を知った時から1年以内に通知しなければ、追完請求・報酬減額請求・損害賠償請求・解除ができなくなります(民法 第637条)。また、仕事が完成しない間は、注文者はいつでも損害を賠償して契約を解除できます(民法 第641条)。委任は、法律行為をすることを相手方に委託して承諾を得る契約で(民法 第643条)、法律行為でない事務の委託には委任の規定が準用され、これを準委任といいます(民法 第656条)。システム開発の役務提供は法律行為ではないので、準委任にあたります。
準委任では、受任者は委任の本旨に従い、善良な管理者の注意をもって事務を処理する義務を負います(民法 第644条)。つまり求められるのは、決められた品質の作業を誠実に行うことであって、成果物の完成そのものではありません。報酬は、特約がなければ請求できず、履行した後に請求するのが原則で、履行の割合に応じた請求も定められています(民法 第648条)。なお、平成29年の民法改正で、委任事務の履行により得られる成果に対して報酬を支払う型が明文化されており(民法 第648条の2)、いわゆる成果完成型の準委任がこれにあたります。したがって「準委任なら成果物に関する定めは一切ない」という理解は正確ではありません。契約はいつでも解除できるのが委任の原則ですが、相手方に不利な時期の解除などでは損害賠償が必要になります(民法 第651条)。請負との違いを一言でいえば、完成義務と契約不適合責任を負うのが請負、善管注意義務を負うのが準委任、ということになります。
工程によって不確実性の度合いが違うので、一つの契約で全工程をまとめるのは無理があります。そこでIPAの情報システム・モデル取引・契約書では、工程ごとに契約を分ける多段階契約の考え方を採ります。要件が固まっていない要件定義のような工程は準委任、要件が確定していて成果物を特定できる設計から製造の工程は請負、利用者の主体的な関与が前提となる受入支援や運用テストの支援は準委任、というように工程の性質で選び分けるのが基本です。要件が未確定の段階で請負契約を結ぶと、何をもって完成とするかを決められないまま完成義務だけが生じ、揉め事の温床になります。モデル取引・契約書は中立の立場で作られており、平成29年民法改正への対応のほか、プロジェクトマネジメント義務と協力義務、セキュリティ、複数契約の関係といった論点も整理されています。なお、委託先の要員に自社が直接指揮命令を行うと、契約の名目が請負や準委任でも実態は労働者派遣とみなされる(偽装請負)ため、指揮命令系統を混ぜないことが運用上の大前提になります。
/* 調達の流れと、それぞれの段階で確定させるもの */ 1. RFI(情報提供依頼) : 市場にどんな解があるか。事業者の対応可否と概略情報を集める 2. RFP(提案依頼) : 目的, 要件, 制約, 提案範囲, 契約条件, 評価基準を提示して提案を求める 3. 提案書の受領 : 事業者から機能, 体制, 実績, 見積金額, スケジュールの提案を受ける 4. 提案評価 : 事前に決めた基準と重みで採点する。金額のみで決めない 5. ベンダー選定と契約 : 工程の性質に応じて請負か準委任かを選ぶ(多段階契約) /* 工程と契約形態の対応の目安 */ 要件定義 -> 準委任(要件が未確定なので完成の定義ができない) 外部設計 -> 準委任または請負(成果物を特定できるかで判断) 内部設計から製造, 結合テスト -> 請負(成果物が特定でき、完成を判定できる) システムテスト, 受入支援 -> 準委任(利用者の主体的な関与が前提)
| 観点 | 請負 | 準委任 |
|---|---|---|
| 約束する内容 | 仕事の完成(民法 第632条) | 事務の処理(民法 第656条により委任の規定を準用) |
| 受注者の中心的な義務 | 仕事を完成させること | 善良な管理者の注意をもって処理すること(民法 第644条) |
| 成果物の不適合への責任 | 契約不適合責任を負う | 原則として負わない。善管注意義務違反があれば債務不履行責任 |
| 不適合の通知期限 | 知った時から1年以内に通知(民法 第637条) | 該当する規定はない |
| 報酬の考え方 | 仕事の結果に対して支払う | 特約がなければ請求できず、履行した後に請求(民法 第648条) |
| 成果に報酬を結び付ける型 | 本来の形 | 成果完成型として可能(民法 第648条の2) |
| 発注者からの解除 | 完成前はいつでも損害賠償して解除可(民法 第641条) | 各当事者がいつでも解除可。不利な時期などは損害賠償(民法 第651条) |
| 向いている工程 | 要件が確定し成果物を特定できる設計から製造 | 要件が未確定の要件定義、利用者の関与が前提の受入支援 |
- システム化構想の立案
- 経営上の課題から、システム化の対象業務・目的・期待効果・全体像を描く段階。何のために作るのかを定める、企画の入口。
- システム化計画の立案
- 対象範囲・開発方式・体制・概算費用・スケジュール・投資対効果・リスクを具体化し、投資の可否を経営が判断できる材料にする段階。
- 非機能要件
- 性能、可用性、拡張性、運用保守性、移行性、セキュリティ、システム環境など、機能以外の品質と制約に関する要求。曖昧なまま契約すると後の紛争の種になる。
- 非機能要求グレード
- 非機能要件の合意を助けるためにIPAが示す枠組み。6つの観点ごとに水準を段階で提示し、発注側と受注側が同じ物差しで選べるようにする。
- RFI
- 情報提供依頼書。市場にどんな製品や技術があり、どの事業者が対応できるかという情報を集める段階の文書。提案そのものはまだ求めない。
- RFP
- 提案依頼書。背景と目的、要件、前提と制約、提案範囲、契約条件、評価基準とスケジュールを示して正式に提案を求める文書。
- 提案評価
- あらかじめ定めた基準と重み付けに従って提案書を採点する作業。金額だけでなく実現性・体制・実績・保守条件を含めた総合評価にするのが通例。
- 請負
- 仕事の完成を約束し、その結果に対して報酬を支払う契約。完成義務と契約不適合責任を負う。根拠は民法 第632条。
- 準委任
- 法律行為でない事務の委託。委任の規定が準用される。受任者は善管注意義務を負うが、成果物の完成義務は原則として負わない。根拠は民法 第656条。
- 善管注意義務
- 善良な管理者の注意をもって委任事務を処理する義務。準委任における受任者の中心的な義務で、根拠は民法 第644条。
- 成果完成型の準委任
- 委任事務の履行により得られる成果に対して報酬を支払うと約した型。民法 第648条の2に定めがあり、準委任でも成果に報酬を結び付けられる。
- 多段階契約
- 工程ごとに契約を分け、工程の性質に合った契約形態を選ぶ考え方。要件が固まっていない工程は準委任、成果物を特定できる工程は請負とするのが基本。
- 情報システム・モデル取引・契約書
- IPAが公開する、発注側と受注側の中立を目指したモデル契約書。多段階契約、民法改正への対応、プロジェクトマネジメント義務と協力義務などを整理している。
- 偽装請負
- 契約の名目は請負や準委任でありながら、発注者が委託先の要員へ直接指揮命令を行い、実態が労働者派遣になっている状態。
例題 準委任契約で発注するが、「成果物が出ないまま費用だけ払うことになるのは避けたい」と社内から懸念が出た。どう答えるか。
準委任でも成果に報酬を結び付ける型が民法に定められている(民法 第648条の2)。委任事務の履行により得られる成果に対して報酬を支払うと約する、いわゆる成果完成型で、成果の引渡しを要するときは引渡しと同時に報酬を支払う。したがって「準委任だから成果物に関する定めは置けない」という理解は正確ではない。一方、履行割合型を選ぶ場合でも、受任者は善良な管理者の注意をもって事務を処理する義務を負う(民法 第644条)ので、何もしなくてよいわけではない。懸念に応えるには、契約書で成果物の定義、中間の報告と受領の手続、報酬の支払条件を具体的に書き込むことになる。
例題 RFPに「本システムに求める性能要件は、一般的な業務システムとして十分な水準とする」と記載した。何が問題で、どう書くべきか。
評価も検収もできない書き方である。「十分な水準」は人によって解釈が違い、提案してくる事業者ごとに前提が変わるので、提案を横に並べて比較できない。納品後も、遅いと感じたときに契約違反だと言えず、追加費用を払って直すことになる。非機能要件は測れる形で書く必要があり、たとえば同時利用者数、対象となる画面や処理、目標とする応答時間、その測定条件、といった要素をそろえる。IPAの非機能要求グレードのように、観点ごとに水準を段階で示す枠組みを使うと、発注側と受注側が同じ物差しで合意しやすくなる。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類7:システム戦略 中分類18:システム企画
IT投資の評価とデジタル技術の活用
投資回収期間・ROI・NPV・TCOで投資の善し悪しを判断し、IoTやAI、データ利活用の使いどころを見極められるようになります。
IT投資は「効果がありそうだから」では通りません。金額に換算した効果と費用を並べて、投資に値するかを説明できる形にします。最も単純なのが投資回収期間法(ペイバック法)で、初期投資を毎年の効果額で回収し終えるまでの年数を求めます。分かりやすく、短いほどリスクが小さいと言えるのが利点ですが、回収後に生じる効果を一切考えないという弱点があります。回収に3年かかるが10年効果が続く案と、2年で回収するが3年で終わる案では、回収期間だけを見ると後者が勝ってしまいます。次にROI(投資利益率)で、投資額に対して得られた利益の割合を示します。ここで注意したいのは、分子が「効果額」ではなく「利益」だという点です。年間の効果額から、その効果を得るためにかかる運用費を差し引いた額を使います。運用費を引き忘れると、実力より良い数字が出ます。
お金の時間価値を考慮するのがNPV(正味現在価値)です。1年後の100万円は、いま手元にある100万円より価値が低いという前提に立ち、将来の効果額を割引率で割り引いて現在価値に直します。n年後の金額の現在価値は、その金額を(1 + 割引率)のn乗で割った値です。すべての年の現在価値を合計し、そこから初期投資を引いた値がNPVで、正なら投資に値すると判断します。割引率を高く設定するほど将来の効果は小さく評価されるので、リスクの高い案件には高い割引率を当てるという使い方をします。NPVがちょうど0になる割引率をIRR(内部収益率)といい、これが資本コストを上回るかどうかで判断する方法もあります。回収期間法とNPVを比べると、回収期間法は時間価値も回収後の効果も無視するのに対し、NPVは両方を織り込むぶん、判断の根拠としては強くなります。
費用の側を漏れなく数えるための考え方がTCO(総所有コスト)です。導入時にかかるイニシャルコスト(機器、ソフトウェアライセンス、構築費、移行費、教育費)だけでなく、稼働後に毎年かかるランニングコスト(保守費、通信費、電力、運用要員の人件費、更改費用)まで含めた総額で比べます。導入費が安い案が、運用費まで含めると高くつくというのはよくある話で、クラウドとオンプレミスの比較はまさにこれにあたります。初期投資が大きく年間費用が小さい案と、初期投資がなく年間費用が大きい案は、どこかの年で総額が並びます。何年使うつもりかを決めなければ、どちらが安いかは決まりません。IT投資を性質で分類して配分を考える見方もあり、業務の効率化を狙うもの、情報活用を狙うもの、事業の変革を狙うもの、共通基盤を整えるものでは、期待する効果の測り方もリスクの大きさも異なります。
近年の投資判断の中心にあるのがデジタル技術の活用です。IoTは、機器やセンサをネットワークにつなぎ、現場の状態を継続的に取得して活用する仕組みです。振動や温度の変化から故障の兆しを捉えて壊れる前に手を打つ予兆保全、現実の設備を仮想空間に写し取って挙動を試すデジタルツインなどが代表的な使い方になります。大量の機器を安く長期間つなぐため、低速だが低消費電力で遠くまで届くLPWAのような通信方式が使われます。すべてのデータをクラウドへ送ると通信量と遅延が問題になるので、現場側の機器で一次処理を行うエッジコンピューティングと組み合わせるのが定石です。IoTで押さえるべき判断は「何を測れば意思決定が変わるか」であり、測れるからという理由でデータを集めても、使い道がなければ通信費と保管費だけが積み上がります。
AIの使いどころも、万能の道具としてではなく、向き不向きで考えます。機械学習は、正解付きのデータから規則を学ぶ教師あり学習、正解なしでデータの構造を見つける教師なし学習、試行錯誤の結果に報酬を与えて方策を学ぶ強化学習に大別されます。需要予測や与信判定のように過去データと結果の対応が大量にある領域、画像や音声のように人手では処理量が追いつかない領域は向いています。反対に、判断の根拠を明示する必要がある領域、正解データが揃わない領域、めったに起きない事象の予測は苦手です。実務上の要点は三つあります。学習データの偏りがそのまま出力の偏りになること、なぜその結論になったかを説明しにくい場合があること(説明可能性の問題)、そして生成AIでは事実と異なる内容をもっともらしく出力することがあることです。したがってAIの出力を最終決定にするのではなく、人が確認して責任を負う設計にするのが基本になります。
データを使えるようにする土台の整備も投資の対象です。分析用に整理して蓄積した基盤がデータウェアハウス、加工前の生データを形式を問わずそのまま溜める場所がデータレイクです。前者は用途を決めて構造化してから入れるのに対し、後者はとりあえず溜めて後から使い道を決められる、という違いがあります。用途別に切り出した小規模なものがデータマート、大量データから規則性や関連を見つけ出す手法がデータマイニング、集計と可視化で意思決定を支援する仕組みがBIツールです。組織横断でデータの定義や品質、権限を管理する取組みをデータガバナンスといい、これがないと同じ「売上」という語が部門ごとに違う意味で使われ、分析結果が食い違います。行政や企業が二次利用できる形で公開するデータがオープンデータで、自社データと組み合わせることで新しい示唆が得られます。データ利活用への投資は効果が読みにくいので、まず問いを立て、その問いに答えるために必要なデータだけを対象に小さく試す、という進め方が現実的です。
/* 正味現在価値(NPV)の計算 */
○実数型: npv(実数型: 初期投資, 実数型の配列: 効果額, 実数型: 割引率)
実数型: 合計 ← 0
for (n を 1 から 効果額の要素数 まで 1 ずつ増やす)
合計 ← 合計 + 効果額[n] / (1 + 割引率)ⁿ
endfor
return 合計 - 初期投資
/* 投資回収期間(毎年の効果額が一定でない場合) */
○実数型: payback(実数型: 初期投資, 実数型の配列: 効果額)
実数型: 累計 ← 0
for (n を 1 から 効果額の要素数 まで 1 ずつ増やす)
if (累計 + 効果額[n] ≧ 初期投資)
return (n - 1) + (初期投資 - 累計) / 効果額[n]
endif
累計 ← 累計 + 効果額[n]
endfor
return -1 /* 期間内に回収できない */
| 手法 | 計算のしかた | 強みと弱み |
|---|---|---|
| 投資回収期間法 | 初期投資を毎年の効果額で回収し終える年数を求める | 分かりやすくリスクの目安になるが、回収後の効果と時間価値を無視する |
| ROI | 利益を投資額で割る。利益は効果額から運用費を引いた額 | 案の規模が違っても比べられるが、効果が続く期間と時間価値を反映しない |
| NPV | 各年の効果額を割引率で現在価値に直して合計し、初期投資を引く | 時間価値と全期間の効果を織り込める。割引率の設定に結果が左右される |
| IRR | NPVが0になる割引率を求める | 率で比較できるが、投資額の大小が見えず、複数解が出る場合がある |
| TCO | イニシャルコストとランニングコストを想定利用年数ぶん合計する | 費用側を漏れなく数えられるが、効果を評価しないので単独では可否を決められない |
- 投資回収期間法
- 初期投資を毎年の効果額で回収し終えるまでの年数で評価する方法。分かりやすいが、回収後に続く効果とお金の時間価値を考慮しない。
- ROI
- 投資利益率。投資額に対する利益の割合。分子は効果額そのものではなく、効果額から運用費などを差し引いた利益である点に注意する。
- NPV
- 正味現在価値。将来の効果額を割引率で現在価値に直して合計し、初期投資を引いた値。正なら投資に値すると判断する。
- 割引率
- 将来の金額を現在価値に直すときに用いる率。n年後の金額は(1 + 割引率)のn乗で割る。リスクが高い案件ほど高い率を当てる。
- IRR
- 内部収益率。NPVがちょうど0になる割引率。これが資本コストを上回るかどうかで投資の可否を判断する方法がある。
- TCO
- 総所有コスト。導入時のイニシャルコストと、稼働後のランニングコストを合わせた総額。何年使うかを決めないと案の比較ができない。
- 予兆保全
- センサで得た振動や温度などの変化から故障の兆しを捉え、壊れる前に手を打つ保全方式。停止による損失と保全費用の両方を下げられる。
- デジタルツイン
- 現実の設備や工程を仮想空間に写し取り、実物を動かさずに挙動や変更の影響を試せるようにする仕組み。
- LPWA
- 低消費電力で広い範囲をカバーする無線通信方式の総称。通信速度は低いが、多数のセンサを長期間つなぐIoT用途に向く。
- エッジコンピューティング
- 現場に近い機器側でデータの一次処理を行う方式。クラウドへ送る通信量と応答遅延を抑えられ、IoTと組み合わせて使われる。
- 教師あり学習と教師なし学習
- 前者は正解付きのデータから入力と出力の対応規則を学ぶ方式、後者は正解なしでデータの構造や集まりを見つける方式。強化学習は報酬を手掛かりに方策を学ぶ。
- 説明可能性
- AIがなぜその結論を出したのかを人が理解できる度合い。与信や採用のように理由の提示が求められる領域では、精度だけでなくこの性質が要件になる。
- データウェアハウスとデータレイク
- 前者は用途を決めて構造化したうえで蓄積する分析基盤、後者は生データを形式を問わずそのまま溜める置き場。後から使い道を決められるのが後者の利点。
- データガバナンス
- 組織横断でデータの定義・品質・権限を管理する取組み。これがないと同じ語が部門ごとに違う意味で使われ、分析結果が食い違う。
例題 初期投資3600万円、毎年の効果額が900万円で一定のとき、投資回収期間は何年か。また、この指標だけで投資を判断してよいか。
3600 / 900 = 4年である。判断はこれだけでは足りない。回収期間法は、回収し終えた後に効果がどれだけ続くかをまったく考えない。仮にこの案の効果が5年目以降も10年続くなら実際の価値は大きいし、5年目に設備更改が必要なら価値は小さい。またお金の時間価値も無視しているので、同じ900万円でも1年後と4年後では価値が違うという点も反映されない。回収期間はリスクの目安として使い、投資の可否はNPVのように全期間と時間価値を織り込んだ指標と併せて判断する。
例題 初期投資1000万円、1年後から3年間にわたり毎年400万円の効果が見込まれる案がある。割引率を5%としたとき、NPVはいくらか。投資に値するか。
各年の現在価値は、1年後が 400 / 1.05 = 380.95万円、2年後が 400 / 1.05² = 362.81万円、3年後が 400 / 1.05³ = 345.54万円。合計すると1089.30万円で、初期投資1000万円を引いたNPVは約89.3万円である。正の値なので投資に値すると判断できる。割り引かずに単純合計すると1200万円となり、差引きは200万円と出るが、これは時間価値を無視した過大評価である。同じ効果額でも受け取る時期が遅いほど価値が下がる、というのがNPVの考え方の中心にある。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類7:システム戦略 中分類18:システム企画
経営戦略と企業法務
経営戦略と競争優位
会社がどの市場でどう戦うかを決めるとき、どの分析道具をどの場面で使うのかが分かります。
経営戦略とは、限りある経営資源をどこに集中させ、どの市場で誰に対してどう勝つかを決めた筋道のことです。戦略がないと、目の前の案件に人と金が散らばり、どれも中途半端になります。応用情報では用語の暗記ではなく、「この状況ではどの分析を使うか」「その分析から何が言えるか」が問われます。だから道具ごとに、何を軸にして何を見ているのかを押さえるのが近道です。
外部と内部を同時に見る道具がSWOT分析です。自社の内部を強み(Strength)と弱み(Weakness)に、外部環境を機会(Opportunity)と脅威(Threat)に分けて整理します。強みと機会を掛け合わせて攻める、弱みと脅威が重なるところは撤退や回避を考える、というように、掛け合わせて戦略の案を出すところまでが分析の目的です。外部だけを広く見るならPEST分析で、政治(Politics)・経済(Economy)・社会(Society)・技術(Technology)の四つの切り口からマクロ環境を洗い出します。市場と競合と自社の三者を見るなら3C分析で、顧客(Customer)・競合(Competitor)・自社(Company)を突き合わせ、顧客が求めていて競合が満たせず自社が提供できる領域を探します。
業界そのものの儲けやすさを見る道具がファイブフォース分析です。業界内の既存の競合企業どうしの敵対関係を中心に、新規参入の脅威、代替品の脅威、買い手の交渉力、売り手の交渉力の五つの力で業界構造を評価します。五つの力が強いほど利益は圧迫されます。たとえば買い手が少数の大企業に集中していれば値下げを迫られやすく、参入障壁が低ければ新しい競合が次々に現れて価格競争になります。分析の結論は「この業界に入るか」だけでなく、「どの力を弱める手を打つか」にもつながります。
自社の中を見る道具がバリューチェーン分析です。事業活動を、購買物流・製造・出荷物流・販売やマーケティング・サービスといった主活動と、全般管理・人事労務管理・技術開発・調達活動といった支援活動に分解し、どの活動でどれだけの価値とコストが生まれているかを調べます。価値を生んでいる活動には投資を厚くし、価値を生んでいない活動は外部委託や廃止を検討します。経営資源が競争優位の源泉になるかを見る枠組みがVRIO分析で、経済価値(Value)・希少性(Rarity)・模倣困難性(Inimitability)・組織(Organization)の四つの問いに順に答えていきます。四つすべてを満たす資源が、長く続く競争優位を生みます。他社がまねできず顧客価値に直結する中核的な能力をコアコンピタンスといい、そこに資源を集中し、それ以外はアウトソーシングするという判断につながります。
複数の事業を抱える会社が、どこに投資しどこから引き揚げるかを決める道具がPPM(プロダクトポートフォリオマネジメント)です。縦軸に市場成長率、横軸に相対的市場占有率を取り、四つの象限に事業を置きます。成長率も占有率も高い花形は資金を生むが成長のために資金も食うので収支は均衡しがちです。成長率が下がっても占有率が高い金のなる木は、追加投資が少なくて済むため資金の供給源になります。成長率が高いのに占有率が低い問題児は、資金を投入して花形に育てるか撤退するかを決める対象です。どちらも低い負け犬は撤退や売却を検討します。基本の筋は、金のなる木で稼いだ資金を問題児に回して花形に育てる、という資金の流れを作ることです。
事業をどう広げるかを整理したのがアンゾフの成長マトリクスです。製品を既存と新規、市場を既存と新規に分けた四つの組合せで、既存製品を既存市場に売る市場浸透、既存製品を新しい市場に売る新市場開拓、新製品を既存市場に売る新製品開発、新製品を新市場に売る多角化に分かれます。右下の多角化ほど、知らない製品を知らない顧客に売ることになるのでリスクが高くなります。競争のしかたでは、価格や品質で他社と正面から戦う競争戦略のほかに、競争のない新しい市場そのものを作り出すブルーオーシャン戦略という考え方があります。
自前でそろわない資源を外から得る手段が、M&Aとアライアンスです。M&A(合併・買収)は相手の会社や事業そのものを手に入れるので、技術や顧客基盤を一気に取り込めて意思決定も一本化できますが、多額の資金が要り、企業文化の統合に失敗すると期待した効果が出ません。買収後の統合作業をPMIといいます。アライアンス(提携)は資本関係を持たない業務提携から、互いに出資し合う資本提携、共同で新会社を設立する合弁(ジョイントベンチャー)まで幅があります。手を組む相手を変えやすく投資も小さくて済む反面、相手を支配できないので主導権を握りにくく、ノウハウが流出する恐れもあります。判断は「速さと支配力が要るならM&A、身軽さとリスク分散が要るならアライアンス」と押さえます。
資源を外に出す形も整理しておきましょう。アウトソーシングは自社の業務を外部の専門事業者に委託することで、コアコンピタンス以外に人を割かずに済みます。BPOは業務プロセスをまとめて外部に委ねる形態です。シェアードサービスはグループ各社に散らばっていた経理や人事などの間接業務を一つの組織に集約する社内の取組みで、外部に出すアウトソーシングとは向きが逆である点に注意します。新しい事業や企業を育てる支援を行う組織や仕組みをインキュベーターといいます。
| 手法 | 見る対象 | 軸・観点 | 分析の結論として出るもの |
|---|---|---|---|
| SWOT分析 | 内部と外部の両方 | 強み・弱み・機会・脅威 | 掛け合わせから導く戦略の候補 |
| PEST分析 | 外部(マクロ環境) | 政治・経済・社会・技術 | 自社では変えられない前提条件 |
| 3C分析 | 市場・競合・自社 | 顧客・競合・自社 | 自社が勝てる領域の絞り込み |
| ファイブフォース分析 | 外部(業界構造) | 五つの力の強さ | その業界の儲けやすさと打つべき手 |
| バリューチェーン分析 | 内部(活動の連鎖) | 主活動と支援活動 | 価値を生む活動と生まない活動 |
| VRIO分析 | 内部(経営資源) | 価値・希少性・模倣困難性・組織 | 持続的な競争優位の源泉かどうか |
| PPM | 事業の組合せ | 市場成長率と相対的市場占有率 | 事業間の資源配分と撤退の判断 |
| 成長マトリクス | 成長の方向 | 製品の新旧と市場の新旧 | 四つの成長方向とそのリスクの大小 |
- SWOT分析
- 自社の内部を強み・弱みに、外部環境を機会・脅威に分けて整理する手法。四つを並べて終わりではなく、強みと機会を掛け合わせるなど組合せから戦略案を導くところまでが目的。
- PEST分析
- 政治・経済・社会・技術の四つの切り口でマクロな外部環境を洗い出す手法。自社では変えられない大きな流れをつかむために使う。
- 3C分析
- 顧客・競合・自社の三者を突き合わせて、顧客が求め、競合が満たせず、自社が提供できる領域を探す手法。
- ファイブフォース分析
- 既存競合との敵対関係、新規参入の脅威、代替品の脅威、買い手の交渉力、売り手の交渉力の五つの力で業界の構造と収益性を評価する手法。五つの力が強いほど業界の利益は圧迫される。
- バリューチェーン分析
- 事業活動を主活動(購買物流・製造・出荷物流・販売やマーケティング・サービス)と支援活動(全般管理・人事労務管理・技術開発・調達活動)に分解し、どの活動が価値を生んでいるかを調べる手法。
- VRIO分析
- 経営資源が競争優位の源泉になるかを、経済価値・希少性・模倣困難性・組織の四つの問いで評価する枠組み。四つすべてを満たす資源が持続的な競争優位を生む。
- コアコンピタンス
- 他社がまねしにくく、顧客に価値をもたらし、複数の事業に応用できる自社の中核的な能力。ここに資源を集中し、それ以外は外部に委ねるという判断の基準になる。
- PPM
- プロダクトポートフォリオマネジメント。市場成長率と相対的市場占有率の二軸で事業を花形・金のなる木・問題児・負け犬に分類し、資源配分を決める手法。金のなる木で得た資金を問題児に投じて花形に育てるのが基本の流れ。
- 金のなる木
- 市場成長率は低いが相対的市場占有率が高い事業。追加投資が少なくて済むため資金の供給源になり、その資金を成長分野に回す。
- 問題児
- 市場成長率は高いが相対的市場占有率が低い事業。資金を投じて花形に育てるか、見込みがなければ撤退するかを判断する対象。
- 成長マトリクス
- アンゾフの成長マトリクス。製品と市場をそれぞれ既存と新規に分け、市場浸透・新市場開拓・新製品開発・多角化の四つの成長方向に整理したもの。多角化がもっともリスクが高い。
- ブルーオーシャン戦略
- 既存市場での価格や品質の争いを避け、競争のない新しい市場空間そのものを作り出す戦略。既存の激しい競争市場はレッドオーシャンと呼ばれる。
- M&A
- 合併と買収。他社や他社の事業を取得して経営資源を一気に手に入れる手段。速さと支配力を得られるが多額の資金を要し、買収後の統合作業(PMI)に失敗すると効果が出ない。
- アライアンス
- 企業どうしの提携。資本関係を持たない業務提携、互いに出資する資本提携、共同出資で新会社を作る合弁(ジョイントベンチャー)などがある。投資が小さく身軽だが相手を支配できない。
- シェアードサービス
- グループ各社に重複していた経理・人事などの間接業務を一つの組織に集約する社内の取組み。業務を外部に出すアウトソーシングとは向きが逆である。
- BPO
- ビジネスプロセスアウトソーシング。個々の作業ではなく、業務プロセスをまとまりごと外部の専門事業者に委ねる形態。
例題 市場成長率は低いが相対的市場占有率が高い事業がある。PPMではどこに分類され、その事業に対して取るべき基本の方針は何か。
金のなる木に分類される。市場が伸びていないので大きな追加投資は要らず、高い占有率のおかげで安定して資金を生む。したがって設備や販促への投資は維持水準に抑え、そこで得た資金を問題児や花形など成長分野に回すのが基本の方針になる。占有率が高いからといって成熟市場に大きく再投資しても、市場そのものが伸びない以上、投じた分の回収は見込みにくい。
例題 部品を供給してくれる会社が一社しかなく、その会社が価格を決めている。ファイブフォースのどの力が強い状態か。この力を弱めるにはどうすればよいか。
売り手(供給業者)の交渉力が強い状態である。弱める手としては、代替となる供給元を新たに開拓して調達先を複数にする、部品を自社で内製できるようにする、規格品に設計変更して調達先を選べるようにする、といった方法がある。いずれも「その一社でなければ困る」という状態を崩すことがねらいで、値下げ交渉そのものより構造を変えるほうが効く。
例題 自社にない生産技術を短期間で確実に手に入れたい。相手企業の買収と、資本関係を持たない業務提携のどちらを選ぶべきか。判断の観点を述べよ。
速さと確実な支配力を最優先するなら買収を選ぶ。技術と人材、設備をまとめて取り込め、意思決定も一本化できるからである。ただし多額の資金が必要で、買収後の統合(PMI)で企業文化や業務の食い違いを解消できないと期待した効果は出ない。技術がまだ実用の見込みが不確かで投資を抑えたい、あるいは複数の相手と並行して試したいのであれば、身軽で解消もしやすい業務提携が向く。その代わり相手を支配できないため主導権を握りにくく、自社ノウハウの流出にも備えが要る。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類8:経営戦略
マーケティングと技術戦略
誰に何をいくらでどう届けるかを決める枠組みと、新しい技術が世の中に広がるまでの道筋が分かります。
マーケティングは「売り込む技術」ではなく、売れる仕組みを作る活動です。まず市場を似た者どうしのかたまりに分けるセグメンテーション(市場細分化)を行います。分ける軸には、年齢や性別や所得といった人口統計的な軸、地域といった地理的な軸、価値観やライフスタイルといった心理的な軸、購買頻度や利用場面といった行動的な軸があります。次に、分けたかたまりのうちどこを狙うかを決めるターゲティングを行い、最後に、狙った顧客の頭の中で自社の製品をどんな位置づけに置くかを決めるポジショニングを行います。この三段階の頭文字を取ってSTPと呼びます。順番が大事で、狙いを決めないまま製品や価格を考えると、誰にも刺さらないものができます。
狙いが決まったら、売り手側の打ち手を四つに整理します。これがマーケティングミックスの4Pで、製品(Product)・価格(Price)・流通(Place)・販売促進(Promotion)です。四つはばらばらに決めるのではなく、狙った顧客像と矛盾しないようにそろえます。高級路線の製品を安売り店で投げ売りすれば、製品の位置づけそのものが壊れます。この4Pを買い手の側から言い換えたものが4Cで、顧客価値(Customer Value)・顧客が負担する費用(Cost)・利便性(Convenience)・コミュニケーション(Communication)に対応します。4Pが「自社が何をするか」の並びであるのに対し、4Cは「顧客にとって何であるか」の並びであるところが違いです。
製品には売れ行きの一生があります。製品ライフサイクルは、導入期・成長期・成熟期・衰退期の四つに分かれます。導入期は認知が低く売上も利益も小さいので、認知を広げる投資が中心になります。成長期は需要が急に伸び、競合も次々に参入するので、生産能力と流通網を広げて占有率を取りにいきます。成熟期は需要の伸びが止まり、製品の違いが小さくなって価格競争になりやすいので、差別化と費用の抑制が課題になります。衰退期は需要が縮むので、撤退の時期を見極めます。PPMの市場成長率の軸と重ねて考えると、成長期の製品は問題児か花形、成熟期の製品は金のなる木に当たりやすいという対応が見えます。
価格の決め方にもいくつかの型があります。原価に一定の利幅を乗せるコストプラス法(原価加算法)は計算が簡単ですが、顧客がその値段で買うかは考慮されていません。競合の価格に合わせる方法もあります。新製品を出すときの二つの代表的な戦略が、上澄み吸収価格戦略(スキミングプライシング)と市場浸透価格戦略(ペネトレーションプライシング)です。スキミングは最初に高い価格を付けて、高くても欲しい層から開発費を早く回収する戦略で、模倣されにくい技術がある場合に向きます。ペネトレーションは最初から低い価格を付けて一気に占有率を取り、量産による原価低減で後から利益を得る戦略で、後発の参入を防ぎたい場合や規模の効果が効く製品に向きます。このほか、複数の製品をまとめて割安に売る抱き合わせ価格や、需要に応じて価格を動かすダイナミックプライシングも押さえておきます。
ブランドは、顧客が「これなら安心だ」と思う記憶の集まりです。ブランドが強いと、同じ品質でも高い価格が受け入れられ、新製品も受け入れられやすくなります。企業名をそのまま製品に使うのがコーポレートブランド、製品ごとに別の名前を付けるのが個別ブランドです。顧客一人が取引期間全体で自社にもたらす利益の総額をライフタイムバリュー(LTV)といい、いま一回の売上ではなく長い付き合いで見るという発想です。顧客との関係を情報システムで支えるのがCRMで、購買履歴や問合せ履歴を一元管理して、顧客ごとに合った対応を行います。
技術の側に目を移します。イノベーションには、既存の製品や工程を少しずつ良くする漸進的なものと、これまでの延長にない新しい価値を生む破壊的なものがあります。既存の優良企業が、既存顧客の声に忠実に高機能化を進めた結果、性能は低いが安くて手軽な破壊的技術に足元を崩される現象をイノベーションのジレンマといいます。新しい製品の分類では、製品そのものを新しくするプロダクトイノベーションと、作り方や届け方を新しくするプロセスイノベーションを区別します。
新技術が普及していく順番を説明したのが、イノベータ理論です。採用の早い順に、イノベータ(革新者)、アーリーアダプタ(初期採用者)、アーリーマジョリティ(前期追随者)、レイトマジョリティ(後期追随者)、ラガード(遅滞者)の五つに分かれます。ここで問題になるのが、アーリーアダプタとアーリーマジョリティの間にある深い溝で、これをキャズムといいます。新しさそのものに価値を感じる層と、確実に役立つ実績があってはじめて動く層とでは、買う理由が違うためです。キャズムを越えるには、性能を訴えるだけでなく、特定の用途に絞った完成した解決策として提示し、導入事例や保守体制といった安心材料をそろえる必要があります。
技術そのものの伸びしろを見る図が技術のSカーブです。横軸に投じた開発資源や時間、縦軸に技術の性能を取ると、初期は伸びが鈍く、途中で急に伸び、やがて物理的な限界に近づいて頭打ちになるS字を描きます。頭打ちの手前で次の技術のSカーブに乗り換えることが技術戦略の要点で、いまの技術が最も儲かっている時期に次の投資を決める必要があるため判断が難しくなります。研究開発を自社に閉じずに、他社や大学、顧客の知恵と技術を取り込んで進める考え方がオープンイノベーションです。自前主義(クローズドイノベーション)に比べて開発の速度と選択肢が増える一方、知的財産の扱いと成果の配分をあらかじめ契約で決めておかないと後で争いになります。技術を経営の観点から管理し、事業に結び付ける取組み全体を技術経営(MOT)といい、いつどの技術を実用化するかを時間軸に並べた計画書を技術ロードマップといいます。
研究開発の成果が事業になるまでには、いくつもの関門があります。基礎研究から製品開発に移る手前の関門を魔の川、開発から事業化に移る手前の関門を死の谷、事業化した後に既存企業との競争を勝ち抜いて市場に定着するまでの関門をダーウィンの海と呼びます。どこで止まっているのかを見分けると、必要な手当てが資金なのか、技術なのか、販路なのかが分かります。
| 段階 | 売上の動き | 競合の数 | 主な課題 |
|---|---|---|---|
| 導入期 | 小さく伸びが鈍い | 少ない | 認知の獲得。広告と試用の機会づくりに投資する |
| 成長期 | 急激に伸びる | 急に増える | 生産能力と流通網の拡大。市場占有率を取りにいく |
| 成熟期 | 伸びが止まる | 多いまま | 差別化と原価低減。価格競争に巻き込まれない工夫 |
| 衰退期 | 縮小する | 撤退が始まる | 撤退時期の見極めと、残存者としての利益確保 |
- セグメンテーション
- 市場細分化。市場を似た性質の顧客のかたまりに分けること。人口統計的・地理的・心理的・行動的な軸で分ける。
- ターゲティング
- 細分化した市場のうち、どのかたまりを狙うかを決めること。セグメンテーションの次、ポジショニングの前に行う。
- ポジショニング
- 狙った顧客の頭の中で、自社の製品を競合と比べてどんな位置づけに置くかを決めること。
- 4P
- マーケティングミックスを売り手の視点で整理したもの。製品・価格・流通・販売促進の四つ。四つが狙った顧客像と矛盾しないようそろえることが大切。
- 4C
- 4Pを買い手の視点で言い換えたもの。顧客価値・顧客が負担する費用・利便性・コミュニケーションの四つ。
- 製品ライフサイクル
- 製品の売上と利益の推移を導入期・成長期・成熟期・衰退期の四段階でとらえる考え方。段階ごとに打つべき手が変わる。
- スキミングプライシング
- 上澄み吸収価格戦略。新製品に高い価格を付け、価格が高くても買う層から開発費を早期に回収する戦略。模倣されにくい技術がある場合に向く。
- ペネトレーションプライシング
- 市場浸透価格戦略。新製品に低い価格を付けて短期間で市場占有率を確保し、量産による原価低減で後から利益を得る戦略。後発の参入を抑えたい場合に向く。
- ライフタイムバリュー
- LTV。一人の顧客が取引を続ける期間全体で自社にもたらす利益の総額。一回の売上ではなく長期の関係で顧客を評価する指標。
- イノベーションのジレンマ
- 優良企業が既存顧客の要求に忠実に高機能化を進めた結果、性能は劣るが安くて手軽な破壊的技術に市場を奪われる現象。
- プロセスイノベーション
- 製品そのものではなく、生産方法や供給の仕組みを革新して原価や納期を大きく改善すること。製品自体を新しくするのはプロダクトイノベーション。
- キャズム
- 新技術の普及過程で、アーリーアダプタとアーリーマジョリティの間にある深い溝。買う理由が異なるため、実績と完成した解決策を示さないと越えられない。
- イノベータ理論
- 新製品の採用者を早い順にイノベータ・アーリーアダプタ・アーリーマジョリティ・レイトマジョリティ・ラガードの五つに分類する考え方。
- 技術のSカーブ
- 投じた資源や時間に対する技術の性能の伸びが、初期は緩やか、中期は急速、後期は頭打ちとなるS字を描くこと。頭打ちの手前で次の技術に乗り換える判断が要る。
- オープンイノベーション
- 自社に閉じず、他社・大学・顧客など外部の知識と技術を取り込んで研究開発を進める考え方。知的財産の扱いと成果の配分を契約で定めておく必要がある。
- 技術経営
- MOT。技術を経営資源としてとらえ、研究開発への投資や技術の獲得・供与を事業戦略と結び付けて管理する取組み。
- 死の谷
- 研究開発の成果が製品開発の段階から事業化の段階へ移るときに立ちはだかる資金や体制の壁。基礎研究から製品開発への壁は魔の川、事業化後に市場で生き残るまでの壁はダーウィンの海。
例題 模倣が難しい独自の測定技術を用いた新製品を発売する。開発費を早く回収したい場合、スキミングとペネトレーションのどちらを選ぶか。
スキミングプライシング(上澄み吸収価格戦略)を選ぶ。模倣が難しいため、当面は競合が同等品を出せず、高い価格を維持できる見込みがある。価格が高くても価値を認める層から先に売り、開発費を早期に回収してから段階的に価格を下げていく。逆に、模倣が容易で後発がすぐ現れる製品なら、低価格で一気に占有率を取るペネトレーションのほうが合理的である。
例題 新しい業務用機器が、新しもの好きの企業には売れているのに、その先の一般的な企業層に広がらない。何が起きているか。越えるには何が要るか。
キャズムに直面している。アーリーアダプタは新しさや先行者利益を買うが、アーリーマジョリティは失敗しない確実さを買うため、同じ売り方では通用しない。越えるには、用途を一つに絞って「この業務ならこれで解決する」という完成した形にまとめ、同業種の導入事例、保守や教育の体制、他システムとの接続実績といった安心材料を示すことが要る。機能の数や性能値を訴え続けても溝は埋まらない。
例題 自社の主力技術の性能向上が、開発費を増やしてもほとんど進まなくなった。技術のSカーブではどの位置か。取るべき行動は何か。
Sカーブの上端、性能が限界に近づいて頭打ちになった位置にある。ここで同じ技術に投資を続けても、費やした額に見合う性能向上は得られない。次の原理に基づく新しい技術のSカーブへ乗り換える準備、すなわち代替技術の探索や外部からの技術獲得、オープンイノベーションによる共同開発に資源を振り向けるべきである。難しいのは、この判断が必要になる時期は既存技術がまだ最も収益を上げている時期と重なる点である。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類8:経営戦略
ビジネスインダストリと生産・在庫・品質
ITが産業の現場でどう使われているかと、ものを作る・持つ・良くするための定番の手法が分かります。
インターネットを使った商取引の形をe-ビジネスといいます。取引の相手による分類が基本で、企業どうしの取引がBtoB、企業と消費者の取引がBtoC、消費者どうしの取引がCtoCです。企業と行政の取引はBtoG、社内向けはBtoEと表します。企業間で受発注や請求のデータを、取り決めた形式でやり取りする仕組みがEDIです。EDIでは、通信手順・データの形式(フォーマット)・業務の運用の取り決め・取引の基本契約という四つの階層で規約を決めておく必要があります。決済の面では、電子マネーやコード決済といった電子決済システム、暗号技術を使ったデジタル通貨が広がっています。
実店舗では品ぞろえの都合で置けなかった、あまり売れない商品を大量に並べても、その売上の合計が全体で無視できない大きさになる現象をロングテールといいます。在庫や陳列の費用が小さいネット販売だからこそ成り立つ考え方で、売れ筋だけを追う品ぞろえとは逆の発想です。売れ筋の一部が売上の大半を占めるという傾向を示すパレートの法則と対になる考え方として押さえると整理しやすくなります。遊休資産や個人の時間・技能を、必要な人に一時的に貸し出す仕組みをシェアリングエコノミーといい、自動車や住居、駐車場、家事や配送の労働力などが対象になります。所有から利用への転換であり、貸し手と借り手の相互評価によって信頼を担保する点が特徴です。移動のさまざまな手段を一つのサービスとしてまとめ、検索から予約、決済までを一括で扱う考え方をMaaSといいます。
IoTは、機器や設備にセンサと通信機能を持たせ、収集したデータを分析して現場を改善する仕組みです。工場に適用して設備の稼働状況や品質データを収集し、生産の最適化や故障の予知に生かすものをスマートファクトリー、農業に適用して土壌や気象、生育の状況を測って施肥や灌水を制御するものをスマート農業といいます。現実の設備や工程をデータで写し取り、計算機の中に同じ振る舞いをする模型を作って試すことをデジタルツインといいます。電力網に通信と制御を組み込んで需給を調整する仕組みがスマートグリッドです。
ものを作る現場の管理に移ります。MRP(資材所要量計画)は、生産計画と、製品がどの部品から組み立てられるかを示す部品構成表(BOM)、そして現在の在庫をもとに、いつ何をいくつ作るか、いくつ買うかを計算する方法です。まず製品の生産数に部品構成表の員数を掛けて総所要量を求め、そこから手持在庫と発注済みの分を差し引いて正味所要量を出し、調達期間を考えて発注の時期を決めます。ここで注意するのは、在庫を差し引くのは各部品の段階であって、製品の生産数から先に引いてはいけないという点です。
JIT(ジャストインタイム)は、必要なものを必要なときに必要な量だけ作るという考え方で、作りすぎの無駄と在庫を減らすことをねらいます。これを現場で回す道具がかんばんです。かんばんは後工程が前工程に「これだけ使ったので、その分だけ作ってほしい」と伝える指示票で、後工程が前工程へ引き取りに行く後工程引取り方式によって、生産の指示が下流から上流へさかのぼって伝わります。上流が需要の予測に基づいて押し出すMRPのやり方(押出し方式)とは、指示の向きが逆になります。JITは在庫が薄いので、供給が止まると生産全体が止まりやすいという弱点も併せて理解しておきます。生産方式では、工程を一列に並べて流す少品種大量向けのライン生産方式と、一人または少人数が組立を一通り担当する多品種少量向けのセル生産方式を対比して押さえます。受注してから作るのが受注生産、需要を見込んで作りだめするのが見込生産です。
在庫は、多すぎれば保管費と陳腐化の損失を生み、少なすぎれば品切れを起こします。そのつり合いを取るのが在庫管理です。定量発注方式は、在庫量があらかじめ決めた発注点まで減ったら、決まった量を発注する方式です。発注点は、調達期間中に使う見込みの量に、需要の変動に備える安全在庫を足して求めます。定期発注方式は、あらかじめ決めた一定の間隔で、そのつど必要量を計算して発注する方式で、需要の変動が大きい品目や重要な品目に向きます。発注の回数を増やすと1回あたりの発注量が減って在庫維持費用は下がりますが、発注に伴う費用の合計は増えます。この二つの合計が最も小さくなる発注量が経済的発注量(EOQ)で、1年間の需要量と1回あたりの発注費用の積を2倍し、それを1個あたりの年間在庫維持費用で割った値の平方根として求めます。品目を金額の大きい順に並べ、累計の割合でA・B・Cの三群に分けて管理の力の入れ方を変える手法がABC分析で、その並べ方に使う図がパレート図です。
品質の管理でよく出るのがQC七つ道具です。パレート図は、不良の件数などを項目別に棒グラフにして大きい順に並べ、累積の折れ線を重ねた図で、どの項目を先に手当てすれば効果が大きいかが分かります。特性要因図は、結果である特性を右端に置き、その原因を人・機械・材料・方法などの大きな骨から小骨へ枝分かれさせて描く魚の骨の形の図で、原因の候補を漏れなく洗い出すために使います。散布図は二つの量の対応する組を点で打った図で、相関の有無と向きを見ます。ヒストグラムは測定値を区間に分けて度数を柱で表した図で、ばらつきの形と規格からの外れ方を見ます。管理図は、時間の経過に沿って測定値を打点し、中心線と上方管理限界線・下方管理限界線を引いた図で、工程が安定した状態にあるかどうかを判定します。点が管理限界線の外に出た場合や、中心線の片側に連続して並ぶ(連が現れる)場合は、偶然ではない原因が働いていると判断します。このほか、層別、チェックシート、グラフが含まれます。言語データを整理する新QC七つ道具には、親和図法、連関図法、系統図法、マトリックス図法、アローダイアグラム法、PDPC法、マトリックスデータ解析法があります。
全社的に品質を作り込む活動をTQMといい、検査で不良を見つけるのではなく、工程で品質を作り込むという考え方が中心にあります。抜取検査は一部を調べて全体の合否を判定する方法で、費用は安く済みますが、良い品質のロットを不合格にしてしまう生産者危険と、悪い品質のロットを合格にしてしまう消費者危険が避けられません。全数検査は見落としを減らせますが費用と時間がかかり、破壊を伴う検査には使えません。
| 観点 | 定量発注方式 | 定期発注方式 |
|---|---|---|
| 発注のきっかけ | 在庫が発注点まで減ったとき | あらかじめ決めた期日ごと |
| 1回の発注量 | 毎回同じ量 | そのつど需要予測から計算した量 |
| 向く品目 | 需要が安定した、単価の低い品目(ABC分析のB・C群) | 需要の変動が大きい、単価の高い重要品目(A群) |
| 在庫の水準 | 安全在庫を持てば比較的少なく抑えられる | 調達期間に発注間隔を加えた期間分の在庫が要る |
| 管理の手間 | 在庫量の監視だけでよく手間が小さい | 期日ごとに需要予測と計算が要り手間が大きい |
- EDI
- 企業間で受発注や請求のデータを、取り決めた形式で交換する仕組み。通信手順・データ形式・業務運用・取引基本契約の四階層で規約を定める。
- ロングテール
- 個々の販売数は少ない商品でも、品ぞろえを大量にそろえるとその売上の合計が全体で無視できない大きさになる現象。在庫と陳列の費用が小さいネット販売で成り立つ。
- シェアリングエコノミー
- 個人や企業が持つ遊休資産や技能を、必要とする人に一時的に貸し出す仕組み。所有から利用への転換であり、相互評価によって信頼を担保する。
- MaaS
- 鉄道・バス・タクシー・自転車などさまざまな移動手段を一つのサービスとして統合し、検索から予約、決済までを一括で扱う考え方。
- スマートファクトリー
- 工場の設備にセンサと通信機能を持たせ、稼働状況や品質のデータを収集・分析して生産の最適化や故障の予知に生かす仕組み。
- デジタルツイン
- 現実の設備や工程をデータで写し取り、計算機の中に同じ振る舞いをする模型を作って、実物を動かさずに試験や予測を行う手法。
- MRP
- 資材所要量計画。生産計画と部品構成表と在庫から、部品ごとの総所要量と正味所要量、発注時期を算出する方法。在庫は各部品の段階で差し引く。
- 部品構成表
- BOM。製品がどの部品から何個ずつ構成されるかを階層で表した表。MRPの計算の土台になる。
- かんばん方式
- 後工程が使った分だけを前工程に引き取りに行き、その情報をかんばんという指示票で伝える方式。生産指示が下流から上流へ伝わる引取り方式であり、押出し方式とは向きが逆。
- セル生産方式
- 一人または少人数の作業者が、製品の組立をほぼ一通り担当する方式。段取りの変更がしやすく多品種少量生産に向く。工程を一列に並べて流すのはライン生産方式。
- 定量発注方式
- 在庫量があらかじめ定めた発注点まで減った時点で、決まった量を発注する方式。発注点は調達期間中の推定使用量に安全在庫を加えて求める。
- 定期発注方式
- あらかじめ定めた一定の間隔で、そのつど必要量を計算して発注する方式。需要の変動が大きい品目や重要度の高い品目に向く。
- 経済的発注量
- EOQ。発注に伴う費用と在庫維持費用の合計が最小になる1回あたりの発注量。年間需要量と1回あたり発注費用の積を2倍し、1個あたり年間在庫維持費用で割った値の平方根で求める。
- パレート図
- 項目別の件数や金額を大きい順に棒で並べ、累積比率の折れ線を重ねた図。どの項目を先に手当てすれば効果が大きいかを判断でき、ABC分析の土台になる。
- 特性要因図
- 結果である特性を右端に置き、原因を人・機械・材料・方法などの大骨から小骨へ枝分かれさせて描く魚の骨の形の図。原因の候補を漏れなく洗い出すために使う。
- 管理図
- 時間の経過に沿って測定値を打点し、中心線と上下の管理限界線を引いて工程の安定を判定する図。限界線の外に出た点や、中心線の片側に連続して並ぶ点は偶然でない原因の存在を示す。
- 生産者危険
- 抜取検査で、本来は合格とすべき良いロットを誤って不合格としてしまう危険。逆に、悪いロットを誤って合格としてしまう危険が消費者危険。
例題 ある部品は1日あたり平均25個を消費し、発注してから納入されるまでに8日かかる。安全在庫を60個とするとき、定量発注方式の発注点はいくつか。
発注点は、調達期間中に消費する見込みの量に安全在庫を加えて求める。調達期間中の消費量は25個かける8日で200個、これに安全在庫60個を加えて260個となる。安全在庫を足し忘れて200個としたり、消費量を掛けずに納入までの日数だけで判断したりする誤りが多い。安全在庫は、需要が予測より増えたり納入が遅れたりしたときの緩衝であり、発注点に必ず含める。
例題 年間需要量が2,000個、1回あたりの発注費用が250円、1個あたりの年間在庫維持費用が4円のとき、経済的発注量はいくつか。
年間需要量と1回あたり発注費用の積を2倍すると、2かける2,000かける250で1,000,000。これを1個あたり年間在庫維持費用の4で割ると250,000。その平方根は500なので、経済的発注量は500個である。年間の発注回数は2,000を500で割って4回になる。発注量を増やすと発注回数が減って発注費用の合計は下がるが、平均在庫が増えて在庫維持費用が上がる。この二つの合計が最小になる点が経済的発注量である。
例題 製品Xを1個作るのに部品Aが2個、部品Aを1個作るのに部品Bが3個必要である。製品Xを80個生産するとき、部品Bの手持在庫が100個あるなら、部品Bの正味所要量はいくつか。
部品Bの総所要量は、80個かける2個かける3個で480個である。ここから手持在庫100個を差し引いて、正味所要量は380個となる。誤りやすいのは、製品Xの生産数80個から在庫100個を先に差し引いてしまう計算で、在庫があるのは部品Bであって製品Xではないから、差し引くのは総所要量を求めた後の部品Bの段階である。
例題 工程の管理図で、すべての点が管理限界線の内側にあるが、直近の9点が続けて中心線の上側に並んでいる。安定した状態といえるか。
いえない。管理限界線の外に出た点がなくても、中心線の片側に点が連続して並ぶ(連が現れる)、一定の向きに上がり続ける、といった規則的な並びが見られる場合は、偶然のばらつきでは説明できない原因が工程に働いていると判断する。原料の切替えや工具の摩耗、測定器のずれなどを疑い、原因を調べて手を打つ。管理図は限界線の内外だけでなく、点の並び方も見る道具である。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類8:経営戦略
会計と財務を数字で読む
損益分岐点、減価償却、財務諸表、キャッシュフロー、棚卸資産の評価を、手で計算できるようになります。
会計には二つの顔があります。株主や取引先など社外の人に会社の状態を報告するための財務会計と、社内の判断のために原価や採算を計算する管理会計です。財務会計は会計基準に従って形式が決まっていますが、管理会計は社内で使いやすい形にしてかまいません。損益分岐点や原価計算は主に管理会計の領域です。
費用は、売上に比例して増える変動費と、売上に関係なく一定額かかる固定費に分けられます。材料費や外注加工費、販売手数料は変動費、賃借料や正社員の人件費、減価償却費は固定費です。売上高から変動費を引いた金額を限界利益といい、限界利益を売上高で割った値が限界利益率です。限界利益率は「売上が1円増えたとき、そのうち何円が固定費の回収と利益に回るか」を示します。変動費を売上高で割った変動費率と限界利益率は足すと1になります。利益は、限界利益から固定費を引いたものです。
利益がちょうど0になる売上高が損益分岐点売上高です。限界利益が固定費と等しくなる点なので、固定費を限界利益率で割って求めます。固定費を変動費率で割る誤りが非常に多いので注意します。目標とする利益を上乗せしたいときは、固定費に目標利益を足したものを限界利益率で割ります。現在の売上高が損益分岐点からどれだけ離れているかを示すのが安全余裕率で、売上高から損益分岐点売上高を引き、それを売上高で割って求めます。この値が大きいほど、売上が落ちても赤字になりにくい体質だといえます。固定費を下げるか、変動費率を下げる(限界利益率を上げる)と、損益分岐点は下がります。
長く使う設備の購入額を、使う年数にわたって費用に配分する手続が減価償却です。定額法は、取得価額を耐用年数で割った同じ額を毎年費用にします。定率法は、まだ償却していない残り(未償却残高、つまり期首の帳簿価額)に一定の償却率を掛けるので、初期の償却費が大きく、年を追うごとに小さくなります。定額法の償却率を2倍した率を使う方式を200パーセント定率法といい、耐用年数が5年なら定額法の償却率0.2の2倍で0.4になります。早く費用にしたい、あるいは技術の陳腐化が速い資産では定率法が選ばれます。無形固定資産であるソフトウェアは、原則として定額法で償却します。
会社の状態を示す代表的な書類が財務諸表です。貸借対照表は、ある一時点の財政状態を表し、左側に資産、右側に負債と純資産を並べます。資産の合計は負債と純資産の合計に必ず一致します。損益計算書は、一定期間の経営成績を表し、売上高から売上原価を引いた売上総利益、そこから販売費及び一般管理費を引いた営業利益、営業外の収益と費用を加減した経常利益、特別損益を加減した税引前当期純利益、法人税等を引いた当期純利益、という順に段階的に利益を示します。どの段階の利益かを取り違えないことが大切で、たとえば支払利息は営業外費用なので、営業利益からは引かれていません。
代表的な財務指標も押さえます。自己資本比率は自己資本を総資産で割った値で、高いほど借入に頼らない安定した財務であることを示します。ROE(自己資本利益率)は当期純利益を自己資本で割った値で、株主が出した資金がどれだけ利益を生んだかを表します。ROA(総資産利益率)は利益を総資産で割った値で、資産全体の使い方の効率を表します。流動比率は流動資産を流動負債で割った値で、短期の支払能力を見ます。ROEは、借入を増やして自己資本を薄くしても数値が上がるので、自己資本比率と併せて見る必要があります。
利益が出ていても現金がなければ会社は止まります。そこで現金の動きだけを追うのがキャッシュフロー計算書で、営業活動・投資活動・財務活動の三つの区分に分かれます。営業活動によるキャッシュフローは本業で稼いだ現金で、商品の販売や仕入、人件費の支払、法人税等の支払が入ります。投資活動によるキャッシュフローは設備や有価証券の取得と売却で、成長のために投資していれば通常はマイナスになります。財務活動によるキャッシュフローは借入れと返済、増資、配当の支払です。営業活動の区分を求める間接法では、税引前当期純利益から出発し、現金の動かない費用である減価償却費を足し戻し、売上債権や棚卸資産の増加は現金が減るので引き、仕入債務の増加は現金が出ていないので足し、最後に法人税等の支払額を引きます。営業活動によるキャッシュフローと投資活動によるキャッシュフローの合計をフリーキャッシュフローといい、自由に使える現金の目安になります。
同じ品物を違う値段で仕入れたとき、期末に残った在庫をいくらと評価するかで、売上原価も利益も変わります。先入先出法は、先に仕入れたものから先に払い出したとみなす方法で、期末の在庫は後から仕入れた新しい単価で評価されます。値上がりが続く局面では期末在庫の金額が大きくなり、その分だけ売上原価が小さくなって利益は大きく出ます。移動平均法は、仕入のたびにそれまでの在庫金額と新しい仕入金額を合計し、数量の合計で割って平均単価を計算し直す方法で、その後の払出しはこの平均単価で行います。総平均法は、期間全体の仕入をまとめて一度だけ平均する方法なので、期中に単価が分からず期末にならないと計算できません。個別法は、品物ごとに実際の仕入単価をひも付ける方法で、宝石や不動産のように一つ一つが区別できるものに使います。
その他、リースとレンタルの違いも問われます。リースはリース会社が利用者の指定した物件を購入して長期間貸すもので、中途解約が原則できず、保守は利用者の負担になることが多い形態です。レンタルはレンタル会社が持っている汎用の在庫を短期間貸すもので、中途解約がしやすく保守もレンタル会社が行います。長期に確実に使うならリース、期間が読めないならレンタル、というのが基本の判断になります。
| 区分 | 主な内訳 | 増減の見方 |
|---|---|---|
| 営業活動 | 商品の販売による収入、仕入や人件費の支出、法人税等の支払額 | 本業で現金を稼げているか。継続してマイナスなら危険 |
| 投資活動 | 設備や有価証券の取得による支出、売却による収入 | 成長への投資が続く企業では通常マイナスになる |
| 財務活動 | 借入れによる収入、返済による支出、増資、配当金の支払 | 資金を調達しているか返済しているかが分かる |
- 限界利益
- 売上高から変動費を引いた金額。売上高で割った値が限界利益率で、売上が1円増えたときに固定費の回収と利益に回る割合を示す。変動費率と限界利益率の和は1になる。
- 損益分岐点売上高
- 利益がちょうど0になる売上高。固定費を限界利益率で割って求める。固定費を変動費率で割るのは誤り。
- 安全余裕率
- 売上高から損益分岐点売上高を引き、売上高で割った値。売上がどれだけ落ちても赤字にならないかの余裕を示す。
- 定額法
- 取得価額を耐用年数で割った同額を毎年の減価償却費とする方法。ソフトウェアなど無形固定資産は原則としてこの方法による。
- 定率法
- 期首の未償却残高に一定の償却率を掛けて減価償却費を求める方法。初期の償却費が大きく、年を追うごとに小さくなる。定額法の償却率を2倍した率を使うものを200パーセント定率法という。
- 貸借対照表
- ある一時点の財政状態を、資産と、負債および純資産で表した書類。資産の合計は負債と純資産の合計に一致する。
- 損益計算書
- 一定期間の経営成績を表す書類。売上総利益、営業利益、経常利益、税引前当期純利益、当期純利益の順に段階的に利益を示す。支払利息は営業外費用なので営業利益より下の段階で差し引かれる。
- ROE
- 自己資本利益率。当期純利益を自己資本で割った値。株主の資金がどれだけ利益を生んだかを示すが、借入を増やして自己資本を薄くしても上がるため自己資本比率と併せて見る。
- ROA
- 総資産利益率。利益を総資産で割った値。調達の方法にかかわらず、資産全体をどれだけ効率よく使って利益を生んだかを示す。
- 営業活動によるキャッシュフロー
- キャッシュフロー計算書の三区分の一つで、本業で稼いだ現金の増減を示す。法人税等の支払額もここに含まれる。
- 投資活動によるキャッシュフロー
- 設備や有価証券などの取得と売却による現金の増減を示す区分。成長のために投資している企業では通常マイナスになる。
- 財務活動によるキャッシュフロー
- 借入れと返済、株式の発行、配当金の支払など、資金の調達と返済による現金の増減を示す区分。
- 間接法
- 営業活動によるキャッシュフローを、税引前当期純利益に減価償却費などの非資金費用を加え、売上債権・棚卸資産・仕入債務の増減を調整して求める方法。
- フリーキャッシュフロー
- 営業活動によるキャッシュフローと投資活動によるキャッシュフローの合計。借入の返済や配当、新たな投資に自由に充てられる現金の目安。
- 先入先出法
- 先に仕入れたものから先に払い出したとみなす棚卸資産の評価方法。期末在庫は新しい単価で評価されるため、値上がり局面では利益が大きく出る。
- 移動平均法
- 仕入のたびに在庫金額の合計を数量の合計で割って平均単価を計算し直し、その単価で払い出す方法。期中いつでも在庫単価が分かる。
- 総平均法
- 一定期間の仕入をまとめて一度だけ平均単価を計算する方法。計算は簡単だが、期末にならないと単価が確定しない。
例題 売上高2,500万円、変動費1,000万円、固定費900万円の事業がある。限界利益率と損益分岐点売上高、現在の利益を求めよ。
限界利益は2,500から1,000を引いて1,500万円、限界利益率は1,500を2,500で割って0.6である。損益分岐点売上高は固定費900万円を限界利益率0.6で割って1,500万円。現在の利益は限界利益1,500万円から固定費900万円を引いて600万円である。よくある誤りは、固定費を変動費率0.4で割って2,250万円としてしまうもの。割るのは限界利益率であることを、限界利益が固定費と等しくなる点が損益分岐点だという意味から確認しておく。
例題 取得価額800万円、耐用年数8年の設備を200パーセント定率法で償却する。1年目と2年目の減価償却費はいくらか。定額法だといくらか。
定額法の償却率は1を8で割って0.125、その2倍が0.25である。1年目は期首帳簿価額800万円に0.25を掛けて200万円。期末の帳簿価額は600万円になる。2年目は600万円に0.25を掛けて150万円である。定額法なら800万円を8年で割って毎年100万円ずつ、金額は毎年同じになる。定率法は初期に大きく費用計上できるので、早期に投資を回収したい場合や陳腐化の速い資産で選ばれる。
例題 月初在庫100個(単価400円)、その後200個を単価550円で仕入れ、150個を払い出し、さらに150個を単価600円で仕入れた。移動平均法による月末の在庫金額と平均単価を求めよ。
最初の仕入後は、金額が100かける400の40,000円に200かける550の110,000円を足して150,000円、数量は300個なので平均単価は500円。150個の払出しで金額は75,000円、数量は150個になる。次の仕入で金額は75,000円に150かける600の90,000円を足して165,000円、数量は300個なので平均単価は550円である。月末の在庫金額は165,000円となる。仕入のたびに単価を計算し直すのが移動平均法で、期末に一度だけ平均するのは総平均法である。
例題 税引前当期純利益1,200、減価償却費400、売上債権の増加180、棚卸資産の減少60、仕入債務の減少150、法人税等の支払額320のとき、間接法による営業活動によるキャッシュフローはいくらか。
1,200に、現金の出ていない費用である減価償却費400を足して1,600。売上債権が180増えたのは売っても現金を受け取っていないということなので引いて1,420。棚卸資産が60減ったのは在庫が現金化されたということなので足して1,480。仕入債務が150減ったのは支払いを済ませたということなので引いて1,330。最後に法人税等の支払額320を引いて1,010となる。増減の向きは「現金が増えたか減ったか」で毎回確かめると取り違えない。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類9:企業と法務
企業法務と標準化
知的財産権の保護期間、請負と派遣の分かれ目、取引と個人情報のルールを、条文の根拠つきで整理します。
知的財産権は大きく、著作権と産業財産権に分かれます。著作権は、思想または感情を創作的に表現したものに対して、創作した時点で自動的に発生します。登録も出願も要らないのが最大の特徴で、この点が出願と審査を要する産業財産権と決定的に違います。著作物の例示は著作権法第10条第1項にあり、第9号にプログラムの著作物が挙げられています。ただし同条第3項により、プログラムを作るために用いるプログラム言語、規約、解法(アルゴリズム)には著作権法の保護は及びません。表現を守るのであって、アイディアや手順そのものを独占させる制度ではないからです。
保護期間も条文で押さえます。著作権法第51条により、著作権は創作の時に始まり、著作者の死後70年を経過するまで存続します。著作権法第53条により、法人その他の団体が著作の名義を有する著作物は公表後70年(創作後70年以内に公表されなかったときは創作後70年)、著作権法第54条により、映画の著作物も公表後70年です。会社の中で作った著作物が誰のものになるかは著作権法第15条の職務著作の規定によります。第1項では、法人等の発意に基づいて業務従事者が職務上作成し、法人等が自己の名義で公表する著作物は、契約や勤務規則に別段の定めがなければ法人等が著作者になります。第2項ではプログラムの著作物が扱われ、こちらは公表の名義を要件としていません。つまり社内利用のプログラムでも、他の要件を満たせば会社が著作者になります。なお著作者人格権は、著作権法第59条により著作者の一身に専属し、譲渡できません。著作権(財産権)を譲渡しても、公表権・氏名表示権・同一性保持権といった人格権は著作者に残るという点が重要です。
産業財産権は特許庁への出願と登録が必要で、四つあります。特許権は自然法則を利用した技術的思想の創作のうち高度なものである発明を保護し、特許法第67条により存続期間は特許出願の日から20年で終了します(一定の場合の延長登録の制度があります)。実用新案権は物品の形状、構造または組合せに係る考案を保護し、実用新案法第15条により実用新案登録出願の日から10年です。実体審査を行わずに登録される点も特許との違いです。意匠権は物品などのデザインを保護し、意匠法第21条により意匠登録出願の日から25年です。商標権は商品やサービスの目印であるマークや名称を保護し、商標法第19条により設定の登録の日から10年ですが、同条第2項により更新登録の申請によって何度でも更新できます。半永久的に持ち続けられるのは商標権だけである点が、よく問われます。起算日にも注意が必要で、特許・実用新案・意匠は出願の日から、商標は設定登録の日から数えます。
営業秘密は不正競争防止法で守られます。不正競争防止法第2条第6項は、営業秘密を「秘密として管理されている生産方法、販売方法その他の事業活動に有用な技術上又は営業上の情報であって、公然と知られていないもの」と定義しています。ここから、秘密管理性・有用性・非公知性という三つの要件が導かれます。三つのうちどれか一つでも欠ければ営業秘密として保護されません。とくに秘密管理性は、社内でアクセス制限や秘密表示など、秘密として扱っていることが客観的に分かる管理をしていたかが問われます。同法は、他人の著名な商品等表示の無断使用や、他人の商品形態の模倣なども不正競争として規制しています。
労働に関する法令に移ります。労働基準法第32条は、休憩時間を除いて1週間について40時間、1日について8時間を超えて労働させてはならないと定めています。これを超えて時間外労働や休日労働をさせるには、労働基準法第36条により、事業場の過半数労働組合または過半数代表者との書面による協定(いわゆる36協定)を結び、行政官庁に届け出る必要があります。裁量労働制には二種類あり、労働基準法第38条の3の専門業務型は、業務の遂行方法を労働者の裁量に委ねる必要がある一定の業務について労使協定で定める方式、労働基準法第38条の4の企画業務型は、事業の運営に関する企画・立案・調査・分析の業務について、労使委員会の委員の5分の4以上の多数による決議と行政官庁への届出による方式です。いずれも協定や決議で定めた時間だけ労働したものとみなす制度で、労働時間の管理をしなくてよいという制度ではありません。
外部の力を使うときの契約の形も重要です。労働者派遣法第2条第1号は、労働者派遣を「自己の雇用する労働者を、当該雇用関係の下に、かつ、他人の指揮命令を受けて、当該他人のために労働に従事させること」と定義しています。つまり派遣では、雇用主は派遣元、指揮命令をするのは派遣先という分離が起こります。これに対し請負は、仕事の完成を目的とする契約で、注文者は請負人の労働者に直接の指揮命令をしてはいけません。この線引きの基準が、厚生労働省の「労働者派遣事業と請負により行われる事業との区分に関する基準」、いわゆる37号告示(昭和61年労働省告示第37号)です。告示は、請負として認められるには、自己の雇用する労働者の労働力を自ら直接利用すること、すなわち業務の遂行方法や評価に関する指示、始業終業時刻や休憩・休日の管理、服務規律や配置の決定を自ら行うことと、業務を自己の業務として注文者から独立して処理すること、すなわち資金を自らの責任で調達し支弁すること、事業主としての法律上の責任を負うこと、単に肉体的な労働力を提供するものでないこと、を求めています。契約書の題名が「請負」でも、実態として注文者が作業員に直接指示をしていれば偽装請負となり、労働者派遣を業として行っているものと判断されます。
取引の適正化では、下請法の改称が大きな変更点です。従来の下請代金支払遅延等防止法(下請法)は、2026年1月1日に施行された改正により、法律の名称が「製造委託等に係る中小受託事業者に対する代金の支払の遅延等の防止に関する法律」となり、中小受託取引適正化法(取適法)と呼ばれるようになりました。用語も変わり、親事業者は委託事業者、下請事業者は中小受託事業者、下請代金は製造委託等代金と呼びます。改正では、資本金による区分に加えて従業員数の基準(製造委託等では300人以下、役務提供委託等では100人以下)が追加され、発荷主が運送事業者に委託する物品の運送が対象に加わりました。支払手段としての手形払は禁止され、中小受託事業者から価格の協議を求められたのに応じない、あるいは必要な説明をしないまま一方的に代金を決める行為も禁止されました。競争そのものを守る法律が独占禁止法(私的独占の禁止及び公正取引の確保に関する法律)で、第3条が私的独占と不当な取引制限(カルテルや入札談合)を禁じ、第19条が不公正な取引方法を禁じています。どちらも公正取引委員会が所管します。
個人情報の取扱いは個人情報保護法(個人情報の保護に関する法律)が定めます。同法第2条第1項は個人情報を、生存する個人に関する情報で特定の個人を識別できるもの、または個人識別符号が含まれるものと定義しています。他の情報と容易に照合でき、それによって個人を識別できるものも含まれる点に注意します。同条第3項の要配慮個人情報は、人種、信条、社会的身分、病歴、犯罪の経歴などを含む個人情報で、取得には原則として本人の同意が要ります。同法第26条は、個人データの漏えい等で個人の権利利益を害するおそれが大きいものが生じたときは個人情報保護委員会に報告し、本人にも通知しなければならないと定めています。国税関係の帳簿書類を電子データで保存する要件を定めるのが電子帳簿保存法で、保存の区分は電子帳簿等保存・スキャナ保存・電子取引データ保存の三つです。このうち電子取引でやり取りしたデータの保存は、令和6年1月1日から電子データのままで行うことが必要とされています。
最後に標準化です。JISは日本産業規格で、2019年7月1日施行の産業標準化法により、それまでの工業標準化法と日本工業規格から名称が変わり、標準化の対象がデータやサービスなどにも広がりました。ISOは国際標準化機構で、品質マネジメントシステムのISO 9000シリーズ、環境マネジメントシステムのISO 14000シリーズなどを定めています。IEEEは電気電子技術者の学会で、無線LANのIEEE 802.11などの通信規格で知られます。個人情報保護マネジメントシステムの要求事項を定めた国内規格がJIS Q 15001で、プライバシーマーク制度の基準になっています。デファクトスタンダードは、公的機関が定めたわけではないが市場で広く使われた結果として事実上の標準になったものを指します。
| 権利 | 保護の対象 | 権利の発生 | 存続期間と根拠 |
|---|---|---|---|
| 著作権 | 思想または感情の創作的な表現 | 創作の時に自動的に発生 | 著作者の死後70年(著作権法第51条)。団体名義は公表後70年(第53条) |
| 特許権 | 自然法則を利用した技術的思想の創作のうち高度なもの | 出願・審査を経て設定登録 | 出願の日から20年(特許法第67条) |
| 実用新案権 | 物品の形状・構造・組合せに係る考案 | 出願して登録(実体審査なし) | 出願の日から10年(実用新案法第15条) |
| 意匠権 | 物品などのデザイン | 出願・審査を経て設定登録 | 出願の日から25年(意匠法第21条) |
| 商標権 | 商品やサービスの目印となる文字・図形など | 出願・審査を経て設定登録 | 設定登録の日から10年、更新可(商標法第19条) |
- 著作権
- 思想または感情を創作的に表現した著作物を保護する権利。創作の時点で自動的に発生し、出願や登録を要しない。プログラムは著作物だが、プログラム言語・規約・解法には保護が及ばない(著作権法第10条第3項)。
- 職務著作
- 法人等の発意に基づき業務従事者が職務上作成した著作物の著作者を法人等とする制度(著作権法第15条)。プログラムの著作物については、法人名義での公表は要件になっていない。
- 著作者人格権
- 公表権・氏名表示権・同一性保持権からなる権利。著作権法第59条により著作者の一身に専属し、譲渡できない。財産権としての著作権を譲渡しても著作者に残る。
- 特許権
- 自然法則を利用した技術的思想の創作のうち高度なものである発明を保護する権利。特許法第67条により存続期間は特許出願の日から20年で終了する。
- 実用新案権
- 物品の形状、構造または組合せに係る考案を保護する権利。実用新案法第15条により出願の日から10年。実体審査を経ずに登録される点も特許との違い。
- 意匠権
- 物品などのデザインを保護する権利。意匠法第21条により意匠登録出願の日から25年で終了する。
- 商標権
- 商品やサービスの目印を保護する権利。商標法第19条により設定の登録の日から10年だが、更新登録の申請により何度でも更新できるため実質的に半永久的に維持できる。
- 営業秘密
- 不正競争防止法第2条第6項が定める、秘密として管理され、事業活動に有用で、公然と知られていない技術上または営業上の情報。秘密管理性・有用性・非公知性の三要件すべてが要る。
- 36協定
- 労働基準法第36条に基づき、時間外労働または休日労働をさせるために、過半数労働組合または過半数代表者と書面で結び行政官庁に届け出る労使協定。
- 専門業務型裁量労働制
- 労働基準法第38条の3に基づき、遂行方法を労働者の裁量に委ねる必要がある一定の業務について、労使協定で定めた時間だけ労働したものとみなす制度。企画業務型は第38条の4で、労使委員会の5分の4以上の決議による。
- 労働者派遣
- 労働者派遣法第2条第1号の定義により、自己の雇用する労働者を、その雇用関係の下で、他人の指揮命令を受けて労働に従事させること。雇用主は派遣元、指揮命令は派遣先という分離が生じる。
- 37号告示
- 厚生労働省の「労働者派遣事業と請負により行われる事業との区分に関する基準」(昭和61年労働省告示第37号)。労働力を自ら直接利用し、業務を注文者から独立して処理していなければ請負とは認められない。
- 中小受託取引適正化法
- 2026年1月1日施行の改正により下請法から改称された法律で、取適法とも呼ばれる。親事業者は委託事業者、下請事業者は中小受託事業者と呼び、従業員数基準の追加、運送委託の対象化、手形払の禁止、協議に応じない一方的な代金決定の禁止などが加わった。
- 独占禁止法
- 私的独占の禁止及び公正取引の確保に関する法律。第3条が私的独占と不当な取引制限(カルテル・入札談合)を、第19条が不公正な取引方法を禁じる。公正取引委員会が所管する。
- 要配慮個人情報
- 個人情報保護法第2条第3項が定める、人種・信条・社会的身分・病歴・犯罪の経歴などを含む個人情報。取得には原則として本人の同意が必要。
- 電子帳簿保存法
- 国税関係帳簿書類を電子データで保存するための要件を定めた法律。保存区分は電子帳簿等保存・スキャナ保存・電子取引データ保存の三つで、電子取引データは令和6年1月1日から電子のまま保存することが必要。
- JIS
- 日本産業規格。2019年7月1日施行の産業標準化法により、工業標準化法および日本工業規格から名称が変わり、標準化の対象がデータやサービスにも広がった。
- デファクトスタンダード
- 公的な標準化機関が定めたものではないが、市場で広く使われた結果として事実上の標準となった規格や製品。
例題 社員が業務で作成し社内だけで使っているプログラムがある。会社が著作者になるか。会社の名義で公表していないことは問題になるか。
著作権法第15条第2項により、法人等の発意に基づいて業務従事者が職務上作成したプログラムの著作物は、契約や勤務規則に別段の定めがなければ法人等が著作者になる。第1項の一般の著作物と違い、プログラムについては「法人等が自己の著作の名義の下に公表する」ことが要件になっていないため、社内利用にとどまり公表していなくても会社が著作者となる。ただし業務従事者であること、職務上の作成であること、別段の定めがないことは必要である。
例題 開発した新しい部品の構造を、できるだけ長く独占的に使いたい。特許権と実用新案権と商標権のうち、期間の面ではどれが有利か。
部品の構造そのものを守るなら、期間は特許権が出願の日から20年(特許法第67条)、実用新案権が出願の日から10年(実用新案法第15条)なので特許権が長い。商標権は設定登録の日から10年だが更新登録の申請で何度でも更新でき(商標法第19条)、期間だけを見れば半永久的に維持できる。ただし商標権が守るのは商品やサービスの目印であって部品の構造ではないので、目的が構造の独占なら商標では代替できない。守りたい対象と期間は分けて考える必要がある。
例題 契約書は業務委託(請負)だが、発注者の担当者が委託先の作業員に毎日の作業手順と残業を直接指示している。法的にどう評価されるか。
37号告示の基準に照らすと、請負とは認められない。請負であるためには、受託者が自己の雇用する労働者の労働力を自ら直接利用していること、すなわち業務の遂行方法の指示、始業終業時刻や休憩・休日の管理、配置の決定などを自ら行っていることが必要だが、この事例では発注者が直接指示している。実態として労働者派遣に当たり、いわゆる偽装請負となる。契約書の題名ではなく実態で判断されるため、是正するには、指示は受託者の責任者を通す、作業の進め方と要員配置は受託者が決める、といった運用に改める必要がある。
例題 取引先から「値上げの協議には応じない。この単価で受けるかどうかだけ答えてほしい」と言われた。2026年1月1日施行の改正後のルールではどう扱われるか。
中小受託取引適正化法(取適法。改正前の下請法)では、中小受託事業者から価格の協議を求められたのに応じない、または必要な説明を行わないまま一方的に代金を決める行為が禁止された。したがってこの申入れは禁止行為に当たり得る。あわせて、支払手段としての手形払の禁止、資本金基準に加えた従業員数基準の追加、発荷主から運送事業者への物品運送委託の対象化も改正で加わっている。名称も、親事業者は委託事業者、下請事業者は中小受託事業者に変わった。
出典:IPA「応用情報技術者試験(レベル3)」シラバス Ver.7.2 大分類9:企業と法務
午後問題の読み方
午後(科目B)の全体像と問題の選び方
何問出て何問答えるのか、どれが必須で何点なのかを公表資料で確認し、選び方と時間配分の型を決めます。
まず制度の確認からです。IPAの試験要綱Ver.5.6(2026年7月)では、応用情報技術者試験は科目Aと科目Bの二つで構成されています。従来「午前」と呼ばれていたものが科目A、「午後」と呼ばれていたものが科目Bで、このラボでも呼びやすさを優先して午後という言い方を併用しますが、公式の資料では科目Bという名称が使われている点は覚えておいてください。科目Aは試験時間150分、多肢選択式(四肢択一)で80問出題80問解答、科目Bは試験時間150分、記述式で11問出題5問解答です。同じ要綱に、応用情報技術者試験では別日に科目Aと科目Bを実施すると注記されています。
科目Bで最も大事な枠組みが、必須と選択の区別です。試験要綱の別紙「応用情報技術者試験 科目B試験の分野別出題数」には、問1が情報セキュリティ分野の必須解答問題(1問出題1問解答)、問2から問11までが選択解答問題(10問出題4問解答)と示されています。つまり情報セキュリティは避けられません。ここを苦手なままにしておくと、残り4問をどれだけ得意分野で固めても土台が崩れます。学習の順序としては、まず問1の情報セキュリティを確実にすることが最優先です。
配点も要綱に載っています。科目Aは問1から問80まで各1.25点で合計100点、科目Bは問1が20点、問2から問11のうち解答した4問が各20点で合計100点です。基準点はどちらの科目も100点満点中60点で、採点方式は素点方式です。さらに応用情報技術者試験では多段階選抜方式が採られており、科目Aの得点が基準点に達しない場合は科目Bの採点を行わずに不合格となります。科目Bの対策にいくら時間をかけても、科目Aが60点に届かなければ答案は読まれません。試験結果に問題の難易差が認められた場合には基準点を変更することがある、とも記されています。
1問20点という配点は、戦略に直結します。5問のうち1問を丸ごと落とすと最大20点を失い、それだけで基準点に届かなくなる可能性があります。逆に、5問それぞれで7割ずつ取れれば70点です。したがって「得意な1問で満点を狙う」より「選んだ5問すべてで確実に部分を積む」ほうが合格に近い、という方針が立ちます。
選択問題の分野は要綱の別紙で示されており、経営戦略・情報戦略・戦略立案とコンサルティング技法、システムアーキテクチャ、ネットワーク、データベース、組込みシステム開発、情報システム開発、プログラミング(アルゴリズム)、プロジェクトマネジメント、サービスマネジメント、システム監査が並びます。年度によってどの分野が何問目に来るかは変わり得るので、問番号で覚えるのではなく分野で覚えます。
選び方の型を決めておきましょう。第一に、本番で初めて決めるのではなく、あらかじめ本命を3分野、予備を2分野ほど決めておきます。本命が難しかったときに逃げ場がないと、そこで時間を溶かします。第二に、試験開始後すぐに全問を数分でざっと眺め、5問を決めてから書き始めます。1問目から順に解いて時間切れになるのが最も損な失敗です。第三に、選ぶ基準は題材の親しみやすさではなく、設問の答えやすさです。題材が身近でも、設問が「本文の条件を組み合わせて考えさせる」形なら時間を食います。逆に題材が見慣れなくても、設問が本文の記述をたどれば答えられる形なら得点しやすい。数分でそこまで見抜くのは難しいので、設問の数、空欄補充の割合、字数の指定がある記述の数、計算の有無を目安にします。第四に、いったん選んだら基本的に乗り換えません。乗り換えは、それまでに使った時間を捨てる行為です。ただし開始10分ほどで明らかに手が出ないと分かったときだけは、早い段階で切り替えます。
時間配分は、150分を5問で単純に割れば1問30分ですが、選ぶ時間と見直す時間が要ります。目安として、最初の5分で全問を見て5問を決める、1問あたり26分から27分で解く、最後に10分から15分を見直しに残す、という配分にすると、書き切れなかった欄を埋める余裕が生まれます。問1の情報セキュリティは必須なので選ぶ迷いがなく、最初に片付けて調子を作る受験者が多いですが、難しい年に問1で粘りすぎると全体が崩れます。1問にかける上限時間を先に決め、超えたら次に進んで最後に戻る、という運用にします。
最後に大切な注意です。試験の名称、出題数、解答数、配点、実施方法は制度改正で変わります。ここに書いた内容はIPAが公表している試験要綱Ver.5.6に基づいていますが、受験する回の条件は必ずIPAの最新の受験案内と試験要綱で確認してください。とくに試験時間帯や当日の注意事項、解答用紙の形式については、公表資料で確認できた範囲を超えて推測しないことが大切です。
| 項目 | 科目A(従来の午前) | 科目B(従来の午後) |
|---|---|---|
| 試験時間 | 150分 | 150分 |
| 出題形式 | 多肢選択式(四肢択一) | 記述式 |
| 出題数と解答数 | 80問出題、80問解答 | 11問出題、5問解答 |
| 必須と選択 | 全問必須 | 問1が必須(情報セキュリティ)、問2から問11のうち4問を選択 |
| 配点 | 問1から問80まで各1.25点 | 問1が20点、選択した4問が各20点 |
| 基準点 | 100点満点中60点 | 100点満点中60点 |
- 科目A
- 応用情報技術者試験の従来「午前」と呼ばれていた試験。試験要綱Ver.5.6では試験時間150分、多肢選択式(四肢択一)、80問出題80問解答、問1から問80まで各1.25点。
- 科目B
- 応用情報技術者試験の従来「午後」と呼ばれていた試験。試験要綱Ver.5.6では試験時間150分、記述式、11問出題5問解答。
- 必須解答問題
- 科目Bの問1のこと。試験要綱の別紙で情報セキュリティ分野の必須解答問題(1問出題1問解答)と示されており、選択の余地がない。
- 選択解答問題
- 科目Bの問2から問11のこと。試験要綱の別紙で10問出題4問解答と示されている。分野は年度によって問番号が変わり得るので分野で覚える。
- 基準点
- 合格に必要な最低点。応用情報技術者試験では科目A・科目Bとも100点満点中60点。試験結果に問題の難易差が認められた場合には変更されることがある。
- 多段階選抜方式
- 応用情報技術者試験では、科目Aの得点が基準点に達しない場合、科目Bの採点を行わずに不合格とする方式。科目Aを固めることが先決である理由。
- 素点方式
- 設問ごとの配点をそのまま合計して得点とする採点方式。応用情報技術者試験の科目A・科目Bはこの方式による。
例題 科目Bで、得意なネットワークとデータベースを選び、残りは自信のある分野がないので当日に決めることにした。この方針の問題点は何か。
二つある。第一に、問1の情報セキュリティは必須解答問題なので、選ぶ余地はなく必ず解答することになる。ネットワークとデータベースを選んだ時点で残りの選択枠は2問であって3問ではない。第二に、残り2問を当日に決めると、開始直後に全問を読み比べる時間を余分に使ううえ、どれも手が出ないときの逃げ場がない。あらかじめ本命3分野と予備2分野を決め、当日は数分の下見で確定させる形にしておくのが安全である。
例題 科目Aは62点、科目Bは自己採点で70点だった。合否はどうなるか。もし科目Aが55点だったらどうなるか。
科目A・科目Bとも基準点は100点満点中60点なので、62点と70点であればどちらも基準点以上であり、合格の条件を満たす。科目Aが55点だった場合は、多段階選抜方式により科目Bの採点自体が行われず、不合格となる。科目Bをどれだけ書けていても結果は変わらない。ここから、学習の順序としてまず科目Aを60点以上で安定させることが最優先だと分かる。なお、問題の難易差が認められた場合に基準点が変更されることがある点も要綱に記されている。
例題 科目Bの150分をどう割り振るか。1問あたりの上限時間を決める意味は何か。
最初の5分ほどで全11問を下見して解く5問を決め、1問あたり26分から27分で解き、最後に10分から15分を見直しに残す、という配分が目安になる。1問あたりの上限時間を先に決めておく意味は、深追いを止められることにある。1問は20点で、5問のうち1問を丸ごと落とすと最大20点を失う。難しい設問1個に15分粘るより、その時間を他の問の未記入欄に回すほうが得点は増える。上限に達したらいったん次へ進み、最後の見直し時間で戻るという運用にする。
出典:IPA 情報処理技術者試験 試験要綱 Ver.5.6 出題範囲(科目B試験)応用情報技術者試験
問題文と図表から条件を拾う
前提・制約・除外条件がどこに書いてあるか、下線部と設問がどう対応するか、図表から何を読むかを型にします。
記述式の問題は、知識だけでは解けません。答えの材料はほとんどが問題文の中にあり、それを見つけて組み立てる作業が中心です。IPAの採点講評でも、正答率が低かった設問について「仕様を正しく読み解いて解答してほしい」「本文中から必要な情報を読み取り、正しく計算してほしい」といった指摘が繰り返し書かれています。読み方の型を持っているかどうかが、そのまま得点差になります。
問題文の構造は、おおむね決まっています。冒頭に業務やシステムの概要があり、その後は角括弧の見出しで区切られた節が続きます。節の見出しは「現状の課題」「新システムの要件」「移行の手順」のように、何について書かれた段落かを示しています。設問で問われている事柄がどの節に関係するかを先に見当付けると、探す範囲が一気に狭まります。読む順序としては、まず設問文を先に読み、何を聞かれるのかを頭に入れてから本文に戻る方法が有効です。何を探すか決まっていない状態で長い本文を読むと、二度読みになって時間を失います。
条件が書かれている場所には癖があります。第一に、本文の中の「ただし」「なお」「ここで」で始まる文です。ここには例外や適用範囲の限定が書かれます。第二に、箇条書きの各項目です。要件や制約は箇条書きで並べられることが多く、そのうち一つだけが設問の鍵になります。第三に、表の脚注や図の注記です。本文には書かず、表の下に小さく「※ 保守時間帯は除く」のように書かれる条件が、計算の答えを分けます。第四に、括弧書きです。「(1台あたり)」「(税抜き)」といった単位や前提が括弧の中だけに書かれていることがあります。この四か所は、読み飛ばすと必ず失点する場所だと決めて、印を付けながら読みます。
除外条件はとくに見落としやすい部分です。「〜を除く」「〜は考慮しない」「〜は正常に動作するものとする」といった表現は、考えなくてよい範囲を指定しています。これを見落とすと、余計な要素まで考えて答えが合わなくなります。逆に「〜も含める」「〜の場合も考慮する」は、見落とすと考慮漏れになります。どちらも一言で答えが変わるので、条件文には必ず印を付けます。
下線部と設問の対応も型があります。本文中の下線には番号が振られており、設問は「本文中の下線①について」という形で始まります。このとき答えの材料は、下線部そのものだけでなく、その前後の文脈に置かれていることがほとんどです。下線部が「ある対策を実施した」なら、なぜその対策が必要になったのかは前の段落に、実施した結果どうなったかは後の段落に書かれています。下線部だけを見て一般論を書くと、その問題でなくても成り立つ答えになり、設問の要求から外れます。IPAの採点講評でも、問われている内容とずれた記述をした解答が散見された旨が指摘されています。
図表の読み取りに移ります。システム構成図では、四角が機器やサーバ、線が通信経路を表します。ここで見るのは、どの機器とどの機器が直接つながっているか、その線がどの区間を通るか、そして境界にファイアウォールやルータなど何が置かれているかです。設問で「通信が到達しない原因」を問われたら、経路上の境界に置かれた機器と、その設定を述べた本文の記述を突き合わせます。
シーケンス図では、縦の線が処理の主体、横の矢印がやり取りするメッセージ、上から下への並びが時間の流れを表します。読むべきは、どの主体がどの順序で何を送るか、そして矢印が向いている方向です。設問で空欄になっている矢印は、直前と直後の矢印から挟み撃ちにすると特定できます。処理の主体を取り違えたまま答えを書くと、内容が正しくても得点になりません。
E-R図では、四角がエンティティ、線が関連を表し、一対多や多対多といった多重度が線の端の記号で示されます。読むべきは、どちらが一でどちらが多かという向きと、主キーと外部キーがどこにあるかです。IPAの採点講評でも、E-R図の設問について、下線などの記法が付いていない解答や、関連の多重度を取り違えた解答が散見されたと指摘されています。図の記法は問題冊子で定義されているので、その定義に従って書くことが前提になります。
表からの条件抽出では、行と列が何を表すかを最初に確認します。処理時間の表なら、行が処理の種類、列が条件や台数を表しているといった具合です。設問が求める値がどの行と列の交点にあるか、あるいは複数のセルをどう組み合わせるかを、計算を始める前に決めます。ここでも脚注が効きます。「単位はミリ秒」「1台あたりの値」といった注記を読み落とすと、桁や台数を間違えます。IPAの採点講評でも、本文中から必要な情報を読み取って正しく計算してほしいという指摘が出ています。
最後に、問題文に書かれていないことを持ち込まないという原則です。実務経験があると、現場ではこうする、という知識で答えを埋めたくなります。しかし採点講評では、問題文中に記載のない項目についての解答が散見された、という指摘が実際に書かれています。答えは問題文の世界の中で完結させ、一般論や自分の職場の慣行は根拠にしない。これが記述式でもっとも守るべき原則です。
脚注を読んでから計算に入る
/* 表の脚注が単位と前提を決めている、という型 */
表2 1件の処理に含まれる各手順
手順 所要時間 実行回数
受信 15 1
変換 4 200
書込み 9 200
注 所要時間は1回あたりの値(ミリ秒)
1件あたりの合計
= 15 + (4 + 9) × 200
= 15 + 2,600 = 2,615ms = 2.615秒
脚注を読まずに 15 + 4 + 9 = 28ms と答えるのが典型的な誤り。
「1回あたり」「1件あたり」「1台あたり」は必ず回数と掛け合わせる。
| 場所 | 目印になる表現 | 見落とすとどうなるか |
|---|---|---|
| 本文中の限定文 | ただし、なお、ここで | 例外を無視した一般論を書いてしまう |
| 箇条書きの項目 | 要件、制約、前提の一覧 | 鍵になる1項目を使わずに答えを組み立てる |
| 表の脚注・図の注記 | ※、注、単位の指定 | 単位や台数を取り違えて計算が合わない |
| 括弧書き | (1台あたり)、(税抜き) | 前提が違うまま数値を当てはめる |
- 設問先読み
- 本文を読む前に設問文に目を通し、何を探すのかを決めてから本文に戻る読み方。目的を持って読むことで二度読みを減らせる。
- 除外条件
- 「〜を除く」「〜は考慮しない」「〜は正常に動作するものとする」のように、考えなくてよい範囲を指定する記述。見落とすと余計な要素まで考えて答えがずれる。
- 脚注
- 表の下や図の横に小さく書かれた注記。単位、前提、例外がここだけに書かれていることがあり、計算問題では答えを分ける決め手になる。
- 下線部
- 本文中に番号付きで引かれた線。設問はこの下線部について問う。答えの材料は下線部そのものより、その前後の段落にあることが多い。
- システム構成図
- 機器やサーバを四角、通信経路を線で表した図。どこがどこと直接つながり、境界に何が置かれているかを読む。
- シーケンス図
- 縦の線が処理の主体、横の矢印がメッセージ、上から下が時間の流れを表す図。空欄の矢印は前後の矢印から挟み撃ちで特定する。
- 多重度
- E-R図で、二つのエンティティの間の対応関係が一対一か一対多か多対多かを示す記号。向きを取り違えると設計そのものが変わる。
例題 設問に「本文中の下線②について、この方式では要件を満たせない理由を述べよ」とある。どこを読めばよいか。
下線②の文だけを読んでも足りない。まず、その方式が満たすべき要件がどこに書かれているかを探す。多くは前の節の「要件」や「制約」を述べた箇条書きにある。次に、下線②の前後の段落で、その方式の動作や性能について述べた記述を探す。答えは「要件のこの部分」と「方式のこの性質」が食い違う、という形で組み立てる。下線部だけを見て一般論を書くと、その問題でなくても成り立つ答えになり、設問の要求から外れる。
例題 処理時間の表に「注 値は1件あたりの処理時間(ミリ秒)」と書かれている。設問は1,000件を処理する時間を秒で答えさせている。何に注意するか。
注記が二つの落とし穴を作っている。第一に、表の値は1件あたりなので、1,000件分は1,000倍しなければならない。第二に、表の単位はミリ秒だが設問は秒で答えさせているので、1,000で割って単位を換算する。どちらかを忘れると桁が1,000倍または1,000分の1ずれる。表を使う計算では、値を拾う前に「単位は何か」「1件あたりか合計か」を確認し、答えを書く前に設問が指定した単位に直したかを確かめる。
例題 サービス停止可能な時間を求める設問で、本文に「毎週日曜の2時から4時は定期保守のため利用者はいない」と書かれていた。この一文はどう使うか。
この一文は除外条件であり、その時間帯は停止してもサービスに影響しないという意味である。したがって停止可能時間の計算にこの2時間を含める。逆に、これを見落とすと停止可能時間を短く見積もり、答えが合わなくなる。「ただし」「なお」で始まる文や、稼働時間を述べた箇条書きの中の但し書きは、計算の前提を変える記述なので、必ず印を付けて計算式に反映させる。
出典:IPA 応用情報技術者試験 採点講評(令和7年度秋期 午後)
記述解答の作り方と見直し
問われた形で答え、主語と単位を落とさず、字数の中に収める。書いてから見直すまでの手順を決めます。
記述式の答案は、内容が合っていても書き方でつまずきます。IPAが公表している採点講評には、正答率が低かった設問について「設問の意図を正しく理解して記述してほしい」という指摘がはっきり書かれています。原因を問われているのに原因に至る前の状況を書いた解答が散見された、という具体的な指摘もあります。つまり、知らなかったのではなく、聞かれた形で答えなかったために点を落としている受験者が相当数いるということです。
第一の型は、問われた形で答えることです。設問の末尾の言葉と、答えの末尾の言葉を対応させます。「理由を述べよ」「なぜか」なら「〜から」または「〜ため」で終える。「目的を述べよ」なら「〜するため」で終える。「何を確認するか」なら確認する対象を名詞で答える。「どのような効果があるか」なら効果を名詞句で答える。「どうすればよいか」なら対策を動詞で終える文にする。IPAが公表している解答例を見ると、理由を問う設問の解答例は「〜から」で終わる一文、効果を問う設問の解答例は「調達コストの削減」のような名詞句、対策を問う設問の解答例は「〜を図る。」のような動詞で終わる文、というように、問われた形にきちんと対応しています。
第二の型は、主語を落とさないことです。日本語は主語を省略できてしまうため、「監視できないから」のように書くと、誰が何を監視できないのかが伝わりません。登場する主体が複数ある問題文では、主語の取り違えがそのまま誤答になります。「運用担当者が」「サーバAが」「利用部門が」といった主体を必ず書く。字数が足りないときに最初に削りたくなるのが主語ですが、削ってよいのは修飾語であって主語ではありません。
第三の型は、数字には単位を付けることです。「30」ではなく「30秒」「30分」「30件」と書きます。表の値がミリ秒で設問が秒を求めているような場合、単位を書く習慣があると換算忘れに自分で気付けます。割合を答えるときは「0.3」なのか「30パーセント」なのかを設問の指定に合わせます。金額なら千円単位か円単位かを確認します。
第四の型は、字数の中に収めることです。字数の指定がある設問では、指定を超えた分は評価されないと考えて、必ず範囲内に収めます。目安として、指定字数の8割から9割を使い切るように書くと、要素の入れ忘れが減ります。逆に半分ほどしか埋まらないときは、要素が足りていない可能性が高いので、設問が求める要素をもう一度数えます。IPAが公表している解答例は、多くが20字から40字程度の短い一文です。長く書くほど良いのではなく、要素が過不足なく入っているかが問われています。
書く前の準備として、答えに入れるべき要素を数える習慣を付けます。「〜の理由を、Aの観点から述べよ」なら、理由とAへの言及の二要素が要ります。「〜を二つ挙げよ」なら二つ書く。「原因と対策を述べよ」なら両方を書く。設問文に含まれる「〜を踏まえて」「〜に着目して」は、その語を答えに反映させよという指示です。要素を数えてから書き出すと、字数の配分も決まります。
第五の型は、問題文の言葉を使うことです。問題文で「点検プロセス」と呼ばれているものを、自分の言葉で「チェック作業」と言い換えると、同じことを指しているかどうかが読み手に伝わりません。問題文で定義された用語や略称は、そのまま使います。逆に、問題文に出てこない専門用語を持ち出すのは危険です。IPAの採点講評には、問われている内容とは別の技術を説明した解答が散見された、という指摘や、問題文中に記載のない項目についての解答が散見された、という指摘が実際に書かれています。
記法の指定にも従います。図を書き込む設問では、問題冊子で定義された記法どおりに書く必要があります。IPAの採点講評では、E-R図の設問について、実線の下線が付いていない解答が散見されたという指摘が出ています。内容が合っていても記法を外すと評価されない可能性があるため、図中の記号の意味は解き始める前に確認します。
採点の詳細な基準はIPAから公表されていないので、どこまで書けば何点という断定はできません。ただし確実に言えるのは、空欄は0点だということです。したがって、分からない設問でも、問題文から読み取れる範囲で関係のありそうな条件を使って一文を書きます。ここで大切なのは、当てずっぽうの一般論ではなく、問題文に根拠がある内容を書くことです。根拠のある一文は的を外していても近いところに落ちますが、問題文に出てこない話は近づきようがありません。
見直しの手順も決めておきます。第一に、未記入の欄がないかを最初に確認します。これは内容を読まずに形だけで確認できるので、時間がなくても必ずできます。第二に、設問の末尾と自分の答えの末尾が対応しているかを確認します。理由を聞かれて名詞で終わっていないか、二つ挙げよと言われて一つしか書いていないか。第三に、主語と単位が入っているかを確認します。第四に、字数の指定を超えていないかを確認します。第五に、計算した設問については、使った値を表や本文から拾い直して、桁と単位を確かめます。この五つは、内容の正しさを考え直すのではなく、形式を機械的に点検する作業なので、疲れた終盤でも実行できます。内容を考え直すのは、この五つが終わってから、時間が余った場合に限ります。
| 設問の問い方 | 答えの形 | 終わり方の例 |
|---|---|---|
| なぜか、理由を述べよ | 理由を述べた一文 | 〜から。/〜ため。 |
| 目的を述べよ | 目的を述べた一文 | 〜するため。 |
| どのような効果があるか | 効果を表す名詞句 | 〜の削減/〜の短縮 |
| 何を確認するか | 確認する対象を表す名詞句 | 〜の設定値/〜の記録 |
| どうすればよいか、対策を述べよ | 対策を述べた一文 | 〜する。/〜を行う。 |
| どの時点か、いつか | 時点を特定する語句 | 〜を受信した直後 |
- 問われた形で答える
- 設問の末尾の言葉に、答えの末尾の言葉を対応させること。理由なら「〜から」、目的なら「〜するため」、効果なら名詞句、対策なら動詞で終える文にする。
- 要素の数え上げ
- 書き出す前に、答えに入れるべき事柄がいくつあるかを設問文から数える作業。「二つ挙げよ」「原因と対策を」「〜を踏まえて」などが要素の指示になる。
- 問題文の用語をそのまま使う
- 問題文で定義された名称や略称を言い換えずに使うこと。自分の言葉に置き換えると、同じものを指しているかが伝わらなくなる。
- 記法の指定
- 図を書き込む設問で、問題冊子が定義している書き方。E-R図の下線や矢印の向きなど、内容が合っていても記法を外すと評価されない可能性がある。
- 空欄を残さない
- 採点の詳細な基準は公表されていないが、空欄が0点であることは確かなので、問題文に根拠のある内容で必ず一文を書くという方針。
- 形式点検の見直し
- 未記入の有無、設問と答えの末尾の対応、主語と単位、字数、計算に使った値の五点を機械的に確かめる見直しの手順。内容の再検討より先に行う。
例題 「利用者からの問合せ窓口を一本化する目的を、40字以内で述べよ」という設問に対し、「窓口が複数あると混乱するので一本化する。」と書いた。どこを直すか。
三点直す。第一に、目的を問われているので「〜するため。」で終える形にする。第二に、主語と対象が抜けている。誰の混乱か、何が一本化されるのかを書く。第三に、40字以内という指定に対して短すぎるので、要素を足す余地がある。たとえば「利用者が問合せ先に迷わず、対応状況を一元的に記録して重複対応を防ぐため。」のように、問題文に根拠のある効果を二つ入れて指定字数の8割程度まで使う。字数が余っているときは、要素の入れ忘れを疑う。
例題 「データの欠落が発生した原因を述べよ」という設問に、「センサからの送信間隔が短く、受信側の処理が追いつかない状況であった。」と書いた。何が問題か。
問われているのは欠落が発生した原因だが、書かれているのは欠落に至る前の状況にとどまっている。IPAの採点講評でも、原因を問うているのに欠落に至る前の状況を記述した解答が散見された、という同種の指摘が出ている。原因として答えるには、その状況によって何が起きたのかまで踏み込む必要がある。たとえば受信用のバッファがあふれて未処理のデータが上書きされた、というように、欠落そのものを引き起こした事象を書く。設問の末尾が「原因」なら、答えの中心も原因でなければならない。
例題 残り10分になった。まだ2か所が未記入で、他の設問の内容にも自信がない。何から手を付けるか。
未記入の2か所を先に埋める。採点の詳細な基準は公表されていないが、空欄が0点であることは確実だからである。埋めるときは思い付きの一般論ではなく、その設問が指している本文の節に戻り、そこに書かれている条件を使って一文を書く。次に、内容の再検討ではなく形式の点検を行う。設問の末尾と答えの末尾が対応しているか、理由を聞かれて名詞で終わっていないか、二つ挙げよと言われて一つになっていないか、主語と単位が入っているか、字数を超えていないか。これらは短時間で確認でき、修正も一言で済む。内容を考え直すのは最後にする。
出典:IPA 応用情報技術者試験 採点講評(令和7年度秋期 午後)