睡眠は大切とよく言われますが、睡眠不足が開発者に与える影響をまじめに調べた面白い論文が、ソフトウェア工学のトップ論文誌 IEEE Transactions on Software Engineering に掲載されていました。ソフトウェア工学研究室助教の Raula 先生から教えてもらいました。
この論文での被験者はイタリアの大学生 45人。Test-First 開発でプログラムを書かせるタスクを行ってもらっています。23人には実験前日に睡眠を控えてもらい、平均で直近20時間程度は寝てない状態になっています。対照群は、前日に平均で6.5時間、通常通り寝た人です。
これらの人たちに、90分でのプログラミングタスクを実行し、所定の機能を実装してもらい、その作業の成果物や作業自体の質を比較します。評価指標は以下の3つです。
- Percentage of acceptance asserts passed (PAAP)、自動受け入れテストにおける全 assert 文のうち、通過できた assert 文の割合。これを開発者が書いたコードの機能の正確さ(functional correctness)として計測します。
- #episodes、作業エピソードの数。テスト駆動開発(単体テスト作成をして、コードを書いてからテストを実行して pass することを確認する)やテストを最後に実行する開発(コードを書いてからテストを作って pass することを確認する)などの一連の作業順序を、時間内に何回こなしたか、作業量を計測します。
- %conformance、指示の遵守率として、開発者が実行した全エピソードのうちテスト駆動開発の割合を評価します。
PAAP の値の分布は以下の通りです。左端が通常通り睡眠した人々、右端が睡眠不足の23人です。中央が23人のうち本当に睡眠不足と思われる15人を PVT で抽出したものとなっています。
睡眠不足のグループのほうが下側に分布が移動していることが分かります。睡眠不足の23人は、睡眠をとった人に比べてテスト通過率がおよそ半分(平均値 28.57% → 14.36%、中央値 38.46% → 15.38%、第3四分位点 38.46% → 15.38%、最大値は 53.85% で変わらず)になっていました(論文 Table 6)。Mann-Whitney の U 検定で p 値が 5% を下回り、有意差があるという結果になっています。
ほかの数値についての図は省略しますが、睡眠不足の人は #episodes もおよそ半分に低下しています(平均値 7.5 → 4.2、中央値 9 → 4、最大値 16 → 13)。Assert が通っていないのは、そもそもこなせた作業量自体が下がっていたせいである可能性もあります。さらに %conformance も低下しています(平均値 45% → 25%、中央値 50% → 0%、第3四分位点 73 → 55、最大値は 100% で変わらず)ので、作業手順も守れなくなっていたようです。これらも Mann-Whitney の U 検定で有意差が出ています。
さらに追加分析として、睡眠不足の人たちは、構文誤りの修正作業が54%増加したとも書かれています。まとめると、睡眠不足だとコードを書くとき構文誤りのような単純なミスも多くなるし、書いてもちゃんと動かないし作業量も減るし手順も守れないと、いいことがまったくない結果となっています。
結論としては、論文のタイトル通り、開発者はきちんと寝ることが大事であるということになります。この結果は、被験者実験を考えている研究者にとって重要な話で、被験者の睡眠状況の差による影響のほうが、下手をすると開発支援技術などの効果を上回る可能性があります。何かの被験者実験をするときは、被験者には前日にしっかり寝ておいてもらうよう伝えておく必要があるようです。