虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

【美少女に話しかけて品質向上】ラバーダック・デバッグをやってみた

こんにちは、虎の穴ラボnsdと申します。

皆さんはソースコードを書いた際の品質向上ってどのようにしているでしょうか?
レビュー、テスト、デバッグ、なぜなに分析、さらにはそれらを内部、外部、対面、机上で実施などなど...
様々な方法があると思いますが 、今回は『ラバーダック・デバッグ』という方法を試してみました。


ラバーダック・デバッグとは?

そもそもラバーダッグ・デバッグとはデバッグ方法の1つで、

プログラマーがラバーダッグ(アヒルちゃんの人形)に対してソースコードを1行ずつ説明するデバッグ方法

のことです。  
 
私はこれをビタワンさん(@vitaone_)がTwitterで連載されている社畜ちゃんで知りました。


ラバーダック・デバッグの利用

■ラバーダック・デバッグのポイント
・アヒルちゃんはプログラムがわからないので1行1行丁寧に説明する。

デバッグと名付けられていますが、『ソースコードを相手に説明する』という意味では
これは対面のソースコードレビューに近いものだと思います。

私のチームではソースコードレビューは机上レビュー(レビュアー各自で確認してもらう方法)なので
ソースの書き方など固定の観点や表層的なロジックは確認ができますが、ロジックを深く確認するということが
なかなかできていませんでした。
(もちろん、レビューで取り除けなかったバグは後のテストで発見していくわけですが)
かと言って、対面レビューを行おうとするとレビュイー、レビュアーそれぞれの時間を多く割いてしまい、
迅速な開発ができません。

そこで、
開発者1人だけで完結するラバーダック・デバッグを試してみることにしました。

とはいえ、ただ試してみるだけじゃつまらない...そもそもアヒルちゃんが家にいない...
でも美少女フィギュアならある!と思って部屋を見回したときに眼があった
『ミライアカリちゃん』に聞いてもらうことにしました。 f:id:toranoana-lab:20201009185026j:plain フィギュアはFuryu様のキャラ広場プライズ(https://charahiroba.com/prize/) より展開されていた
『ミライアカリ ぬーどるストッパーフィギュア』を使用させていただきました。


ラバーダック・デバッグをやってみた

■今回のソース開発内容
・改修対象:とらのあなECサイト
・改修内容:通販ポイント周りの改修
・開発規模:約2人日
 

■ラバーダッグ・デバッグの結果
・デバッグ時間:約15分
・バグ発見  :1件
・バグ内容  :List内のbeanから最大値を持つものを取得する処理で最大値の判定が抜けていた

私はアカリちゃんに話しかけます、
「アカリちゃん、今回の開発ではECサイトで貰えるポイントの値が...」
「こっちの値とさっきの値を比較して...」「ここはループしながらこの条件で値を取ってきて...」
アカリちゃんはニコニコしながら「うん、うん♪」と聞いてくれます、いい子です。

10分ほど説明したところで違和感がありました。
「ここはListから最大値を...取ってきてない!?」
アカリちゃんのおかげでバグが発見されたのです!!!

■発見されたバグ

// 実装したかったコード  
// 1.Listの中に格納されているbeanから特定の番号を持つものだけを抽出  
// 2.抽出したbeanの中から値が最大のものを取得  
list.stream().filter( bean -> bean.getNo() == X )
              .max( Comparator.comparing( Object::getValue ) ).orElse( null );  
// バグコード  
// Listの中に格納されているbeanから特定の番号を持つ最初の1個を取得  
list.stream().filter( bean -> bean.getNo() == X )
              .findFirst().orElse( null );  


ラバーダック・デバッグを試してみて

■メリット
・開発者一人で実施できる
・1行ずつ丁寧に行うことが前提なのでバグを発見しやすい
・ソース開発の振り返りとなるのでその後のテスト項目作成に役立つ
・美少女とのお仕事は楽しくてやる気が出る!
 

■デメリット
・自分自身とのレビューとなるので「大丈夫だろう」と思ってやるとバグを発見できない
・開発規模に比例して時間がかかる

今回の開発順はソース開発 → 机上レビュー → ラバーダッグ・デバッグ → 単体テスト → ・・・
だったのでテストに入る前にバグを発見できたのは大きいと思います。
また、机上レビューでは発見されなかったことからも、そこで漏れがちな
ロジックに関する確認(要件に対して実装ができているか)に役立つのではないでしょうか。

今回の結果から社内でもラバーダッグ・デバッグを推奨していき
美少女たちとの品質向上をしていきたいと思います!


P.S.

【オンライン開催】とらのあなエンジニア&マーケター採用説明会【地方勤務可能!!】

10/16(金)に、採用説明会をオンラインにて開催します。 虎の穴ラボへの転職を考えている方や地元に住みながらWEBエンジニアの仕事に就きたい方、ちょっと話を聞いてみたい方など、ご参加をお待ちしております! yumenosora.connpass.com

カジュアル面談

弊社エンジニアと1on1で話せます、カジュアル面談も現在受付中です!こちらも是非ご検討ください。 yumenosora.connpass.com

その他採用情

虎の穴ラボでの開発に少しでも興味を持っていただけた方は、採用説明会やカジュアル面談という場でもっと深くお話しすることもできます。ぜひお気軽に申し込みいただければ幸いです。
カジュアル面談では虎の穴ラボのエンジニアが、開発プロセスの内容であったり、「今期何見ました?」といったオタクトークから業務の話まで何でもお応えします。

カジュアル面談や採用情報はこちらをご確認ください。
yumenosora.co.jp