ホーム 第5章 · 基礎理論
第5章 · テクノロジ

同じ数字のはずなのに、話が合わない。

データの大きさ、注文を通す条件、予測のばらつき。葵は「詳しい人に任せればいい」で済ませず、小さな例から、自分が依頼する内容を確かめます。

4つのテーマ15項目9の図解
この章の目次・学習項目

この章も、新卒コンサルタントの葵と先輩の佐伯が、大手メーカー「アステラ製作所」の受注・生産・出荷をつなぐ案件に取り組みます。

会話と図解で読み進め、詳しい説明は各項目で開けます。

01
0と1だけで、パンの名前も表せる?

仕様書の「数バイト」で、会議が止まった

データの表現と単位を理解し、接続条件を確かめる。

開発中|ERP連携の仕様レビュー

井上
開発会社のPM

試作では、この品目区分を1バイトの符号なし整数にしています。この範囲を超える区分コードはありませんか。

葵は数字なら何でも入ると思っていたが、区分コードの範囲が足りないという。続いて、品目名の文字化けの話になった。

新卒ITコンサルタント

数字や文字を、そのまま箱に入れるイメージでした。表せる範囲と、読み書きの約束があるんですね。

佐伯
先輩ITコンサルタント

ここを分からないまま合意すると、後の変換で困る。まず、仕様の意味を一つずつ確認しよう。

ビット・バイト

1バイトの符号なし整数に256を入れられるか。葵は「256通り」と聞いて、最大値も256だと思っていた。

ビットは0か1を表す単位。8ビットで1バイト。容量と通信速度で単位を取り違えない。

018個の0・1で一つのバイト
0
0
0
1
0
0
1
1
nビットの組合せ2n 通り

1ビットは2通り、2ビットは4通り、3ビットは8通り。8ビットは256通りです。

詳しい説明・条件・具体例

コンピュータは、電圧の高低など区別しやすい二つの状態を、0と1に対応させて扱います。その一桁がビット(bit)8ビットで1バイト(byte)です。

符号なし整数なら、8ビットで表せるのは0〜255。「256通り」と「最大値256」を混同しないようにします。0も一つの組合せです。

新卒ITコンサルタント

0も一通りなので、最大は255ですね。コードの候補数だけでなく、実際の値の範囲も確認します。

基数・位取り

ログに現れた10011と13が、同じ値を示す場合がある。葵は、桁の基数を確かめずに異常だと報告しないようにした。

二進数は2、十進数は10で桁が上がる。桁が一つ左へ移ると、重みが基数倍になる。

02右から、1・2・4・8・16…
1280
640
320
161
80
40
21
11
詳しい説明・条件・具体例

10進数は0〜9、2進数は0と1、16進数は0〜9とA〜Fを使います。16進数のA、B、C、D、E、Fは、10進数の10〜15に対応します。

各桁の大きさが重み、桁が一つ上がるごとに掛ける数が基数です。10進数の357は3×100+5×10+7×1。2進数なら重みが1、2、4、8…、16進数なら1、16、256…になります。

10進数19を、二つの表現にする

  1. 19 = 16 + 2 + 1なので、2進数は10011。
  2. 19 = 1×16 + 3なので、16進数は13。
  3. 数そのものは同じで、表し方だけが変わっています。
新卒ITコンサルタント

ログの10011と、別の画面の13。最初は値が変わったと思いました。

井上
開発会社のPM

前者が二進数、後者が十六進数という指定なら、どちらも十進数の19です。

新卒ITコンサルタント

どの基数で書かれているかが先ですね。見た目だけで不具合として送らなくてよかったです。

基数変換

葵は38を二進数へ直し、余りを上から読んでしまった。

井上
開発会社のPM

最初に出た余りは、一番右の桁です。どの位を求めた余りなのか、順に見てみましょう。

二進数を十進数にするなら、1が立つ桁の重みを足す。逆は、2で割った余りを逆順に読む。

0338を2で割り、余りを下から読む
割られる数余り
38190
1991
941
420
210
101
詳しい説明・条件・具体例

1010₂を十進数にする

  1. 左から重みは8、4、2、1。
  2. 8×1 + 4×0 + 2×1 + 1×0 = 10。

商が0になるまで割ったら、余りを下から上へ読みます。38₁₀ = 100110₂。逆に、32+4+2=38と重みで確かめられます。

新卒ITコンサルタント

下から読む理由が分かりました。32+4+2に戻せば、変換が正しいかも確かめられます。

十六進数

通信ログの13Aを、そのまま文字列として扱うべきか、16進数として読むべきか。葵は仕様の記載を確認した。

0〜9とA〜Fの16種類を使う。十六進数の1桁は、二進数の4桁に対応する。

詳しい説明・条件・具体例

13A₁₆を十進数にする

  1. Aは10。桁の重みは256、16、1です。
  2. 1×256 + 3×16 + 10×1 = 314。

425₁₀を十六進数にする

  1. 425 ÷ 16 = 26、余り9。
  2. 26 ÷ 16 = 1、余り10(A)。
  3. 1 ÷ 16 = 0、余り1。
  4. 余りを下から読み、1A9₁₆。

2進数4桁の組合せは16通りなので、16進数1桁と対応します。例えば1010₂はA₁₆。長いビット列を4桁ずつ区切れば、短く読みやすく表現できます。

井上
開発会社のPM

この13Aは、文字として保存する項目ですか。それとも数値ですか。

新卒ITコンサルタント

仕様では十六進数の数値でした。314に直して、相手側の値と比べます。

井上
開発会社のPM

文字列として扱う場所もあるので、その指定を残してください。

新卒ITコンサルタント

はい。表記が違うだけなのか、値自体が違うのかを分けて報告します。

文字コード

「あ」が文字化けする原因を、フォントのせいだと思いかけた。葵は出力側と入力側の文字コードを聞いた。

文字を数値に対応させる取り決め。送る側と読む側の解釈が違うと、文字化けが起きる。

JISの文字コード
日本語文字の集合や符号化を定める規格群。
Shift_JIS
日本語の符号化方式の一つ。
UnicodeとUTF-8
Unicodeは文字に符号位置を割り当てる。UTF-8は、それをバイト列で表す方式。
詳しい説明・条件・具体例

文字にも数を割り当てれば、ビット列として保存できます。日本語の文字を扱うJISの規格や、Shift_JIS、世界の文字を共通に扱うUnicodeなどがあります。

JISの文字コード
日本語文字の集合や符号化を定める規格群。「あ」はJIS X 0208のコード位置で16進数24 22。
Shift_JIS
日本語の符号化方式の一つ。「あ」のバイト列は16進数82 A0。
UnicodeとUTF-8
Unicodeでは「あ」の符号位置はU+3042。UTF-8という符号化方式で保存すると、バイト列はE3 81 82になります。
小野
生産管理責任者

商品名の「あ」だけ変な表示です。文字の見た目を変えれば直りますか。

新卒ITコンサルタント

まず、書き出す側と読み込む側の文字コードを確認したいです。フォントだけの問題とは限りません。

井上
開発会社のPM

Unicodeの文字の番号と、UTF-8で保存するバイト列も区別しましょう。変換している場所を調べます。

新卒ITコンサルタント

双方で同じ約束になっているか、連携仕様へ明記してもらいます。

単位・接頭語

容量のMBと通信量のMbit、時間のmsと秒。見積りの数字を比べる前に、葵は単位をそろえた。

k・M・Gは大きさ、m・μ・nは小ささを表す。まず同じ単位にそろえてから計算する。

0410の何乗かをそろえる
大きい側倍率小さい側倍率
k:キロ10³m:ミリ10⁻³
M:メガ10⁶μ:マイクロ10⁻⁶
G:ギガ10⁹n:ナノ10⁻⁹
T:テラ10¹²p:ピコ10⁻¹²
詳しい説明・条件・具体例

SIの接頭語ではkは1,000倍です。コンピュータ分野では1,024倍を用いる場合もあり、厳密にはKiB、MiBなどと区別します。設問が1kを1,000とするか1,024とするかを確認してください。小文字bのbitと大文字Bのbyteにも注意します。

高橋
経理担当

こちらは100MB、こちらは100Mbitと書いてあります。同じ100で比べてよいですか。

新卒ITコンサルタント

単位が違います。1バイトは8ビットなので、まずそろえます。Mの倍率の定義も確認しますね。

高橋
経理担当

単位まで読まないと、費用の前提も変わってしまいますね。

葵は項目ごとに、型、長さ、文字コード、単位を記録した。自分で通信処理を書くわけではない。それでも、顧客の情報が正しく渡る条件を確認するには、数と文字の表し方が必要だった。

ちょっと考えてみよう8ビットの符号なし整数は何通り? 最大はいくつ?考え方をひらく +

2⁸=256通りで、0から255まで。最大値は255です。

02
「かつ」と「または」で、受付条件を決める

「在庫があれば今日出せる」で、意見が割れた

条件を真偽値にし、例外も含めて合意する。

要件の再確認|当日出荷の引当受付

当日出荷を受け付ける条件のレビューで、葵は「在庫があれば受付可」と読み上げた。ここでは注文全体を断るかではなく、今日の便へ回せるかを考えている。

小野
生産管理責任者

在庫があっても、便の締切後には回せません。翌日以降の納期回答へ戻す必要があります。

井上
開発会社のPM

在庫があり、締切前でもある場合だけ、当日出荷の引当を受け付ける理解で合っていますか。

新卒ITコンサルタント

はい。まずこの二つの条件を四通り並べます。その他の出荷条件を満たした前提で、どの組合せなら通せるか確かめましょう。

集合・命題・真偽値

「使いやすい」のような言い方と、「締切より前」のように真偽を決められる条件を、葵は分けて整理した。

集合は条件に合うものの集まり。命題は、正しいか誤りかを判断できる文。

05二つの条件が重なる範囲
全体集合の中に、集合Aと集合Bが一部重なっているベン図。AB両方全体の中の、二つの集合
詳しい説明・条件・具体例

集合は、条件を満たす要素の集まりです。ベン図を使うと、集合の重なりや範囲を表せます。命題は、真か偽かが定まる文です。例えば「5は偶数である」は偽です。

真を1、偽を0として扱う演算が論理演算。数を加減する四則演算とは異なり、条件が成り立つかを組み合わせます。「この部品は優れている」のような主観的な言い方は、判定基準を定めないと明確な真偽値にできません。

新卒ITコンサルタント

「使いやすい」は、これだけでは真か偽かを決められませんね。

小野
生産管理責任者

「締切より前なら受け付ける」は判断できます。ただ、ちょうど締切の時刻はどうしますか。

新卒ITコンサルタント

そこがまだ曖昧でした。対象の範囲と、境界での真偽まで、条件として書き切ります。

AND・OR・NOT

在庫だけある場合、時間だけ間に合う場合、両方、どちらもない場合。葵は真理値表を小野と一緒に埋めた。

ANDは両方が真、ORは少なくとも一方が真、NOTは真と偽を逆にする。

06二つの入力から出る答え
ABANDOR
0000
0101
1001
1111

小野が表の「在庫あり・締切後」の行を止めた。

小野
生産管理責任者

この注文も当日出荷を受け付ける表示になっていました。でも、もう締切を過ぎています。

葵は、画面の挙動と表を並べた。

新卒ITコンサルタント

在庫があって、締切前。この二つがそろったときだけ、当日出荷として受け付ける約束ですよね。

佐伯
先輩ITコンサルタント

画面では、どちらか一つだけでも通っているように見えるね。確認できた条件を、井上さんへ渡そう。

新卒ITコンサルタント

「受注がおかしい」ではなく、この入力で当日出荷の期待は不可、実際は可と書きます。

小野
生産管理責任者

残りの行も試してみます。この表なら、何が違うか私にも確認できます。

井上
開発会社のPM

ありがとうございます。期待する結果と並べていただければ、修正後も同じ条件で確かめられます。

葵が一人で不具合を説明するより、四つの組合せを共有する方が、ずっと話が早かった。

AND|論理積
すべてが真のときだけ真。
OR|論理和
少なくとも一つが真なら真。
NOT|否定
真を偽に、偽を真に反転します。
詳しい説明・条件・具体例
AND|論理積
すべてが真のときだけ真。「在庫がある、かつ、締切前」。A・Bなどと表します。
OR|論理和
少なくとも一つが真なら真。両方が真でも真です。A+Bなどと表します。
NOT|否定
真を偽に、偽を真に反転します。入力は一つです。

ORの「または」は、日常会話の「どちらか一方だけ」とは限りません。両方を含むのが基本です。

新卒ITコンサルタント

「または」は両方も含みますね。どちらか一方だけにしたい条件とは、分けて書きます。

NAND・NOR・XOR

条件を否定した表現がレビューに現れた。「両方ではない」と「両方とも違う」は同じではない。葵はNANDとNORの出力を比べた。

NANDはANDの否定、NORはORの否定。XORは、二つの入力が異なるときに真になる。

07似た名前を、出力で比べる
ABNANDNORXOR
00110
01101
10101
11000
NAND|否定論理積
ANDの結果を反転。
NOR|否定論理和
ORの結果を反転。
XOR/EOR|排他的論理和
二つの入力が異なるとき1、同じとき0です。
詳しい説明・条件・具体例
NAND|否定論理積
ANDの結果を反転。両方1のときだけ0です。
NOR|否定論理和
ORの結果を反転。両方0のときだけ1です。
XOR/EOR|排他的論理和
二つの入力が異なるとき1、同じとき0です。
新卒ITコンサルタント

「両方ではない」と「両方とも違う」を、同じ条件として読んでいました。

井上
開発会社のPM

では、片方だけが真の場合を入れてみましょう。二つの式で結果が分かれます。

葵は入力の組合せを指で押さえ、出力の欄を書き直した。

新卒ITコンサルタント

NANDはANDの結果を、NORはORの結果を否定するんですね。略語が分からなくなったら、期待する結果の表に戻って確かめます。

この二条件では「在庫あり・締切前」の組だけ当日出荷の受付可とした。葵は条件表を要件とテストの両方へ添えた。対象を明確にした論理演算が、業務側と開発側の認識をそろえる言葉になった。

ちょっと考えてみようA=1、B=1。ORとXORの結果は同じ?考え方をひらく +

違います。ORは少なくとも一方が1なので1。XORは二つが同じなので0です。

03
何通りあるか。どれくらい起きそうか。

テストの組合せが、想像より多かった

順番、重複、確率の前提を分けて数える。

テスト準備|組合せの洗い出し

拠点、出荷予定時刻、品目、受注の経路。葵はそれぞれ一度試せば済むと思っていたが、井上が組合せの数を示すと、予定表に収まらなくなった。

佐伯
先輩ITコンサルタント

まず何を別の場合と数えるか、そろえよう。順番を区別するかでも数が変わる。

確率

過去の不具合が少ないから、今度も起きないと考えたくなった。葵は確率の前提と、観測していない条件を区別した。

起こる可能性を0〜1で表す。どの結果も同じ起こりやすさなら、該当する場合の数を全体で割る。

同様に確からしい場合の確率条件に合う場合の数 ÷ 全体の場合の数
詳しい説明・条件・具体例

必ず起こる事象の確率は1、起こり得ない事象は0です。ある事象が起こらない確率は、1 − 起こる確率。公平なサイコロで5が出ない確率は1−1/6=5/6です。

新卒ITコンサルタント

前回のテストでは起きなかったので、今回は大丈夫と言いそうになりました。

佐伯
先輩ITコンサルタント

前回は何を試して、何を試していなかったかな。サイコロのように、各場合が同じ確率とは限らないね。

新卒ITコンサルタント

観測していない条件を残します。不具合の件数だけを、安全の保証には使いません。

順列・組合せ

5種類から3種類の詰合せを選ぶ場合と、並び順まで確かめる場合。葵は同じ60通りとして数えていた表を直した。

順列は順番も区別する。組合せは選ぶ相手だけを見る。まず、順番に意味があるか考える。

08順序を区別するかが分かれ道
順列A→B→CとC→B→Aは別
組合せA・B・Cを選べば同じ
順列ₙPᵣ = n! ÷(n−r)!
組合せₙCᵣ = n! ÷{r! ×(n−r)!}
詳しい説明・条件・具体例

5種類の部品で考える

  1. 5種類すべてを並べる:5!=5×4×3×2×1=120通り。
  2. 5種類から3種類を選んで並べる:₅P₃=5!÷2!=60通り。
  3. 5種類から3種類を選ぶだけ:₅C₃=5!÷(3!×2!)=10通り。

同じものが混じる並べ方では、その入替えで重複する分を割ります。Aが3個、Bが2個、CとDが1個ずつなら、7!÷(3!×2!)=420通りです。なお0!は1と定めます。

新卒ITコンサルタント

選ぶだけなら10通り、選んで並べるなら60通り。何を別のケースと扱うかで、テストの量も変わります。

加法定理・乗法定理

二つの条件を続けて選ぶのか、どちらかの経路を通るのか。葵は掛ける場合と足す場合を分けた。

「または」は重なりに注意して足す。「かつ」は条件を確かめて掛ける。独立かどうかで計算が変わる。

詳しい説明・条件・具体例

「Aをして、その後Bもする」なら、各段階の選び方を掛けます。「AかBのどちらか」なら、重ならない場合に分けて足します。

移動手段とサイコロで確認

  1. 東京→大阪が3通り、大阪→広島が3通りなら、両方を選ぶ行程は3×3=9通り。
  2. 大阪から東京か広島のどちらかへ行き、それぞれ3手段なら3+3=6通り。
  3. 独立なサイコロ2回で、1の後に2が出る確率は1/6×1/6=1/36。
  4. サイコロ1回で1か2が出る確率は1/6+1/6=1/3。
新卒ITコンサルタント

二つの確率を掛けましたが、同じ原因で一緒に起きる可能性がありますね。

井上
開発会社のPM

独立という前提を置けるか、先に確認したいです。足すときも、重なる場合を二重に数えていないか見ましょう。

新卒ITコンサルタント

計算の前に、どういう場合を数えたか説明します。式だけ正しくても、前提が違えば答えを使えませんね。

葵は全件を機械的に試す案から、件数を把握したうえで、重要な条件と境界を優先する相談へ進んだ。数え方は、テストの労力と抜けを説明するために使えた。

ちょっと考えてみよう5種類から3種類を選ぶ詰合せ。箱の中の順番を区別しないなら何通り?考え方をひらく +

₅C₃=10通り。60通りは、選んだ後の並び順まで区別した場合です。

04
平均だけでは、見えないことがある

平均は合格。でも、使った人は待たされた

代表値とばらつきから、体験の違いを読む。

試作の測定|応答時間の記録

平均応答時間は目標内だった。葵は良い報告ができると思ったが、小野と田中の反応は違った。

小野
生産管理責任者

昨日は、かなり待った気がします。数字では問題なかったのでしょうか。

田中
物流担当

私が確認したときは、照合待ちの箱がたまっていたんです。何時ごろの操作か、メモを見てみますね。

新卒ITコンサルタント

平均だけでは、一部の長い待ち時間を見落としますね。個々の記録と分布も確認します。

佐伯は、計算を確かめるための小さな練習データを出した。タイムの題材は違っても、中心と散らばりを読む考え方は同じだった。

度数分布・ヒストグラム

ヒストグラムで、どの範囲に値が集中し、どこまで広がるかを確かめる。練習では17人の50m走の記録を使い、境界の数え方をそろえた。

値を区間ごとに分け、入った数を数える。棒の形から、集まり方や偏りを見る。

0950m走、17人の記録の分布
17人の50m走。6秒未満1人、6.0以上6.5未満2人、6.5以上7.0未満3人、7.0以上7.5未満5人、7.5以上8.0未満4人、8.0以上2人。人数1〜5.926.0〜36.5〜57.0〜47.5〜28.0〜
区間は「6.0秒以上6.5秒未満」のように、境界を重複させず定めます。棒の高さはその区間の人数です。
詳しい説明・条件・具体例

統計では、データから全体の特徴を捉えます。値を区間ごとに分けて件数を数えるのが度数分布表、それを隣り合う棒で表したものがヒストグラムです。

最も高い棒は7.0秒以上7.5秒未満の5人。個々の値を追うだけでなく、どのあたりに集まっているか、広く散っているかが分かります。

新卒ITコンサルタント

この区間の端にある記録は、隣の区間にも入れそうになりました。

井上
開発会社のPM

以上・未満など、区間の約束を先に固定しましょう。全件を数えた合計も元の件数と照合します。

新卒ITコンサルタント

練習データだけの注意ではないですね。応答時間をまとめるときも、境界と合計を確かめます。

平均値・中央値・最頻値

葵は同じデータから平均、中央値、最頻値を計算した。どれを示すかで、伝わる特徴が変わる。

平均値は合計÷個数、中央値は順に並べた中央、最頻値は最も多く出る値。

5.9, 6.2, 6.4, 6.8, 6.8, 6.8, 7.1, 7.1, 7.2, 7.2, 7.3, 7.6, 7.6, 7.7, 7.8, 8.1, 8.2
平均値
すべての値の合計を、個数で割った値。
中央値
値を順に並べた中央。個数が偶数なら、中央の二つの平均。
最頻値
最も多く出てくる値。
詳しい説明・条件・具体例

次の17個のタイムを、小さい順に並べます。

平均値
合計121.8を17で割り、約7.16秒。すべての値を使います。
中央値
中央の9番目は7.2秒。データが偶数個なら、中央二つの平均を取ります。
最頻値
最も多く出るのは6.8秒で3回。最頻値が複数ある場合もあります。

極端に大きい値や小さい値は、平均を強く動かすことがあります。中央値や分布も合わせると、代表値一つで誤解するのを防げます。

新卒ITコンサルタント

一つの代表値を「全員の体験」として話さないようにします。極端な値があるときは、分布と一緒に見ます。

分散・標準偏差

平均15の二組の数字を見て、葵はようやく「平均は同じでも不安定」を説明できた。

平均からの散らばりを表す。標準偏差は分散の平方根で、元のデータと同じ単位になる。

分散平均からの差の2乗の合計 ÷ データ数
詳しい説明・条件・具体例

13・14・15・16・17と、5・10・15・20・25は、どちらも平均15です。しかし後者のほうが広く散らばっています。

13・14・15・16・17の分散

  1. 平均15との差は、−2、−1、0、1、2。
  2. 差の2乗は、4、1、0、1、4。合計10。
  3. 10÷5=2が分散。標準偏差は√2≒1.41。

5・10・15・20・25の分散は50、標準偏差は√50≒7.07です。標準偏差は分散の平方根で、元のデータと同じ単位でばらつきを見られます。母集団の分散を推定するときに使う不偏分散では、分母をn−1にする別の定義もあります。

田中
物流担当

いつも同じくらい待つのと、急に長く待つのでは、声の掛け方も変わります。

新卒ITコンサルタント

平均が同じでも、使っているときの困り方は違うんですね。

井上
開発会社のPM

分散や標準偏差で散らばりを見て、長く待った記録の条件も調べましょう。

新卒ITコンサルタント

平均だけで合格とは報告しません。ばらつきと、実際に待たされた場面を一緒に説明します。

葵は平均だけの報告をやめ、条件別の分布や遅いケースを添えた。

井上
開発会社のPM

時刻と操作が分かれば、こちらのログも確認できます。長く待ったケースを一緒に見ましょう。

顧客の感覚を「数字では問題ない」で片付けず、なぜ差が出るのかを調べる入口にできた。

ちょっと考えてみよう平均が同じ二つのデータ。ばらつきが大きいほうを見分けたいなら?考え方をひらく +

分散や標準偏差を比較します。平均から遠い値が多いほど、一般にこれらの値は大きくなります。

この章、おつかれさまでした!

「おかしい」を、確かめられる条件にした。

桁と単位をそろえ、条件の組合せを示し、ばらつきを残して報告する。曖昧だった不具合の説明が具体的になりました。次は、プログラムが処理する順番を追います。

この章を読み返す ↑
NEXT CHAPTER / 公開中06 アルゴリズム
前の章へ · 第4章 システム開発とマネジメント