2010年7月29日木曜日

計算機 初歩の初歩 ~計算機は何故動く? ソフトウェア編~

よくよく考えてみれば、計算機の動く仕組みはハード/ソフト両面から説明が必要でした。
ということで、今回はソフトウェア編です。

まずは前々回の内容から。


ノイマン型アーキテクチャの計算機は以下のようなステップを繰り返し行うことで計算を行う。
  1. プログラムカウンタのさすアドレスから次の命令を読み込む
  2. 命令長さの分だけプログラムカウンタを増やす
  3. 制御装置で命令をデコードする。制御装置は計算機の他の部分に対して命令を出したり、
    繰り返しを行うためにプログラムカウンタの値を替えたり、条件分岐のためにALUの状態によって
    プログラムカウンタの値を替えたりすることができる。
  4. ステップ1へ戻る


という部分がありましたが、この計算手順がソフトウェアの基本になります。

「アドレス」とはメモリ上のアドレス(番地)の事で、メモリ上の何番地の情報を参照する、という形で情報を見たり書いたりします。
機械語(演算装置が直接理解できる命令の事。"0"と"1"で構成される為、人間には非常に読みづらい)ではメモリのアドレスを指定するのですが、アセンブラや高級言語では直接のメモリアドレス指定はまず行いません。
しかし、メモリアドレスを意識しておかないと「何故動くの?」という問いに答えられないので書いてみました。
現実問題としてメモリアドレスを意識してコーディングすべき言語はC言語くらいまでです。
(VC++.netでは意識する必要性はありません。VC++までです)

ステップ2.の「命令長さ」ですが、メモリアドレスが指すアドレスは、命令の格納されているアドレスの一番先頭のアドレスです。
その為、アドレスに格納されている命令の長さの分だけアドレスの位置を移動させないとならないわけです。
このあたりの処理はアセンブラや高級言語で意識する必要はありません。

ステップ3.で構造化言語の要素(順次・反復・分岐)が登場します。
高級言語の場合、このレベルでソースの記述を行います。


さて、当たり前のように出てきた単語を解説しますと・・・
『アセンブラ』(wikipediaより引用)

CPUが直接実行できる言語は機械語のみであるが、機械語は数字(内部的には二進数)の羅列なので人間には理解しにくい。そこで、機械語を直接記述するのではなく、機械語の意味を表す略語でプログラムを記述することで、人間により分かりやすくしたものがアセンブリ言語である。アセンブリ言語の文法はCPUのアーキテクチャに依存するため、高級言語のような移植性はない。
アセンブリ言語を機械語に変換する事をアセンブル (assemble) すると言い、それを行うプログラムの事をアセンブラ (assembler) と言う。なお、アセンブリ言語の意味で「アセンブラ」または「アセンブラ言語」(Assembler Language)と呼ぶ場合も多い[1]
アセンブリ言語の命令は、アセンブラに対する命令(疑似命令)やマクロ命令を除き、機械語と1対1で対応し、プログラマがCPUの動作を把握しながらプログラムを記述する事ができる。そのため、
  • 実行速度やプログラムサイズに制限があるアプリケーションで、高級言語であるコンパイラの最適化能力では達成できない最適化を手作業で行いたい場合
  • CPUの動作をプログラマが完全に制御する必要がある場合
  • メモリ容量や演算実行速度などのリソースに厳しい制約がある用途
などにはアセンブリ言語によるプログラムが行われる。現在でも、例えばOSカーネルデバイスドライバ組み込みシステムの開発といった場面で頻繁に用いられる。


機械語よりも人間に近いのですが、CPUの動作一つ一つについて記述が可能⇒記述が必要となります。
ずいぶんと書きづらいのですが、無駄な動きを一つもさせないというプログラミングが可能となります。
ちなみに、アセンブラは低級言語(低水準言語)と言われています。
レベルが低いのではなく、コンピューターに近い⇒原始的 という意味合いからのネーミングと思われます。

『高級言語(高水準言語)』(やはりwikipediaより引用)

「高級」の由来は、コンパイラなどで直接機械語にするのではなく、一度アセンブリ言語に変換されて、機械語に変換されることがあったため、アセンブリ言語を低級言語、低級言語に変換できる言語を高級言語と区別したことから。インタプリタなどでは低級言語ではなく、中間言語にされて実行されることが多い。
アセンブリ言語と比べ、
  • 人間にとってわかりやすい
  • CPUに依存した処理を書かなくてよい
  • メモリ制御IO制御等CPUレベルの操作を意識しなくてよい
という違いがある。広義の意味は主に三番目の理由からである。

人間寄りのプログラミング言語です。
機械語/アセンブラレベルの複数の命令を、高級言語の1つの命令で済ませることが出来ます。
現在のプログラマ(プログラミングが出来る人)はほとんどすべてが高級言語を扱っています。
たまに筆者のようにアセンブラ経験者(※筆者は大学の演習で使用しました)や、組み込み系一本でアセンブラばりばりな技術者がいますが例外的存在になりつつありますね。


一言でまとめると
『計算機は機械語しかわからないが、翻訳(コンパイル)することで高級言語による命令が実現されている』
のが現状であり、現在の計算機を動かしているソフトウェアとなります。
本当にプログラムを書けるというのは、機械語レベル(せめてアセンブラレベル)を理解して高級言語を使用している状態をいうのではないかなぁと思います。

尚、javaが環境を選ばずに動かせるというのは仮想マシン(VM)があるからなのですが、仮想マシン=計算機と見なすとその理由がわかりやすくなります。
仮想マシンを使うことで、どのような環境でも同じ計算機で計算を行うという状況を作り出している。
その結果、環境を選ばない、という利点が生まれているわけです。
一つ余計なもの(仮想マシン)が追加されている為に動きが遅かったり、サーバやクライアントのスペックを無駄に要求されるのですけどね^^; そんな理由から、筆者はjavaが好きじゃなかったりしますが、それも計算機の仕組みを知ればこそです。


やはり、ちゃんと肉付けして説明すると講義数コマ分の分量のある内容だけに消化不良かもしれないですね。
そこまで書ききる気力がないので今日はこの辺で終了です。

2010年7月28日水曜日

計算機 初歩の初歩 ~計算機は何故動く?~

ブログのアクセス解析ツールを使うことにしました。
といっても、すぐに結果が出てくるわけではありませんのでしばらく待ちです。

さて、前回の反響も見ずに計算機初歩シリーズ第二回です。
今回はハードウェアの基本的な構成と各部の働きを見てみようと思います。
正直なところ、大まかに理解していればあとはぐぐる先生に質問できますので(←基礎知識なしではぐぐる先生に質問しても効果が薄いのです)最低限このくらいは抑えておこうというレベルで書いてみます。


ノイマン型の説明で
『ノイマン型アーキテクチャの計算機は5つの部分からなる。演算論理装置(ALU)、制御装置、メモリ、入出力と、これらを接続する情報経路である。』
と前回引用しましたが、これだけだと手元にあるパソコンのどの部品がどの部分に当たるのかわかりづらいと思います。
その為、もう一段階現在に近い説明を引用します。(引用元

コンピュータは制御装置、演算装置、主記憶装置、補助記憶装置、入力装置、出力装置 で構成されています。
コンピュータの心臓部は中央処理装置 (CPU) です。
中央処理装置は制御装置と演算装置から成っています。
主記憶装置はプログラムやデータを記憶し、CPU の求めに応じて素早くデータを送ったり、 CPU から返された処理結果を記憶して、コンピュータの働きの中心となるメモリ  です。
大型コンピュータが中心であった頃の習慣で、CPU と主記憶装置をコンピュータ本体といい、 入力装置、出力装置、補助記憶装置はコンピュータ本体の周辺に設置されていたことから 周辺装置 (peripheral equipment) といいます。

入力装置はキーボードやマウス、 バーコードリーダーやイメージスキャナーなど、 コンピュータを操作したり、さまざまな情報をコンピュータに与えるために使用されます。

出力装置はディスプレイやプリンタなど、コンピュータの処理状況や処理結果を表示、 印刷するものや、 音声のデータを再生するスピーカなども出力装置の仲間です
補助記憶装置はフロッピーディスクや ハードディスク、CD-ROMドライブなどです。
ハードディスクに保存されているプログラムを主記憶装置に送ったり、 コンピュータで作られたデータをフロッピーディスクやハードディスクに保存する、 などというふうに使用されます。

ちなみに、この引用元は大学の講義資料のようなので堅いですが比較的整理されています。
独習時の参考サイトとしてお勧めしておきます。

ノイマン型の5つの部品と、上記引用との対応をとってみると…

・演算論理装置(ALU)+制御装置 ⇒ 中央処理装置(CPU)
・メモリ ⇒ 主記憶装置
・入出力 ⇒ 入力装置・出力装置
・これらを接続する情報経路 ⇒ (マザーボード上の回路(バス)・配線など)

となります。
尚、補助記憶装置はノイマン型では考えておらず、現実問題(主に費用の問題)として必要な為に追加されたものです。
計算機が直接扱うのはメモリ上の情報であって補助記憶上の情報ではないのです。


上記引用で、おおざっぱな理解は可能ですが念のため解説を。

0、(パソコン起動)
1、起動終了後、入力待ち状態になる
2、入力(キーボード・マウス・FDやCD挿入)に応じて処理開始
3、入力された情報が情報経路を通ってCPUに伝わる
4、必要な情報を補助記憶装置から主記憶装置に読み込む
5、命令を実行する
6、必要に応じて処理後の情報を出力装置や補助記憶装置に送る
7、命令がある間、4、~6、を繰り返す
8、入力待ち状態に戻る

7、で「命令がある間」とありますが、命令の最中でも確認メッセージ表示(**して良いですか? Yes/No)の入力待ちのように入力を促す場合があります。

全て書いていませんが、装置間の情報伝達は全て情報経路を通じて行われます。

常に各装置をフル稼働しているわけではありませんので、複数のプロセス(上記1、~8、を行う手続き)を同時に動かしているのが現在のコンピュータ(正確にはOS)です。
同時に、と言っても全ての命令や処理を一度に行わせるのではなく、作業予定表を作るようにして順番に処理を実行させます。この効率が良ければ良いほど各装置を有効活用できます。


深堀はいくらでも出来る分野なのですが・・・
あまりやるとこれだけでブログが一つ出来てしまうので、というより筆者のレベルの浅さが露呈する(笑)のでここまでにしておきます。

実際問題としては、どのような装置がどのような役割を担って計算機が動いているか、上記のレベルで理解していれば、調べものなり質問なりが比較的スムースに行きます。


2010年7月27日火曜日

計算機 初歩の初歩の初歩 ~計算機とは?~

技術的な話の少ない当ブログ。
このままでは良くない、と感じた筆者は抜本的な構造改革に取り掛かる。
しかし、その行く手には・・・

って、どこぞの予告編みたいですね。
かなり気合入れていますので、今回の投稿が予告編になってしまう恐れがありますが進めてみます。


この文章を見ているということは、読者は全て『計算機』を使用しているということになります。
さて、『計算機』とは何か?
パソコン? スパコン? マイコン? ケータイ? 電卓?
どれも『計算機』に当たります。(マイコンや電卓ではこの文章は見れませんが^^;)

「パソコンの何処が計算機なのさ?」

と思われると思いますので、『計算機』とは何か、を書いてみようと思います。


Computer(コンピューター)の和訳(google辞書で翻訳)は
  1. コンピュータ
  2. コンピューター
  3. 計算機
  4. 電子計算機
  5. 計算器
  6. 高速演算機構
     となり、「計算の為の機械」と言えます。(「機械」と「器械」の差はスルーします。このへんを厳密に定義する人々もいるようですが本筋じゃありませんので)

    では、どのようにして正しい計算をする仕組みを作るのか?
    この理論の大本と言えるのが『オートマトン』です。
    wikipediaによると















    オートマトン (automaton (pl: automata)) とは「自動人形」を意味している言葉で、情報科学の分野においては、次のような特徴を持ったシステムのことである。
    • 外から、連続している情報が入力される
    • 内部に「状態」を保持する
    • 外へ、何らかの情報を出力する
    というのがオートマトンなのですが、ずいぶんと抽象的になります。
    具体的には有限オートマトンに詳しいのですがここをしっかり説明すると大学の講義数コマ分の分量になりますので、興味のある方はリンク先(wikipedia)を見てください。
    尚、リアルでの質問も受け付けます。(メールなどでの質問は申し訳ありませんが勘弁してください。参考サイトを検索する方が遥かに早いです)


    簡単に言うと、状態の遷移を示す為の理論です。


     「状態:空腹」、「入力:食事」⇒「遷移」⇒「状態:満腹」、「入力:時間経過」⇒「遷移」⇒「状態:空腹」・・・


    と言えばなんとなくわかるかと思います。
    上記のオートマトンの説明に沿うならば、

    外からの情報入力(「入力:**」)があり、情報入力に応じて状態遷移する。
    遷移元と遷移先の「状態:**」を内部に保持し、「状態:**」の情報を外へ出力する。

    と言えますね。


    どれほど複雑なプログラムでも、このような状態遷移が必須となります。
    初期状態と外からの入力がない限り、どれほど高度なシステムも動きようがないのがわかると思います。

    このオートマトンというものは、自動/半自動の仕組みの大半で使われていますので、身近なもので状態遷移を考えてみるのも面白いと思います。



    さて、オートマトンが状態遷移を示すのはわかるのですが、それのどこが「計算」なのか?
    次はそのへんを見ていきたいと思います。



    現在使用されている『計算機』の基本は、ほとんどが「ノイマン型」と言われるものを使用しています。
    この「ノイマン型」計算機は「チューリングマシン」の理論を使っているのですが、「チューリングマシン」は「オートマトン」の定義を拡張したものです。


    もう少し噛み砕いてに説明をしたかったのですが、これはそういうものだ、そういう関係だと思ってください。
    チューリングマシンとは(wikipediaより)


    チューリングの仮想機械は、
    1. 無限に長いテープ
    2. その中に格納された情報を読み書きするヘッド
    3. 機械の内部状態を記憶するメモリ
    で構成され、内部状態とヘッドから読み出した情報の組み合わせに応じて、次の動作を実行する。
    • ヘッド位置のテープの情報を読みとる
    • ヘッド位置のテープに情報を書き込む
    • 機械の内部状態を変える
    • ヘッドを右か左に一つ移動する
    上の動作を、機械は内部状態が停止状態になるまで反復して実行し続ける。
    というものです。
    オートマトンの拡張だけあって、似ていますね。
    情報の読み取り(オートマトンで言えば外部からの入力)、情報の書き込み(外部への出力)、内部状態の記憶(内部に「状態」を保持する)、とそろっています。


    実際には「無限に長いテープ」なんてものは存在しませんが、ノイマン型コンピューターでは有限の記憶領域の範囲内での計算を保証する作りになっています。
    ノイマン型とは(再びwikipediaより)


    ノイマン型アーキテクチャの計算機は5つの部分からなる。演算論理装置(ALU)、
    制御装置メモリ入出力と、これらを接続する情報経路である。


    ノイマン型アーキテクチャの計算機は以下のようなステップを繰り返し行うことで計算を行う。
    1. プログラムカウンタのさすアドレスから次の命令を読み込む
    2. 命令長さの分だけプログラムカウンタを増やす
    3. 制御装置で命令をデコードする。制御装置は計算機の他の部分に対して命令を出したり、
      繰り返しを行うためにプログラムカウンタの値を替えたり、条件分岐のためにALUの状態によって
      プログラムカウンタの値を替えたりすることができる。
    4. ステップ1へ戻る
    とあります。
    ようやく計算っぽい話(ステップ3.)が出てきました。


    外部からの入力(命令の読み込み)に応じて計算を行うのがノイマン型コンピューター。つまり、計算する為の機械。『計算機』です。
    ここまで書いて(全く厳密じゃない、さわりだけですが)ようやく『計算機』が『計算する為の機械』であるという説明が出来ました。


    ノイマン型アーキテクチャのステップ1,2はマシン語やアセンブラに、ステップ3は構造化言語に、それぞれ関連してきますので、SEならば知っておきたいところです。
    というか、これくらいは知っておかないとプログラミング言語の基本をおさえたとは言えませんので。
    又、ノイマン型アーキテクチャの計算機の5つの部分は、ハードウェアの基本そのものになります。


    さて、ずいぶん大量の情報を垂れ流してしまいましたが、これが初歩の初歩の初歩。
    理解なしでもシステム構築が出来る世の中ですが、理解しておいた方がより良いです。
    続編の予定としては、この書き込みの派生として、それぞれの分野の話を書いていこうと思います。




2010年7月20日火曜日

DBおほへ書

このごろ晴れが続くなぁ、と思っていたら、梅雨が明けているとかいないとか。
異常気象という気はありませんが、わかりづらい気候ですね。
とりあえず、脱水対策として家の冷凍庫の氷を量産しようと思います。
アイスティーを淹れるとすぐに氷がなくなるもので^^;

さて、本日のタイトルの元ネタは戦国モノです。
タイトルと内容はほとんど関係ありません。


DB(データベース)というのは、とても重要な割に理解している人が少ないものだと思います。
かく言う筆者自身、製造工程で使用する為のDBサーバくらいならなんとかかんとか作れなくもありませんが、実環境(実際にユーザが使用する環境)のDBサーバは厳しいです。
何が一番大変かと言うと、データが過不足なくリアルタイムに正しく存在しなくてはならない(しかもシステム稼働中を通してずっと)のです。
中身を理解していないとそんな保証はできないです。

大半のSEが基本的なSQL文(DBを操作するおまじないと思っておけばOKです)が書ければそれで良いと思っている昨今ですが、筆者はある課題の為に調べ物漬け状態になっています。
その過程で出てきた話をちらっと書いてみようと思います。


一番単純なDBには、テーブルと呼ばれるデータ格納領域だけが存在します。
テーブルとは何ぞ? といいますと、エクセルで作った表のようなイメージを持っていただくと良いかもしれません。
カラム(列)が幾つかあって、レコード(行)を構成する。
たとえば、名簿なんかがわかりやすいですが、学籍番号・氏名・備考、という3つのカラムが存在し、学生一人につき3つのカラムそれぞれに情報が入ったレコードが1つ作られます。

実際のDBでは、テーブルとテーブルの関係(上記の「名簿」テーブルの学籍番号と、A講座の成績表テーブルの学籍番号を関連付けることで、A講座の成績表に学生の氏名が登録されていないのに『**さんの成績は【A】です』という情報が得られる)が重要なのですがその辺はそこらへんの解説サイトなどにお任せします。
数学の集合論なんかと絡めても面白いのでしょうけどマニアックすぎるので^^;

では、単純じゃないDBとは? というと、その一つとして「他のDBから情報を参照する」というのがあります。
社内で昔から使っているシステムのDBから必要な情報を取得したい、という場合などが該当しますが、この時に新しいシステムから比較的簡単に情報を参照する方法が【view】です。

えー、現役SEの中からは「viewは複数のテーブルの情報をまとめるものだろ?」などと突っ込まれそうですが、その用途は無論正しいです。
しかし、viewは他のDBの参照が(恐らく)一番簡単に出来る手段でもあるのです。


~サンプル(始)~
CREATE OR REPLACE VIEW 【view名】 AS 
 SELECT dblink.【参照したいカラム名】
   FROM dblink('host=【ホスト名】 port=【ポート番号】 dbname=【DB名】 user=【ユーザ名】 password=【パスワード】'::text, 'select * from 【参照したいテーブル名】;'::text) dblink(【参照したいカラム名】 【カラムの型】);
~サンプル(終)~

はい、何のことやらな方もいるかと思われますが、これが他のDBを参照するviewを作るSQL文です。
ちょっと手抜きでPostgresのビュー定義からコピペしてしまいましたのでわかりづらいところがあるかもです。
簡単に説明しますと…

CREATE OR REPLACE VIEW 【view名】:CREATE VIEWの直訳でわかるように「【view名】という名前のVIEWを作る」という意味です。

SELECT 以下:SELECT カラム名 FROM テーブル名 が参照のSQL文の基本になります。そういうものだと思ってください。

SELECT dblink.【参照したいカラム名】:「dblinkテーブルの【参照したいカラム名】カラムの情報を取得する」という意味です。

FROMは長めなので分割して…
dblink('host=【ホスト名】 port=【ポート番号】 dbname=【DB名】 user=【ユーザ名】 password=【パスワード】'::text, :【ホスト名】というホスト(DBサーバ)に【ポート番号】番ポートからアクセスして、【DB名】というDBに【ユーザ名】と【パスワード】でログインする、という意味です。

 'select * from 【参照したいテーブル名】;'::text):dblinkした先で実行したい参照用SQL文です。

dblink(【参照したいカラム名】 【カラムの型】);:取得したいカラム(情報)の一覧です。カラム名と型(文字列なのか? 数値なのか? 日付なのか? などなど)が必要です。

まとめると
『dblinkで接続した先のテーブルから、指定したカラムの情報を取得して参照する』
となります。
まとめるときに切り捨てた部分が技術的に重要だったりしますが、そこまで入れるとサンプルのSQL文が一番シンプルと言う^^;
SEの会話は宇宙語だ、と思う人もいるようですが、このへんの感覚が理由なのかな?


自分用の覚書兼同じ悩みを持っている方の指針となれば、という記事でした。

2010年7月14日水曜日

小ネタ 勉強してみる?

職場での課題から小ネタ。

筆者はSEなのですが、当然ながら職場にはシステム開発の技術者が多いです。
その為、若手は特に勉強することを求められます。
というよりも、会社側が若手を戦力とすべく(また、会社に依存しない技術者とすべく?)勉強することを求めます。

目安として、基本情報技術者試験に合格すること、というのがあるのですが…
どうも筆者はこの基準が腑に落ちません。
自身が基本情報技術者とソフトウェア開発技術者(現行の応用情報技術者にほぼ相当)持ちであるにもかかわらず、です。

資格を取得する、という行為自体は能動的に動く必要があり、かなりの力を使う必要がある為、その気がない人には出来ません。
とはいえ、資格を取るのが目的の人が多いのではないかな? と思ってしまうのです。
(就活中の学生さんは特に注意してください)

資格取得はきっかけであり、勉強の過程で得られる知識(試験に出ないような知識と、他の分野の周辺知識が結びつくのが重要)が最大の成果だと思います。
無論、資格を取れれば形として他人に示せるので良いことなのですが、取れなかったとしても正しい勉強をしていれば何かしらプラスになっていると思います。
逆に、暗記だけで試験を受けに行く人などはあまりプラスになっていないと思います。

その分野に対する理解を深めること。そしてそれを業務なりなんなりに生かすことが最終的な目標になると思うのですが…
大学と同じで、合格してしまえばこっちのもの、という人が多いのですよねぇ…

2010年7月7日水曜日

システム試験におけるトリアージ

トリアージ(Triage
人材・資源の制約の著しい災害医療において、最善の救命効果を得るために、多数の傷病者を重症度と緊急性によって分別し、治療の優先度を決定すること。語源はフランス語の「triage(選別)」から来ている。適した和訳は知られていないが、「症度判定」というような意味。なお、一般病院の救急外来での優先度決定も、広義のトリアージである。識別救急(しきべつきゅうきゅう)とも称する。(wikipediaより)

いきなり引用からですが、JR福知山線の事故などで知られるようになったこの言葉をシステム開発における試験フェーズと絡めてひとつ書いてみようと思います。

システム開発の試験はどれだけ理想的に進めてもちょっとした躓きで混乱や炎上がおこります。
混乱する原因は、「その不具合は何が原因なのか?」が大本です。
大まかにでも原因が特定できていないと、誰が対応すべきか/誰が対応するのが適切か、がわかりません。
最悪、全く知識のない人が調査をすることになって無駄に時間を費やすケースもあります。
原因がわからないから調査するわけですが、調査の適任者を決める為には原因個所がわからないと… 卵が先か? 鶏が先か? という感じですね^^
なので、「大まかな」原因個所の特定が重要になります。
ちなみに、このときの特定は「AかB」という程度で構わないと筆者は考えています。
無論、「これこれ、こういう風になっているのが原因と思われるので、AかBで問題があるのでは?」という推論が必須です。


「大まかな」原因個所の特定を行わずに、不具合に対処した場合はどうなるでしょうか?
このような場合、難しそうな不具合はリーダーや上級SEなどが担当し、それ以外はなんとなく(件数を頭割りするなど)それぞれのメンバーが担当することが多いと思います。
難しいところは実力のある人が、というのは正しい判断ですが、簡単な不具合に未熟若しくは担当外を担当する人が時間を取られて全体の不具合対応の進捗の足を引っ張ることも多々あります。
進捗が上がってこないとリーダーなどの負荷が増大し、さらに適材適所な不具合修正が出来なくなる悪循環に突入します。
この結果が炎上です。


混乱も炎上も極力避けたいモノですので、不具合の報告を受けた際に何が原因かの切り分けを行うべきです。
その際に便利な考え方が冒頭に書いた「トリアージ」です。


医療の現場だと「命の選別」とまで言われるのですが
(黒タグ:死亡もしくは手当てをしても助からない。  赤タグ:すぐ手当てが必要。  黄タグ:すぐにではないが、手当てが必要。  緑タグ:軽症。
黒タグが付けられた人は今息があっても手当の対象にならない)
システム開発現場では以下の基準での「選別」が考えられます。
 緊急:機能停止または他の機能への影響が大きい不具合。対処は可能な限り早く行う。
 要対応:機能がとりあえず使える、局地的な影響があるような不具合。対処は緊急の次に行う。遅くとも翌日(または2~3日。開発のスピード感に依存)には改修する。
 要検討:機能が問題なく使えるが、何らかの問題があるような不具合。対処は一週間程度のスパンで考えればOK。
 不急:機能が問題なく使え、何らかの軽微な問題があるような不具合。対処は急ぐ必要はないし、運用でのカバーなどで対処不要なケースが多い。
この基準と、大まかな原因特定を組み合わせることで各担当者の分担の最適化と改修予定が立てられます。
要検討や不急の不具合については、比較的時間のある担当外の人が見てもよいわけです。
逆に、緊急や要対応の不具合は原因と思われる個所を担当した人が見ることで迅速な対応が可能になります。
システム開発の場合、黒タグはありませんが(例外として、システムの制約で改修不可能な不具合と言うのがあります。これは黒タグ扱いに近いです)不具合の深刻さと対処期限で切り分けることで全体の進捗が滞らないようにし(他の機能に影響する不具合を放置すると、影響先の機能の試験などが滞るため)、対処期限を守る為に大まかな原因特定で適任の担当者を割り当てることを目指す考え方です。


以上が、システム開発の試験における「トリアージ」の基本的な考えですが、実践する場合はどうなるのか?
こちらについては、筆者の考えがまとまりましたら書いてみようと思います。
とはいえ、経験から出来るようになっていたようなところがあるので難しいのですが^^;



2010年7月6日火曜日

小ネタ 類似性の多すぎるマニフェストたち

参院選投票日が近づいていますが、投票先は決まりましたでしょうか?
筆者は… いまだに決定していません。

雑誌に載っていたネタなのですが、「たちあがれ日本」と「民主党」のスローガン(?)が酷似しているのをご存知でしょうか?
「たちあがれ日本」は
強い経済、強い財政、強い教育、強いふるさと」
「民主党」(正確には菅総理)は
強い経済、強い財政、強い社会保障」 
ちなみに、「たちあがれ日本」は民主党の打倒を主張しています。

又、こちらは新聞でも取り上げられていますが、
「自民党」のマニフェストとして、消費税を10%にするというものがありますが、こちらも「民主党」が参考にすると言って、実質的に消費税を10%に すると言っている状況です。
それにしても埋蔵金は何処に行ってしまったんでしょうねぇ… 消費税上げの前に無駄の削減、と言っていた頃の民主党も何処に行ってしまったのか。

何処に行ったかと言うと、「みんなの党」だったりします。
ここの主張(アジェンダ)ですが、
Ⅰ.増税の前にやるべきことがある!
―まず国会議員や官僚が身を切るべき―
Ⅱ.世界標準の経済政策を遂行し、生活を豊かにする!
―名目4%以上の成長で10年間で所得を5割アップ―
Ⅲ.「地域主権型道州制」で格差を是正する!
―「3ゲン」を移譲し、消費税は地方の財源に―
Ⅳ.激動する国際環境を踏まえた戦略的な外交を!
―日米同盟を基軸に国民や国土はとことん守る―
Ⅴ.財源はしっかり手当てする!
―埋蔵金は3年間で少なくとも30兆円―
これって、野党時代の民主党の主張に似ていますね。
ということで、2009年のマニフェストから「5つの約束」という部分を持ってきました。
 
民主党の5つの約束 
1 ムダづかい 
国の総予算207兆円を全面組み替え。 
税金のムダづかいと天下りを根絶します。 
議員の世襲と企業団体献金は禁止し、衆院定数を80削減します。 
2 子育て・教育 
中学卒業まで、1人当たり年31万2000円の「子ども手当」を支給します。 
高校は実質無償化し、大学は奨学金を大幅に拡充します。 
3 年金・医療 
「年金通帳」で消えない年金。 
年金制度を一元化し、月額7万円の最低保障年金を実現します。 
後期高齢者医療制度は廃止し、医師の数を1.5倍にします。 
4 地域主権 
「地域主権」を確立し、第一歩として、地方の自主財源を大幅に増やします。 
農業の戸別所得補償制度を創設。 
高速道路の無料化、郵政事業の抜本見直しで地域を元気にします。 
5 雇用・経済 
中小企業の法人税率を11%に引き下げます。 
月額10万円の手当つき職業訓練制度により、求職者を支援します。 
地球温暖化対策を強力に推進し、新産業を育てます。 
直近のマニフェストなので一見似ていないようにも見えますが、このころの民主党の主張を思い出すと… 既視感のある方も多いと思います。

これだけ類似されてしまうと、ちょっと選ぶのに困りますが…
・プライマリーバランスの黒字化
・産業振興
・国益の為の外交
を保障してくれるなら喜んで投票するのですけどねぇ。
ちなみに、この3項目。小泉時代に比較的強化された内容です。