表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
異世界でもプログラマは不足していた  作者: ベル
第一章 図書管理システム
17/31

Step15. テストコード

 今日はジン先輩とフリートさんと3人で、モブプログラミング(チームプログラミング)をやっていく。

 騒がしいのが迷惑になるかも知れないのと、気分を変えるために会議室を借りた。


 ムウさんは、学習(ゴブE)中だ。10分迷ったら、割り込んでいいから質問に来るよう伝えてある。


「ジン先輩、フリートさん、お尋ねしたいのですが、作ったプログラムのテスト(動くかどうかチェック)って、どうしてます?」


「そりゃ自分で動かしてみて、確認しとるぞ」

「私も動かして、見ています」


異常系(想定外のパラメータ)はどうしてます?」


「……見たり、見なかったりじゃの。重要そうな部分だけ見とる」


「なっ……!? それだから、貴方の所は、変なバグ(不具合)出すのではないですか!私は、しっかりと境界外の(パラメータ)まで確認しています」


「確認しとるのはええかも知れんが、時間が掛かってしゃーないぞ。お前さんは作るのが遅いじゃろう!」


「はいはい、喧嘩しないでくださいね」

 パンパンッと手を2回叩いて、2人を静かにさせる。


運用(ルール)が決まってないのであれば、どちらが悪いとかはありませんよ。では、しっかりしてなくても、してても。その確認した内容のエビデンス(証拠)はありますか?」


「……ないぞ」

「私はあります。バグ(不具合)なく正常に動作しているのが、何よりの証拠です!」


 残念だけど、客観的に判断できるものでなければ、証拠にはならないよ……言わないけど。


「では、もう1つお尋ねさせてください。今あるコード(ソースコード)リファクタリング(ソースコードの改善)を行った時に、影響がないと思われていた部分で、バグ(不具合)が発生した経験はありませんか?」


「あるぞ」

「あります」


「その時、他にも類似の問題がないか不安になって調べたり、再テスト(動くかどうかチェック)をするのは、時間が掛かりませんか?特にしっかり確認されている、フリートさんは負担が大きくありませんか?」


「……大変だぞ。だから、問題が発生した箇所しかみておらん」

「……きちんと全体を見直しています。と言いたいところですが、影響範囲が広い場合は、リファクタリング(ソースコードの改善)を諦めて、元に戻してしまうことがあります」


「ありがとうございます。お2人の対応はそれぞれ、メリット・デメリットがあって、どちらが良いとも、悪いとも、言えないですよね。今回は、それらの問題を解決する方法を提案したいと思います」


「そんな事が、出来るのか? ……サワタリじゃからのう。もう驚かんわい」

「まさか、可能なのですか? ……サワタリさんだから、驚くのはよしましょう」


 うっ、何やら奇人変人扱いされた気がする。


「何をするかと言えば、簡単です。テストを行うプログラムを作りましょう!」


「ほぅ、それは面白い発想じゃな」

「全くです。実に興味深い方法です」


 食いついてくれて良かった。


「はじめますね。まずはテスト用のモジュール(実行可能な部品)を準備しましたので、こちらを使って行きます」


 ソースコードを魔導投影機(プロジェクター)に映し出す。


using System;

using Tests;

namespace MagicSoft

{

  public class Sample

  {

    // 足し算を行うメソッド(振る舞い)

    public int Add(int a, int b)

    {

      return a+b;

    }

  }

  public class SampleTest : Sample // クラスの継承(機能の引継ぎ)

  {

    // 足し算のテスト

    public void AddTest()

    {

      // 1 + 2 = 3になるかチェック

      Test.Assert( Add, 1, 2, 3, "=" );

    }

  }

}


「こんな感じで書きます。テストをするクラスを継承(機能の引継ぎ)して、AddTestというテスト用のコードを書きます。今回は1+2が3になるかチェックしています。正解なので問題はありません。試しに実行してみますね」


[----------] 1 tests from SampleTest

[ RUN ] AddTest Assert( Add, 1, 2, 3, "=" )

[ OK ] AddTest

[ PASSED ] 1 tests.


「こんな感じでOKと表示されます」


「「おぉぉぉ……」」


「では、フリートさん、試しにAdd(足し算)の中身を間違えて貰ってもいいですか?」


「分かりました。やってみます」


 カタカタ……タン


// 足し算を行うメソッド(振る舞い)

public int Add(int a, int b)

{

  return a-b;

}


「できました! 足し算を行うべきところを、引き算に変更してみました」


「はい、ありがとうございます。それでは実行してみてください」


[----------] 1 tests from SampleTest

[ RUN ] AddTest Assert( Add, 1, 2, 3, "=" )

[ FAILED ] AddTest compare -1 = 3 error.

[ PASSED ] 0 tests.


「あっ、失敗になりました」


「そうです。テストが通らなかったので、失敗を教えてくれたんです」


「「おお~」」


「仕組みはシンプルじゃが、良く出来てるのぅ」

「全くです」


 ――ハッ!

「サワタリさん、もしやこれは!」


「はい、フリートさん何でしょう。言ってみて下さい」


「ソースコードが残れば、どんなテストを行ったかのエビデンス(証拠)になります。私は動いていることが、エビデンス(証拠)と言っていたのが、お恥ずかしい限りです」


 頭に手を当てて、少し恥ずかしそうに伝えてくれた。

 気付いて貰えてよかった。


「そうですね。これがあれば、客観的なものになると思います。他に気付きはありませんか?」


 ジン先輩に視線を移して聞いてみる。


「これがあれば、テストが、一瞬で、何度でも、簡単に、出来るぞ!! おい、フリート、今まで諦めていたリファクタリング(ソースコードの改善)が出来るようになるぞ、影響範囲を全て見直せるんじゃからの!ガッハッハ」


「……確かにこれがあれば、一度テストを作ってさえしまえば、時間を使うことなく、安全性が確認できますね……!」


「お2人とも、その通りです! 有用性を理解していただいたところで、開発にテストコードを導入していきませんか?」


「「はい、よろこんで!!」」

 ……デジャヴ?こんな光景が前にもあったような。


「あっ、でも、ジン先輩は異常系(想定外のパラメータ)のテストをちゃんと書いてくださいね」


「全く、その通りですよ」


「わ、わかっとるわい。これなら俺でも書けそうだから、やってみるぞ」


「と言ったものの、最初はあまり気張らないでください。テストコードがあるということが何より重要です。中身が充実していなくても、ストレスなく、作っていけることが大切です」


「「は~い」」


 プレゼン(営業活動)が、上手くいって良かった。

 これでテストコードがある生活に戻れる……やったぜ!


 ん?テスト駆動開発(T D D)? そこまではやらないよ。

 今の段階ではやりすぎだし、デメリットもそれなりにあると感じているからね。


 この後、3人で仲良くプログラミングを楽しんだ。


 途中ムウさんが来て、インターフェース(中身が無いひな形)の存在価値について質問を受けた。

 進捗が異常なくらい早いと思って聞いてみたら、家で読んでいたらしい。

 もの凄いやる気だ。これが若さか……(年齢は知らんけど)


 話を戻すと、インターフェース(中身が無いひな形)は中身がないので、この機能は不要ではないのかという話だ。

 確かに一理あるが、多態性(ポリモーフィズム)を支える重要な機能だ。


 折角なので、4人で対話をした。

 どうしてそう思っているのかを、掘り下げていくことで、ムウさんだけでなく、みんなの価値観が分かった。

 持論の展開が白熱したり、自分の考えの説明を創意工夫したりするのが楽しく、充実した時間を過ごした。


 時間はあっという間に過ぎてしまった。

 こんな日が続けばいいなと思えた一日だった。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ