最高のパフォーマンスを発揮する ライフハック TDD × ポモドーロテクニック × 瞑想

  • 4
    いいね
  • 0
    コメント

はじめに

ソフトウェアテスト Advent Calendar 2016 の24日目の記事になります。
今回は、テストに関するテクニック的な話ではなくテストを扱うことで生活が豊かになった話をします。
雑兵MeetUpというLT大会で話した内容を掘り下げます。
TDD × ポモドーロテクニック × 瞑想を組み合わせて作業効率がアップしました。
登壇資料は こちら

こんな人におすすめ

  • 集中力が持続しない
  • 気がつくと違うことをやってしまっている
  • 作業のやる気が出ない
  • 時間配分が苦手
  • 効率よく作業したい

TDD

ソフトウェアテスト Advent Calendar 2016 7日目の記事で詳しく解説されているとおりTDDはCheckingに分類されます。
成果物を作るため、自分のためにテストコードを書いてインクリメンタルに成果物を作り上げていく手法です。
最初からキレイな設計・実装ができる人はTDD不要です。ただし、同僚のためにテストコードは書きましょう。

今回は作業効率アップがテーマなので、TDDを行うことでもたらされる作業効率アップ効果について述べます。
リファクタリングや動作するきれいなコードについては端折ります。

デバッグ時間が減る

デバッグとは動作確認と言い換えれると思います。
テストコードを書かない場合、どのように成果物の動作確認をするでしょうか?
Webだったらブラウザで動作確認、アプリなら実行して動作確認をすると思います。
それは、かなり労力を要します。

テストコードを書くことで、テストで動作確認が行えます。
テストコードを書いていれば自動化できるため、ソースコードを書き換えてデグレしても早く気づくことができます。
動作確認の範囲も調整できるため、調査時間が減り全体の動作確認時間が減ることになります。
TDD(テスト駆動開発)の適用評価を紹介した研究論文 - エリクソンはじめ3社

心理的ハードルを下げる

TDDはちょっとづつ組み立てていくインクリメンタルな設計です。
取り組もうとしているタスクが大きかったり、難易度が高かったりすると、なかなか最初の一歩が踏み出しにくいです。
取り組むタスクをこなすという「大きい目標」から「小さい目標」に分解してTODOリストを作成します。

小さい目標に分解できれば、ゴールが見えてくるはずです。
大きい目標にたどり着くために小さい目標を確実に仕留めていきましょう。

例えば、FizzBuzzの仕様をTODOリストに落とし込むとこのようになります。

仕様

入力として1から100までの整数を受け取れること。それ以外は、例外を返すこと。
受け取った数値をそのまま返すこと。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と返し、3と5両方の倍数の場合には「FizzBuzz」を返すこと。

TODOリスト
・入力として1から100までの整数を受け取りそれ以外は、例外を返すこと
・受け取った数値をそのまま返すこと
・3の倍数のときは数の代わりにFizzを返すこと
・5の倍数のときは数の代わりにBuzzを返すこと
・3と5両方の倍数の場合には数の代わりにFizzBuzzを返すこと

このように仕様をブレークダウンして考えることは、早く仕様と向き合うことになります。
言語化することによって異常系の処理はどうするのか?実は仕様に矛盾があったなど気づくきっかけになります。
開発終盤にきて仕様の見落としに気づくより、早いタイミングで気づくことができます。

同僚への共有時間が減る

レガシーコード改善ガイド という書籍に紹介されてるプラクティスで仕様化テストというものがあります。
仕様化テストは、クラスやモジュールの使い方をテストで取扱説明書のように表現します。
そうすることで、テスト対象のクラスやモジュールを同僚に配布する際に使い方の説明を短縮することができます。
テストコード見れば、何ができて何ができないのか利用するためには何が必要なのかといった情報が伝わります。

戦略編:仕様化テスト

ポモドーロテクニック

すいません、ここから直接的にテストに関係ない話です。
しかし、TDDと相性が良いプラクティスだと思うので紹介します。
私なりにアレンジしているところもあるので、ぜひ書籍などをご覧ください。

ポモドーロテクニックは、一言で言うと時間管理術です。
用意するのはタイマーと紙とペンだけです。

ポモドーロテクニックの流れ
1. その日に達成するコミットメントを掲げる
2. 1 ~ 4ポモドーロでクリアできるタスクに分解しTODOリスト化する(1ポモドーロ 25分)
3. タスクにそれぞれポモドーロいくつでクリアできそうかポイントをつける(例: 月次締め運用作業 [ ][ ] 1ポモドーロを[ ]表す)
4. 着手するタスクを選びタイマーを25分でセット
5. 集中して目の前のタスクをこなす
6. タイマー終了、ポモドーロ完成マークをつける(例: 月次締め運用作業 2ポモドーロ [x][ ] 1ポモドーロの完成をxマークで表す)
7. 5分間休憩
8. ふりかえりを行う
9. 4 ~ 8を繰り返す

適度に2時間で30分などの長い休憩を取り入れてください。

気がつくと違うことをやってしまっているのを防止する

25分の作業中は、絶対に他のタスクをやってはいけません。
1ポモドーロを完成させることに集中します。
TwitterなどのSNSは絶対禁止です。
もし作業中にやらなければいけないことを思い出した場合は、TODOリストに追加してください。
今すぐ緊急にやらなくてはいけないタスクでなければ、このポモドーロを完成させることを優先させましょう。

思いついたタスクをあれこれやってしまうと、その日に掲げたコミットメントを達成できなくなります。

集中力を高める

一流のスポーツ選手って独特のルーティンワークをもっている人が多くないでしょうか?
例えば、毎回、同じ動作で素振りをするといった根拠がありそうなものからグラウンドの白線をまたぐときは左足からなど根拠が無いと思われるものもあります。
実は、あれらのルーティンワークには集中力を高めるという側面があります。
脳を本番モードに切り替えるために、本番の前にルーティンワークをこなすことで、これから本番を迎えるんだということを脳に知らせます。
ポモドーロテクニックでは、タイマーがそれにあたります。
ポモドーロテクニックを繰り返すことで、タイマーをセットするルーティンワークで、脳を本番モードに切り替えていきます。
ただ、タイマーだけだと弱いので私はチョコを食べるなどルーティンワークを増やしています。

集中力を高める動作の儀式、パフォーマンスルーティンの効果

短いスパンでPDCAを回せる

5分休憩の後にふりかえりを行います。
25分作業して想像通り進めることができたか?想像よりて手こずり予定よりポモドーロを消費しそうか。
私はPDCAのCが苦手で、実はうまくいってないのに同じやり方を長い時間繰り返してしまったりしていました。

ふりかえりの機会を設けないとプロセス改善のタイミングを逃してしまい良くない進め方で時間を浪費することになります。
ふりかえりで、このまま同じやり方で進めるべきか?タスクの優先度を変えるべきか?さらにタスク分割すべきかなどを考えます。

瞑想

先程のポモドーロテクニックの5分間休憩中に瞑想をおこないます。
瞑想を取り入れる前は、5分間にTwitterを眺めるなどしていました。
しかし、長時間ポモドーロテクニックしていると疲れて集中力が落ちてしまいました。

脳はボーっとしているだけでもかなりのエネルギーを消費します。
何もしていなくても疲れるようになっているのです。

長時間集中力を持続させるためには、良質な休憩が必要。
瞑想を行うことで、良質な休息を取り入れます。

科学的根拠があるか分かりませんが、寝る前に瞑想を行うようになってから寝付きが良くなりました。
睡眠時間を短くしても日中疲れづらくなった気がします。

~1日10分で自分を浄化する方法~マインドフルネス瞑想入門
マインドフルネスとは?Googleも実践するマインドフルネスのコツ

良質な休息を取る

5分の休憩中にリラックスをし目をつむり何も考えないことに集中します。
お腹に手を当て呼吸を整えます。
やることはこれだけです。
半分寝ているような気分になります。

問題があるとすれば、職場でやっていると居眠りしているように思われます。
私は気にせず瞑想していて周囲にも瞑想してるんだ!と公言してます。
瞑想がやりにくい職場もあると思うので、ひと気が少ないところでトライしてみてください。

まとめ

以上が、私のトライしているパフォーマンス向上術でした。