ひとりXPごっこ反省会


 始めもっとストレートなタイトルにしようかと思ってたんですけど、さすがにひくかなってことでやめました。そりゃあさすがにどしょっぱからオナ(マクラ検閲削除)。

 こほん。

 てな訳でいつのまにやら再就職して、新しいプロジェクトつーことでこれまでひーこらとやっておった訳なんですが。唐突に一区切りつきましたんでご報告にあがった次第です。

 本当はこのプロジェ、XPでやる気もさらさら無かったんですけどね。上司さんにも「今回はパス」と言われてましたし。でもフタ空けて見たら期限シビアだわ要件もドキュメントもまとめる暇無いわ、結局は小手先でこなすしか策が無かったんですな。最低限の手段でできるだけのことをするには・・・と模索してたら、いつの間にやらXP的な手法(のいくつか)を試さざるを得なかった・・・てのが実情でございまする。

 まぁそんな状況下ですので人様みたく立派なレポートとするまでには至らないのですが、それでもネタはネタ。せっかくなので書き散らしてみましょうかね、ということで。

 んじゃまずは今回の前提から(守秘義務入りますんで内容が深く書けない点に関しましてはご了承を)。

 とまぁこんな感じです。典型的な超小規模プロジェクトですかな。最後の前提条件だけ特殊ですが。

 で、この時点で「ん?こんなんでXP?」と思われた方は結構スルどいです。ペアプロ不可能ですし、顧客も海の向こうだし。とはいえ、従来型ウォーターフォールでは仕様書を書き終える前に期限過ぎてしまうわい、てな訳でその辺ばっさり省略&XPのプラクティスに代価する形で実装を進めていく形を取りました。まぁXPのカスタマイズと言えば聞こえはいいですが、実際のところはいきあたりばったりという訳。

 具体的な流れとしてはこんな感じ。

(1)途中まで決まってた要求仕様をストーリーカード(兼タスクカード)の形にブレークダウンし(結果約30枚のカードを作成)、ここから「期限内にできそうなもの」の順位付け。

(2)ストーリー単位で頭の中詳細設計&コーディング。PerlUnitが使えれば理想系だったが諸般の事情でNGだったため、作成するサブルーチン単位に実行&目視確認をすることに。

(3)できたものからCVSにコミット。過去に作ったテストが動くように留意。

(4)次のストーリーに移る前にリファクタリング実施。

(5)以降ひたすら繰り返し。疲れたら家に帰って寝る(笑)。

 てな具合でこりこり作り続けて3週間位。

 で、皆さんも気になるであろう結果/結論なんですが。

 ストーリーの7割方を消化し、「そろそろ骨付けはできてきたかな」というあたりで政治的要因が発生しまして。この世界ではありがちな「開発ストップ、再開時期未定」ということになりました。

 あかんやんけ。

 開発止まった理由自体は「それはどうしようもない」と納得できるだけに尚更残念ではあるんですけどね(諸般の事情で書けないのはご了承を)。こればっかりはどうにもならないっす。おそらくコードも日の目を見ないままお蔵入りになるんじゃないかな?

 まぁ一連の「ひとりXPごっこ」で得られた感触ってのが今回最大の収穫なんだと思いませう。という訳でこっからXP的視点で今回の感想とかをつらつらと書き足してみましょうか。

 まずプラクティス的観点から見た場合はこんな感じになります。

★実施した(もしくは実施せざるを得なかった)
シンプル設計(Simple Design)
リファクタリング(Refactoring)
コード共同所有(Collective Code Ownership)
常時統合(Continuous Integration)
最適ペース(Sustainable Pace)

 今回メインとなったのは実質的には常時結合でした。従来みたく単体テスト結合テストシステムテストてな具合に手順を踏む時間も能力もとてもじゃないが捻出できないのが目に見えてましたんで。

なので常時結合を常に最優先にして、「設計→実装→テスト→設計」のループ(以前紹介した「V字モデル」のイメージ)をひたすら繰り返す、というやり方を意図せずして実践する形になりましたね。

 そしてこれをキープするために必要だったのがシンプル設計とリファクタリング。やりたい時にやるどころの騒ぎじゃなくって、これやらないと次の機能が結合できません(笑)。

(こうゆう状況に陥ってしまった原因のひとつに、今回の開発言語がPerl、それもオブジェクト指向ではなく、従来のスクリプト記述だったからというのもあると思います。)

ただ、上でも触れましたが、70%の完成度とは言え「ちゃんと動くモノが出来ました」ということがやっぱり大きいと思います。「ここまではできてますよ」つーのがちゃんと提示できましたからね。ちゃんと動くモノを作ってるんだってのは作成途中での モチベーション維持の意味でもちゃんと作用しましたしね。精神的にラクになれる 部分があったのは確か。

 ちなみにコード作るのも読むのも私一人、という状況ではコード共同所有が実施されるのは当たり前。

 あと週40とまではいきませんでしたが、後付けの形で最適ペースはある程度達成できました。つーか疲れるわこれ。こんなペースで残業休出までやったら間違いなく死ねます。XPのせいで過労死増加なんてこと起こらないように。皆のモノ注意じゃ。

★部分的に実施した(一部しか実施できなかった)
テスト駆動開発(Test-Driven Development)
計画ゲーム(Planning Game)
コーディング規約(Coding Standard)

 さて、こっからは若干微妙なスタンスも交えて書かなきゃいけないんですが。

 まずは完全な自動テストができなかったってことは、今回一連での最大の判断ミスだったと思います。やっぱ無理してでもPerlUnit使うべきだった。目視ができたからある程度のリスク回避はできましたが、それでも相当な時間をこのテストの部分に取られたような気がしてます。

 んでも「テストは作るのはめんどいけど、一旦作ってしまうとありがたい」ってのはテストファーストでなくとも十分に実感できたことではありますな。この辺はまた稿を改めて書いてみたいところ。

 開発ゲームに関しては、やはり顧客サイドの優先付けはもっと欲しかったかなぁ。確かに機能追加/変更もカード継ぎ足せばいいだけなんでその点では従来よかよっぽどラクなんですけど。それでもやっぱ自分一人では判断に迷う場面も多かったです。あと自分の見積もり能力の無さにも改めて愕然としたし(笑)。

 この辺は次回がXPか否かに関わらず戒めが必要な部分なのかもしれませぬ。

★アウトオブ眼中(をい)
短期リリース(Small Releases)
メタファ(Metaphor)
ユーザテスト(Customer Tests)
ペアプログラミング(Pair Programming)
全員同席(Sit Together)

 ま、この辺は「しゃーないべ」の一言で終わりなんですが。だってできねーもんはできねーもん。開き直るな俺(短期リリースに関してはイテレーション区切り前に開発中断となってしまったため実施できず)。

 ただね。実際に開発していく中で「フィードバック欲しいのぉ」と感じる部分は多々ありましたな。ペアプロほど極端では無いにせよ、「これどんな感じだろ?」と聞く機会は欲しかったかなぁ、と。

 この辺は今までに経験の無かった「一人プロジェクト」ならではというのも多分にあると思います。二人以上で実装していたらこの辺の不安ってのはかなり緩和されてたんではないかなー、てのがこれまでの経験と重ね合わせてみての感想。もちろん上司や顧客に聞けばいい、というのもあるんですけどね。実際に組む立場からするとやっぱり「同じ作る立場から」の視点ってのが欲しくなるもんなんですよ。

 いずれにせよ、フィードバックがもらえない=作ってから「これ違うよ」と言われるリスクは存在し続けてる訳で。場合によっては最後の最後でどんでん返し、泣きながら徹夜休出結局ダウン、なんて最悪のシナリオも用意されていたかもしれないと。そうゆう意味ではまだまだ完璧にはほど遠いよなぁ、てのが最終的な結論というところに落ち着くのかもしれません。

 もっとも最初から完璧にできてれば誰も苦労しない訳ですがね。

 でもやっぱ、やってみて始めてわかる、という側面に(直感的に)気が付いたってのは大きいかな、と。今回一連ので掘り下げて書けることとかもでてきたし。この辺のところはネタとして取っておきます(笑)。

 という訳で、ざっと殴り書き、という形にはなりましたが取り急ぎのXP処女喪失レポートでございました。やめろその書き方。「XPでやってみたいけどなぁ」と日々悶々としてるPG/SEさん。こんなやり方もできたよぉ、という一参考にでもなれば幸いでございます。

 しかしあれだな。始めはオナニーで満足できてもやっぱ最後はセッ(オチ検閲削除s)。


新着順INDEX 分類別INDEX
Top