#7
This presentation is the property of its rightful owner.
Sponsored Links
1 / 28

#7 情報・データ・プログラム・バグ PowerPoint PPT Presentation


  • 69 Views
  • Uploaded on
  • Presentation posted in: General

#7 情報・データ・プログラム・バグ. Yutaka Yasuda, 2004 spring term. ソフトウェアの安全性. 1999 米国での報告 「国民が脆弱なソフトウェアに頼らざるを得ない状況にある」 PITAC (大統領情報技術諮問委員会) 事例 みずほ銀行システムトラブル(バグ) ウィルス問題(セキュリティホール) 470 万人顧客名簿流出(情報管理). ソフトウェアの安全性. 2002 米国での試算 「ソフトウェアの低品質によって米国経済は 600 億ドル (7.2 兆円 ) 、 GDP の 0.6% の損失をこうむっている」

Download Presentation

#7 情報・データ・プログラム・バグ

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


7

#7 情報・データ・プログラム・バグ

Yutaka Yasuda, 2004 spring term


7

ソフトウェアの安全性

  • 1999 米国での報告

    • 「国民が脆弱なソフトウェアに頼らざるを得ない状況にある」

    • PITAC(大統領情報技術諮問委員会)

  • 事例

    • みずほ銀行システムトラブル(バグ)

    • ウィルス問題(セキュリティホール)

    • 470万人顧客名簿流出(情報管理)


7

ソフトウェアの安全性

  • 2002 米国での試算

    • 「ソフトウェアの低品質によって米国経済は 600 億ドル(7.2兆円)、GDP の 0.6% の損失をこうむっている」

    • NIST (National Institute of Standards Technology)

    • 日本の GDP から推定すれば 3 兆円に相当

  • バグ

    • ソフトウェア障害の 3/4 が既知の初歩的なプログラミングの誤りによる - Eugene H. Spafford


7

バグ

  • なぜバグは発生するのか?無くならないのか?

    • 「注意深く設計すれば良かった」だけか?

  • 情報処理システムが本来持つ構造問題として理解していきましょう


7

「情報処理」について


7

情報処理

  • 情報処理とはなにか?

  • 私たちが目にしているのは実はデータ処理

  • コンピュータはデータ自動処理機械である

  • なぜデータ処理機械で情報処理が可能なのか?

  • 情報とデータの関係を理解する


7

情報

A B C

  • 「情報とは?」

    • インクのシミと A という文字の違い

    • 物理で記述できない違いこそ「情報」

  • 情報

    • ものごとの説明(特徴を抽出したもの)

  • データ

    • 情報を一定ルールで「記述」したもの


7

データ

  • コンピュータは情報とデータを区別する

    • コンピュータは:情報が持つ意味を解釈しない

    • 人間が:データ処理を情報処理として解釈する

  • それを前提に:情報処理機械とデータ処理機械は等価である

  • コンピュータが情報とデータの役割分担を明確にしたとも言える


7

エントロピーという視点からの情報

  • エントロピー:無秩序性の尺度

    • より無秩序になるのが自然であり、そちらの方がエントロピーが大きいという概念

  • 情報=エントロピーを減少させるもの

    • 自然の状態(情報が無)

    • これに反する秩序こそが「情報」


7

情報理論

  • 1948 シャノン:「情報量」を定義

  • エントロピーの視点から

    • データ系列を生成する情報源の確率・統計的な構造から決まるエントロピーをその情報源の情報量という

    • データ量ではく、このデータ系列が担っている真に有効な情報の量を情報量という

    • 生成されたデータを最も効率よく(冗長性や無駄なく)二値系列に直し、最小の長さで記述したときのビット数

  • 情報量の概念は符号化によってはじめて明確な意味をもった


7

具体的なコンピュータの中での

データ処理のすがたについて


7

入出力装置

 データを取り込んだり、取り出したりする。

データは一般に内部回路で直接扱えない形式をしている。例えばスイッチのon/offや印字結果など。 つまり man machine interface が必要。

コンピュータの構成

演算装置

1+1などの単純な演算を行う。

 結果はほんの僅かしか記憶できない。

制御装置

 どんな演算を、入力・記憶していたどの値に対して行い、どこに出力・記憶するかを指示する。

中央処理装置 (CPU)

命令の流れ

制御装置

入力装置

出力装置

演算装置

記憶装置

 演算の結果や、次に行うべき演算の指示内容を記憶する。

 順序だてた動作のために状態の記憶が必要。

(今どうなったかを基に、次どうするかを決める)

記憶装置

データの流れ


7

制御装置

入力装置

出力装置

演算装置

記憶装置

コンピュータの構成要素

  • 現代的コンピュータの構成要素

    • 入出力装置+演算装置+制御装置+記憶装置(+自動化)

      • データを入力し、

      • (単純な)演算をほどこし、

      • 結果や状態を保存しながら、

      • 繰り返しや条件分岐など順序だてた処理を行い、

      • 結果としてデータを出力する

    • ノイマン型

      • 1946 ノイマンらが提案した構成モデル

      • 図はノイマン型コンピュータの論理的モデル(厳密には Stored Program (後述)であることも含むべき)


7

(復習) 二進での計算

  • 簡単な処理の繰り返しで実現

  • 自動計算機械はできた

  • 自動データ処理機械はどのようにして?

  • 処理手順はどこに?


7

データ処理機械を作る (カードの枚数が奇数か偶数かを判定する)

  • 注目するべき点

    • 条件によって動作が左右される

    • 過去の状況によって動作が変わるため、記憶装置を利用(過去の状態を更新し続ける)

  • カード枚数が奇数か偶数か、という「情報」を、カードの通過という現象に変え、

  • カードの通過という現象をデータ(電気信号)の発生に変えて、

  • データ入力ごとに奇偶を記録する。

制御装置

信号が発生したら:

X=1ならXを0にし、ランプを点灯

X=0ならXを1にし、ランプを消灯

命令の流れ

演算装置

Xに値を設定

出力装置

Xの状態に合わせ

てランプを点灯

入力装置

カードが来たら電気信号を発生

データの流れ

記憶装置

現在の状態=X


7

データ処理機械を作る (カードの枚数が奇数か偶数かを判定する)

  • つまりプログラムもデータとして扱う

    • 処理手順の複雑化に対応しやすい。

    • 処理手順を簡単に入れ替え可能(まずカードに処理手順を記録してそれを読ませて記憶装置に記録する等)

  • 改善点

    • 処理手順をデータとして表現し、

    • 記憶装置に記録し、

    • 必要に応じて逐次読み込んで実行する。

制御装置

信号が発生したら:

次の手順を取り出して処理を逐次実行

命令の流れ

演算装置

Xに値を設定

出力装置

Xの状態に合わせ

てランプを点灯

入力装置

カードが来たら電気信号を発生

データの流れ

Stored Program 方式(プログラム記憶方式、が分かりやすいが一般にはプログラム内蔵方式と訳)

記憶装置   

X=1ならXを0にし、ランプを点灯

X=0ならXを1にし、ランプを消灯

現在の状態=X


7

自動情報処理機械

  • 自動計算機械はできた

  • 自動データ処理機械はできた

  • 自動情報処理機械はどのようにして?

  • データ処理を情報処理と解釈できるでは?

  • 汎用性

    • 計算機がなぜワープロになれるのか?


7

ソフトウェアとバグの関係


7

バグ

  • プログラムに含まれる「間違い」

  • データは意味をもたない

  • コンピュータは意味を扱わない

  • バグ

    • 無意味な(矛盾した)処理でも指示通り動作する

    • 例えば「金利と残高を加算する」ところを間違えて「年齢と金額を加算」させてしまうかもしれない

  • なぜ間違えた指示が最後まで?


7

プログラミング

  • 「1から10までの数を足した結果を出せ」

    • これはコンピュータにとって「難しすぎる」指示

  • 手順の明記

    • 「Xを 1 から 10 まで変化させ、それを毎回 Y に繰り込め」

  • プログラムとは何か

    • 目的に対して「どうやるのか」を詳述したもの

  • 意味の消失

    「コンピュータはデータの意味を理解しないのと同様に、プログラムの意味も知らない」(ただ手順だけを知っている)


7

手順をどのように書くか

  • コンピュータは日本語を理解できない

    • 「Xを 1 から 10 まで変化させ、それを毎回 Y に繰り込む」のもコンピュータには複雑すぎる

    • コンピュータが理解できる言語で書きくだす必要がある

  • C言語での例

  • j=0;

  • for(i=1;i<=10;i++) {

  • j=j+i;

  • };

jははじめ 0 だと設定している

1から10まで変化させるということを、「1 からはじめて 10 以下の場合は終わりまでの処理を行い、1 加算してもう一度繰り返し」という表現で明記している

jに増え続ける i を足したものを再び j に代入


7

手順をどのように書くか

  • しかしC言語でもハードウェアには直接理解できない

    • さらに単純な処理に分解しなければ

    • CPU(例は Motorola 68000)向けのアセンブリ言語で記述

      st 0,$1004

      mov 1,%o0

      st %o0,$1000

      .LL2:

      ld $1000,%o0

      cmp %o0,11

      bgt .LL3

      ld $1004,%o0

      ld $1000,%o1

      add %o0,%o1,%o0

      st %o0,$1004

      ld $1000,%o1

      add %o1,1,%o0

      mov %o0,%o1

      st %o1,$1000

      b .LL2

      .LL3

元のC言語プログラム

j=0;

for(i=1;i<=10;i++) {

j=j+i;

};


7

ソフトウェアの複雑さ

  • アセンブリ言語でもまだ直接は理解できない。

    • 更に機械向けの言語=機械語に直さなくては

      (以下は機械語の一部)

      7400 5f5f 4354 4f52 5f4c 4953 545f 5f00

      5f65 6e76 6972 6f6e 005f 656e 6400 5f47

      4c4f 4241 4c5f 4f46 4653 4554 5f54 4142

      4c45 5f00 6174 6578 6974 0065 7869 7400

      ….


7

情報処理から機械語へ

  • 処理からプログラムまでの変換過程

    • 「1から10までの合計」という処理を

    • どのようにして計算するかという手順に分解

    • それをプログラミング言語で記述し

    • 機械語まで変換

  • 目的から手順列への変換

    • この作業をプログラミングと呼ぶ

  • プログラミング言語から機械語への変換

    • ハードウェアに解釈可能な動作指示へ


7

二つの変換過程

人間側

コンピュータ側

1から10までの数を足した結果を得る

j=0;

for(i=1;i<=10;i++) {

j=j+i;

};

人間が変換(プログラミング)

この時点で意味が消失して手順だけが残る

つまりバグか含まれていても検証できない

02af93e8f

37de76e0

4e3a2…

機械が変換

ここで実行されてはじめてバグが見つかる


7

失われれる意味

  • プログラミングの過程で、プログラムから意味は失われる

    • そのプログラムの目的を知るのはプログラマだけ

  • コンピュータは情報ではなくデータだけを扱う

    • データが表現する情報は入出力の前後にいる人間が扱う

  • ソフトウェアは作業から意味を抜いた手順だけを扱う

    • その意味(内容)は結果を受け取る人間だけが知る

  • バグ(意図しないプログラムの振る舞いをひきおこす不具合)が発生する根本的要因のひとつ


7

失われる意味

  • ソフトウェア開発現場での問題

  • 分業による意思疎通の壁


7

対策

  • ソフトウェア工学の可能性

    • これは工学の出番ではないのか

  • プログラミング段階でのバグ検出

    • 仕様記述

    • プログラミング時に矛盾チェックが可能になる情報をまず記述

  • チェックの自動化

    • プログラム脆弱性の検査

    • テストによる実行時矛盾の検出


  • Login