特許庁の頓挫プロジェクトからIT業界を考えてみる

特許庁の55億かけて頓挫したプロジェクトの報告書が面白い」を読んでみて、感想を書いてたら長くなったので久しぶりにブログを書いてみる。
これを読んで今のシステム開発の主要な問題点がほぼ出揃っているんじゃないかと思った。

特に「上流偏重、ウォーターフォールでの一括受注、人月によるスケジュール計算」という所は(良い面ももちろんあるが)業界として変えていかないとマズイんじゃないかと思う。
IT業界だけでなく、発注側も「完成までの予算枠を確保しないと決裁が下りない」というシステムも変えないといけないと思う。
情報共有に関しては永遠の課題な感もあるが、構造が似ていると言われる建築業界では設計書のフォーマット・記載内容がほぼ確立されている(と思う)のに対し、ITプロジェクトでは未だ確立されていない所にも問題はありそう。

建築業界と同じ構図だとしても、なぜITは失敗プロジェクトが多いのだろう?
SI業界は建設業界に似ているというのは本当か?:Alternative 笑門来福:ITmedia オルタナティブ・ブログを読んでちょっと考えてみた。

  1. 建築業界には積算基準(費用の算定方法を明確にしたもの)があるが、IT業界では会社が人月当たり単価で見積もっている。
    • これはFP法等の見積技法が確立すれば追いつけるのだろうか?
  2. 建築業界では国交省が作業毎の工数を示しているが、IT業界にはそのようなものがない。
    • 建築の場合は分野が細分化されており、各分野毎に免許があったりと作業の標準化がかなり進んでいるが、ITの場合はそのようなものがなく、企業や人によって一つの作業にかかる時間が大きく変わるから無いのだろうか。
  3. 建設業界では下請けの進捗を出来高で評価するが、IT業界では完成基準の評価
    • ITも下請け企業が提出する資料により出来高管理を行なってはいるのだが、発注側が直接進捗を確認できていないのだろう。
      発注側の人間が「企画、設計はできてもプログラムは書けないし読めない」という状態では進捗確認は難しいと思う。

はたして建築作業員は単純労働者なのだろうか。漫画家のアシスタントは?プログラマーは?
建築業界と似た構図になっていると言われるIT業界だけど、この前提が間違えているんじゃないか。

最近のIPA(独立行政法人情報処理推進機構)の活動を見ていると、「建築業界に近づける」という方向性と「全く違う構図」方向性の両方を模索しているような感じがする。
IPA内のSEC(ソフトウェア・エンジニアリング・センター)のエンタプライズ系事業のページを見ると「定量的管理」「開発プロセス」「要件定義」「高信頼システム」の4分野について活動を行なっている。

「開発プロセス」の中ではアジャイル型開発について契約モデルの提示や概要について示しており、その中では以下の記述がある。

◆アジャイル型開発の検討により期待される効果 

  1. 日本のソフトウェア産業の実態に適しており、かつ世の中のパラダイム転換に対応することのできるソフトウェアの作り方の提案になります。
  2. グローバルな視点から見た、わが国のソフトウェア産業の競争力を強化することにつながります。
  3. 優先度の高い機能が順次提供され、提供された機能を検証・投入することにより、変化が激しく、優先度も変化するビジネス環境に対応できるサービスやシステムを手に入れられます。
  4. エンジニアが自分自身の成長を実感でき、開発したシステムが利用者の役に立っていると実感できることにより、エンジニア一人ひとりが生き生きと働くことのできる環境の整備につながります。

出典:非ウォーターフォール型開発(IPA)

これを読むとIPAとしてもアジャイル型開発にかなりの可能性を感じているのではないかと思える。
それどころか、ウォーターフォール型開発には問題があると言ってる気さえもしてくる。
「定量的管理」の中では、見積手法の一つであるCoBRA法 のガイドを作成したり、定量的なプロジェクト管理ツールを提供したりとかなり力を入れている。もちろんアジャイル型開発でも重要なことも言うまでもないが、建設プロジェクトがうまくいっているところをITプロジェクトにも適用させようという活動をしているようにも思える。
これらの研究成果を活かして成功事例を積み重ねていくことで失敗プロジェクトが減り、エンジニアが生き生きと働けるようになると素晴らしいと思う。

【ここからやっと感想】
何にせよ、55億円は消えてしまったけどプロジェクト中止という決断は素晴らしいと思いました。高い勉強代になったのか、それともただの税金の無駄遣いになったのか、これからのプロジェクトに期待したいです。
特許庁もIPAも同じ経済産業省の関連団体なので是非とも研究成果を活かして成功事例を作って欲しいですね。もちろん1人のエンジニアとしても、今回の件を教訓にしたいと思いました。

プロジェクトマネージャについて同期勉強会を行いました

社内の大先輩に講師をお願いして、「プロジェクトマネージャ」についての勉強会を行いました。
質疑応答も盛り上がりとても充実した勉強会でした。内容の要約を以下に記録します。

プロジェクトマネージャとして必要なこと。

プロジェクトの意思決定を行うという姿勢を持つこと。
もちろんPMBOKの知識も重要であり、プロジェクトマネージャ試験の知識も必要ではあるが、それは必要条件であって十分要件ではない。進捗管理や品質管理は判断をするための情報収集の手法に過ぎない。
プロジェクトマネージャは報告を受ける立場であるが、その報告を基に判断をして、上に報告しなければならない。その判断がプロジェクトの成否を決める。
プロジェクトマネージャがただ報告を受けるだけでは失敗する可能性が高い。

プロジェクトマネージャとしてのポイント

プロジェクトには常に問題が発生しており、リスクも必ず内在している。
1.「問題なし」という報告自体が問題である。
常に「問題なし」の報告のプロジェクトは、問題が発生した場合も報告が上がってこなくなる。
2.常に当事者として解決者になるという意識を持つ。
報告者が解決をするような空気を作らない。もしそのような雰囲気になると、自分の担当領域以外についての指摘がなくなってしまう。

プロジェクトマネージャがこれらのポイントに気をつけることで、事象の大小ではなく、影響の大小で報告が来るようになる。
ie.遅れが大きくても、他のチームに影響がない工程の場合はPLから「遅れているが、他工程に影響がなく、挽回可能」という報告となり、報告の信憑性を確認するだけで良い

その他、「若手SEとして仕事を行う中で、どのような視点でプロジェクトを見ればよいか」という質問に対し、
アプリケーションスペシャリストの視点ではシステムの全体像や業務知識の中で自分の担当がどこかを考える。プロジェクトマネージャの視点では全体進捗の中での自分の工程や遅延した場合の影響を見る。プロジェクトマネージャと言っても全ての業務知識に精通しているわけではない。保守案件が多い場合は前者の視点が重要であることが多いが、両方の視点を持つといい。

との回答を頂くなど、質疑応答においても様々なことを学ぶことができた。

今後もこのような勉強会をしていけたらなと思っています。

久しぶりにjavascriptにやられました

こんばんわ。
最近の暑い夏がアジアっぽくてテンションあがっています。

さて、最近Web関連の仕事をしています。
実は学生の頃はPHPを細々と書いており、Web系は好物だったりします。
今日もお客様に見せるためのプロトタイプを作成していました。

いつものようにfirefoxで作成して、いざIEで動かしたら

「ページでエラーが発生しました。」

ということで、今日はIE7にやられた話です・・・。

やられたソース

javascript

window.onload=function(){
  var s = document.getElementById("s");
  var len = s.elements.length;
  var obj;
  for(i = 0; i < len; i++){
    obj = s.elements[i];
    obj.setAttribute("onchange","changeFunction();")
  }
  }
function changeFunction(){
  alert("値変わったよ!");
}

html

<form id="f" name="f" action="hoge" method="post">
<!-- 省略 -->
<div id="s">
 <input type="text" name="t1" id="t1" value="hoge" />
 <input type="text" name="t2" id="t2" value="hoge" />
 <select name="s1" id="s1">
  <option name="o1" id="o1" value="hoge1" label="hoge1" />
  <option name="o2" id="o2" value="hoge2" label="hoge2" />
 </select>
</div>
<!-- 省略 -->
</form>

まぁ、フォームの特定部分の変更を検知して、処理をするというありがちなヤツです。
jQueryで

$('f').FormObserve();

とかやればよかったのですが、プロトタイプとして1ページだけ作ればいいのでライブラリ取ってくるのが面倒・・ということでそのまま書いちゃいました。

やられたその1

div要素のelementsってダメみたいです。以下のように、formのDOMオブジェクトのelementsとすることで取得できました。

window.onload=function(){
  var s = document.getElementById("f");
  var len = s.elements.length;

firefoxでは取得できていたのですが、javascriptの仕様はどうなってるのでしょうか。
どなたか教えて頂けると有難いです。

やられたその2

こっちは完全にIEにやられました。

obj.setAttribute("onchange","changeFunction();")

ここを、こうしないといけないようです。

obj.setAttribute("onchange",new Function("changeFunction();"))

後から気づいたのですが、setAttributeは使わずに以下のように書いたほうが良さそうですね。

obj.onchange = "changeFunction";
//関数は変数に代入しておく
var changeFunction = function(){
  alert("値変わったよ!");
}

久しぶりにjavascriptを書いたのであまり自信はないのですが、参考になれば。
会社から帰って記憶だけで書いているので、syntax errorあるかもしれませんがご容赦を。
間違いの指摘やツッコミは随時お待ちしております。

コーディングに没頭できる時間も悪くないね。