デスマーチを止める!システム開発の成功に「設計」と「テスト」は欠かせない
「デスマーチ」という、IT業界で名の知れた用語があります。
商品知識のない営業が、ガッツリ作ると半年はかかるであろうシステムに対して「できます!」を連発→できないことが分かり、納期1月前に開発側に相談する→開発側は必死にやるも、時間がないので品質が落ちる。しかし出さなきゃいけないものは出さなきゃいけない。出す→不具合起きて電話鳴り止まない→繰り返し
というわかりやすい現象をデスマーチと呼びます。
もちろん上の例では営業さんがそもそもの原因じゃないかと思ったりもするんですが、開発者のスキルや知識も大きく影響します。効率化のノウハウをほとんど持ちあわせておらず、マンパワーが最大の効率化のカギみたいな感じになっているところも、どことは言いませんが存在します。
「営業さんのせいね。完。」では楽しくないので、デスマーチとは「開発」の基礎を考えずに闇雲に走ってたのを見かねた神様からの試練だと恐ろしく強引に定義したうえで、開発者にできることはなにかないかってのを考えてみます。
システムができるまでの工程を見直す
システムが出来るまでの定石としては、
- お客様からのヒアリング
- 要求・要件定義
- 仕様決定、設計
- コード書く
- テスト
- リリース
こんな感じだと思います。
ですが、結構下のような感じになっている所もあるのではないかと思います。
- お客様からのヒアリング
- 要求・要件定義
- ボタンを押すとどう動くかなどを簡単な画像と文章で、説明できるものを作る
- コード書く
- 軽く動作確認
- リリース
それなりに似てはいますが、少し違います。この少しの違いが終わりの始まりになります。なんということでしょう。
比べてみたら分かるんですが、3の仕様決定、設計と5のテストの部分が違います。もちろん、営利企業たるもの、生産物を生み出してナンボなのは真理です。
それ故に仕様の確定と設計やテストという、一見利益にならない工程がおろそかになってしまうのは単純に考えると仕方ないのかもしれません。時間がないときはなおさら。しかし、そこをキチンとしておかないと恐ろしいことになるのです。
システム開発を成功させるカギは設計とテストである
システム開発を成功に導くカギは設計とテストの工程をしっかりすること。コードを書く工程の10倍大事です。これをないがしろにすると10倍返しされます。お客さんからのヒアリングが全くできてないってのはそれ以前の問題なので今回は無視します。無視させて下さい。
まず設計についてです。設計とはまぁ基本設計やら詳細設計などがあって、細かく分けると小難しいんですが、要はどういう作りにするかっていうのを頭でイメージしながら図などを使って書き出していく作業です。
もちろん、頭の中で考えが完結してしまうので、後のプログラムを書く工程で少しの漏れなどが出てきてしまうんですが、仕様をしっかり決めた上で設計を行えば、明確に何をどうするかわかります。あーだこーだ話だけで決めて「思ってたんと違う!」って結末は防げます。
「お客さんの名前データはココ、お客さんのポイントカードのポイントデータはココに保存しておこう。そのデータを取り出すときはこういう取り出し方をしよう。」と決めておくことで、何をするか明確になっているため、わかりやすいプログラムが出来上がります。そういうプログラムはバグや不具合が少なく、あったとしても直しやすいものになります。
次にテストについて。テストとは、お客さんが使ってていきなりエラーが出たり、「お客さんの名前が入るところに番号はいってるよ!囚人か!」みたいなことを防ぐために製品の動きを確かめるものです。
これをおろそかにしてしまうと、おかしなデータができる状態のままお客さんが使い始め、数日後に気づいた時には何百ものデータが無残な事になってしまい、修正に追われて食事も喉に通らない(直すのに必死で通せない)という状況になります。電話の問い合わせが止まらず、その対応で一日が終わってしまうということもあるでしょう。
完璧なモノを仕上げるというのはなかなか難しくはあるのですが、致命的な不具合を発見し、潰すためには必要不可欠な工程になります。
忙しくなると、ついつい「設計」と「テスト」の工程をすっ飛ばしたくなるのですが、これをすっ飛ばすことによって待っているのは、さらなるカオス。そしてデスマーチ(白目)。忙しいときこそ、この2つの工程をしっかりしておく必要があります。
というか、この工程を軽く見ている所がデスマーチを引き起こしているのではないかとさえ思います。
起きてしまったものはどうしようもないですが、改善していくにはどうすればいいかなー。と考えると、まだまだ改善の余地はあります。それでは、行進を続けます。
関連記事
-
信じられないほど簡単にオブジェクト指向って何?を解決してくれる本
「俺がやらなきゃ誰かやる」が合言葉の社会に生きている僕です。分からないことを分か …
-
[XCode]Title set but using a system Identifierなる警告が出たときの対処法
最近iPhoneアプリ開発を始めた@hawk_aです。 StoryBoardを使 …
-
[XCode 4.3]Text Fieldの入力が終わったら次のText Fieldにソフトウェアキーボードでカーソルを移動させて最後にボタンを押す方法
XCodeをしこしこやっております。ほーく(@hawk_a)です。 プログラムの …
-
[git]Coda2でgitを設定してWordPressのテーマファイルをバックアップする方法
ブログのテーマを作り直していろいろしています。家ではiMac、外ではMacBoo …
-
[XCode]ARC使用中にエラー「EXC_BAD_ACCESS」「respondsToSelector」が出た場合の対処法
なんでも、このエラーは解放済み(ゾンビ)のインスタンスにアクセスした時に出るエラ …
-
[XCode]親子関係じゃないView間で値の受け渡しをする方法
@hawk_a 親子じゃないときは、Appdelegateに変数書いてそれを参照 …
-
[XCode]UIViewControllerからUISplitViewController 1つのビューからSplitViewに遷移させる方法
先日、アプリを初めてAppleに申請しました。@hawk_aです。 iOS開発の …
-
[XCode]gitでcommitしたファイル(リモートリポジトリ)を巻き戻す方法
結構前からgitを実験的に導入してcommitやpushをしています。とうとう先 …
-
[XCode]UINavigationBarにUIBarButtonItemでボタンを追加する方法
アプリ開発には欠かせないナビゲーションバー。 UINavigationBarにボ …
-
[XCode]スキャナーで読み取れるバーコード(JANコード・Code39)をフォントで表示する方法と注意点
Passbookなどもそうですが、最近はクーポンや会員証などの電子化をよく目にし …