Thanks Driven Life

日々是感謝

感謝駆動開発 TDD (Thanks Driven Development)

TDD とはなにか

感謝を通じてソフトウェアの品質、信頼性、顧客満足度向上を目指すプログラム開発手法です。

TDD の有用性

「感謝なんかで品質がよくなるものか」と思ってる方々は、感謝のパワーを理解してない人たちです。
感謝は社会人だけでなく、幼い子も高齢の方々も生きるプロセスの一部として
当たり前のように使われています。それを開発手法として用いた TDD の有用性について述べたいと思います。

プロジェクト開始

最初に書くのはクラス定義でもテストでもなくて感謝です。

// C
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    printf("Thank you!!\n");
    return EXIT_SUCCESS;
}
# Ruby
puts 'Thank you'

「これから私はコーディングを始めます。開発環境をくださってありがとう」という気持ちを
コードだけでなく、開発環境に伝えることで、今後のプロジェクト進行に良い影響を与えます。

  • 最初の感謝コードがなければ、Eclipse で警告でない設定されてることに気づかなかった。ありがとう!
  • コンパイラオプションで -Wall が付いてないのを見逃すところだった!

変数名規約

使い捨ての変数として有名なのは「i,j,k」というものですが、
TDD では使い捨ての変数でも感謝込めなければなりません。

int t;
int h;
int a;
int n;
int k;
int s;

従来の手法では、i,j,k という3種類だったのに対し、
感謝の気持ちを忘れなければ、なんと 6種類まで使うことが可能なのです。

  • 感謝を忘れないおかげで、6重for文が可能になりました!ありがとう!!

コメント規約

コードがどうしても難解な記述しか行えない箇所(正規表現やメタな部分)には
感謝の意を述べる必要があります。

/**
 * 動いてくれてありがとうございます。
 */

似たような手法として有名な スピリチュアルエンジニアリング では以下のように述べられています。

スピリチュアルエンジニアリングの基本は「祈り」にあります。
「絶対に動く」という祈りの強さがよりよいコードをもたらします。

スピリチュアルエンジニアリングのデファクトスタンダードなコメントとして以下が挙げられます。

// おまじない

このコメントによって、動作の原動力となるのは言うまでもありませんが、
絶えず変化していく情勢で「保守」という観点からすると、これではよくありません。
なぜなら、このおまじないが本当に動いているのか、という疑問が残るからです。
祈りの強さが思った程足りない場合など、動作不安定に陥る可能性が残ります。

ではどうすればよいのか。TDD では、この「祈り」に更に「感謝」を追加します。

// おまじないが効いてありがとうございます!

こうすることで、「このコードが実際に動いていた」という動作実績が得られます。
「絶対に動く」という祈りに「絶対に動いた」という事後報告を付加することで
より保守性・信頼性の高いコードを構築していくことができます。

  • 「おまじない」だと何なのかわからなかったコードも、「ありがとう」というコメントを見て、きちんと動作する関数だってことがわかった!
  • リファクタリング対象をさがす目印として、感謝コメントが役に立った!

ドッグフード

製品を出荷する前に、試験運用として社内の人間に使ってもらって
バグの発見やユーザビリティ確保を狙うことを「ドッグフードを食べさせる」といいます。

同じ会社の人間ですので、どうしても気軽な形で問い合わせがあります。

○○が動かない
ここ見た目悪い
使いづらい
忙しいのに遅いんだよ

この時、「自分たちが作ったものをこんなにけなすなんて」とか
「言われなくてもわかってるよ!」と言う言葉をよく耳にします。

感謝駆動開発ではそれはタブーです。そう、ここでも感謝をすることが大事です。

〇〇が動かない   => バグだな。場所の特定をしてくださってありがとうございます!
ここ見た目が悪い => デザインを教えてくださってありがとうございます!
使いづらい       => あくまで使う側を考えないと!初心忘れてましたありがとうございます!
遅いんだよ!     => チューニングする優先度決めることができましたありがとうございます!

ユーザの悪口も、視点を変えれば改善の近道なのです。
そんな素晴らしい提案を、時間をさいて教えてくださった社員さんに感謝をすることが大事です。
そしてもっともっとバグを引き出しましょう!

リリース後

社内検証も終わり、無事納品することができました。
今後は保守作業になり、旅立ったプログラムと対面するときが再びやってきます。
この時、前述で述べた様々な感謝が、保守員やデバッガーたちの心の支えとなります。

  • 感謝が多い部分を参考にしてどんどん拡張していこう!
  • ここに感謝が多いということは、それだけアクセスする人が多い。つまりここのパフォーマンスを上げれば更に良くなる!

最後に

感謝駆動は開発手法としてでなく、まさに生き方と言えるでしょう。
何か少しでも自分にとってプラスになることがあれば、
もしくはプラスになるかもしれないという予感さえあれば、
感謝を忘れずにすることで、いつの日か高みへとたどり着けます。
そして、気づいたら自分が感謝される立場になった。
そう。感謝とは相互に行うことで何倍も何乗も力を増すのです。

汝、感謝を忘れることなかれ。