カテゴリー: TestDrivenDevelopment

  • テスト駆動開発 5日目

    テスト駆動開発 5日目

    前回はPythonでテスト駆動開発をやってみよう、という意気込みで始めて見たのですが、そもそもPythonのことも良く分かっていない状態でいきなりテスト駆動開発に着手したということで、なんともお粗末な結果で終わってしまいました。

    なーんにも分かっていない状態というのは、逆に強かったりしますよね。
    自分が無知であることを知っている、とかの哲学者がおっしゃられていました。
    確かにそうなんですけども。それは自分の器がこれから大きくなっていくぞ、と言う決意の表れとも考えられるかもしれません。

    脱線しました。

    前回まではVisual Studio Codeで、イケてるPythonで、みたいな超絶カタチから入る男の典型として臨みましたが、全くダメだったので、気分を一新、Eclipse + Javaで再トライすることにしました。jUnitのことが書いてあったので。それを使って写経できるサイトが見つかったので。リンクはこちらです。ありがとうございます。

    Pixabay at Pexels

    FizzBuzz 問題をおさらいする

    何よりも私が忘れているからなんだけど、FizzBuzz問題とはどういうものか?それを改めて記載したいと思います。

    • 数を1ずつ増やしていくゲーム
    • 3の倍数が出たらFizz!と叫ぶ
    • 5の倍数が出たらBuzz!と叫ぶ
    • 15の倍数が出たらFizzBuzz!と叫ぶ

    シンプルなゲームですね。

    テストを始める

    最初のステップ

    今回は2つのファイルを作るんですね。早速上記のサイトから写経させていただきました。

    本体のほう
    テストのほう

    そして、jUnitでのテスト結果はこちら。はいはい、赤くなった。よしよし。

    テスト結果

    ちょっと面白くなってきました。

    次のステップ

    次は、強引に緑のバーを出すんですね。はいはい。

    本体のほう、1を返すようにした。ハードコードしてるから気持ち悪い
    実施結果。そりゃそうだ。

    師匠(と勝手に呼ばせていただく)のサイトでは、次に、2を返すテストケースに着手していますね。早速私の方でも追加していこう。

    2のアサーションを追加した
    2がエラーに。

    はいきた、そりゃそうだ。

    今日はここまで。

  • テスト駆動開発 4日目

    テスト駆動開発 4日目

    前回のところで、次のステップを書いたところ、予定通りにAttribute errorが出されました。

    Attribute Error で怒られた

    ちょっと待て

    違う、私がやりたかったのはケント・ベックさんのテスト駆動開発を写経したかったのではなく、Pythonでテスト駆動開発を体験したかったんでした。
    なぜケント・ベックさんのテスト駆動開発を参照したのかというと、テスト駆動開発へのとっかかりを思い出したかったからです。

    気を取り直す

    さて、それでは何の題材に選べば良いのか?とかるーくググったところ、fizzbuzz問題というのがありました。
    というか、とても良い写経の題材がありました。リンクはこちら。

    fizzbuzz問題ってなに?みたいなのはこのリンク先をご参照いただくとして、私の、このブログではテスト駆動開発を進めていきたいとおもいます。

    何は無くともToDoリスト

    最初は、ToDoリストを作るところから。ここから写経になります。

    1. 数を文字列にして返す
      1. 1の時は、1と表示する
      2. 2の時は、2と表示する
    2. 3の倍数はFizzと返す
    3. 5の倍数はBuzzと返す
    4. 3と5の倍数はFizzBuzzと返す

    そしてコード。ここも分からないことだらけですが、いったん写経してみます。ホント、Qiitaで書いてくださった方、感謝です

    import pytest
    
    class TestStringConvert:
        # 前準備
        @pytest.fixture
        def target(self):
            from fizz_buzz import string_convert
            return string_convert
        
        # 検証
        def test_return_value(self, target):
            assert target(1) == '1'

    ドキドキで実行してみると、出たよー見つからないやつー環境変数に追加しないといけないやつー。もう見慣れました。

    pytestはどこだよ!って怒られている

    もう疲れた、、今日はここをキャンプ地とさせていただきます。

  • テスト駆動開発 3日目

    テスト駆動開発 3日目

    2日目では、自分のPython バージョンまで分かりました。ようやく環境の羅列を終えられる。。

    • Mac OS 12.6
    • Visual Studio Code 1.72.2
    • Python 3.9.12

    いったん、ケント・ベックさんのテスト駆動開発を振り返る

    写経したのが2年くらい前なので、すっかり忘れておりまして。
    そこからかよー、の自虐スタンスなので、焦らない。

    Pythonで最初にRedを出すためのコードを、ケント・ベックさんのテスト駆動開発から引用させていただこうと思いましたが、こんな世界の片隅にひっそり佇むサイトでも著作権に触れてしまうかもしれないのでやめることにしました。

    うーん、どうしよう。そっちを参考にして自分のオリジナルコードを作れば良いか。

    TODOだけでも参考にさせていただこう。

    – テストメソッドを呼び出す
    – setUpを最初に呼び出す
    – tearDownを後で呼び出す
    – テストメソッドが失敗したとしてもtearDownを呼び出す
    – 複数のテストを走らせる
    – 収集したテスト結果を出力する

    ケント・ベック テスト駆動開発より

    はじめの一歩

    はじめは、テストメソッドを呼び出すところから始めるんですね。
    テストメソッドを呼び出せたらグリーン(Pass)。呼び出せなかったらレッド(False)。

    ざっくりな説明としては、テストメソッドが走ったかどうか、テスト対象のクラス(TaishoKurasu)、フラグにはwasRun、最後にアサーション assert(test.wasRun)で検証を行うという流れ、とのこと。

    はい、最初の失敗。本で読んだ通りです。

    例外が発生しました

    まず必要なのは、TaishoKurasu というクラスを定義するところから始める必要があるんですね。

    ぱぱっとTaishoKurasuを定義してみます。

    class TaishoKurasu:
         Pass

    はい失敗ー、知ってた知ってた。

    例外が発生しました TaishoKurasu() takes no arguments

    ケント・ベックさんのテスト駆動開発では、

    コンストラクタの引数が合わないと怒られる。(本文そのまま

    ケント・ベック テスト駆動開発

    今日はこのくらいにしておこう。だいぶ面白くなってきたところですが。

  • テスト駆動開発 2日目

    テスト駆動開発 2日目

    前回は以下のコマンドがターミナルでnot foundになってしまった、というところで終わりました。

    python --version

    そこからかよ…

    自分の中では納得がいってないですが、これが実力なのでしょうがない。

    まず怪しいのは環境変数か、ということで、環境変数の調べ方を探しにいきました。

    お世話になったのはこのサイト。ありがとうございます。先人の知恵は無駄にすべきではないですね。

    echo $PATH

    で、出てきたのはこちら、なんつーか他にもっと入ってた気がするんすよねー、なんでひとつしかなくなっちゃったんだろう、、

    不可解すぎる、環境変数がひとつしか残ってない問題

    ということで、まずPythonの場所を調べ、そこを追加していこうと思ったのですが、、

    $ which Python
    bash : which: command not found

    which すらもコマンドが見つからない状態、終わってる、、

    なんか、果てしなく疲れました。。まだスタートラインにも立ってないんだぞ、準備運動のやり方がわかりません、みたいなノリじゃないか君。。

    気を取り直して

    再出発な気分で、先日テキトーに更新してしまった.bash_profileのファイルを再確認。
    テキトーなサイトで、テキトーに更新してしまったのを思い出しましたので。

    以下、写経を経て追加しまくった環境変数たち。.zhsrcに残っていたので、そっちのを.bash_profileに更新しました。

    JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
    PATH=/Users/myname/opt/anaconda3/bin
    :/Users/myname/opt/anaconda3/condabin
    :/Library/Frameworks/Python.framework/Versions/3.10/bin
    :/usr/local/bin
    :/usr/bin
    :/bin
    :/usr/sbin
    :/sbin
    :/Library/Apple/usr/bin
    :/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin
    

    すると、開いた!これは嬉しい、、ようやくスタートラインに立った気分です。

    $ which python
    /Users/myname/opt/anaconda3/bin/python

    やっとここかよ…

  • テスト駆動開発 1日目

    テスト駆動開発 1日目

    たまには仕事のことを。
    新たに、テスト駆動開発の分かるエンジニアになりたいな、と思っていて、これは夢でも理想でもなく、割と現実の延長線上にこの生き方があると信じてやみません。

    以下、今の私。これから始めるにはとても良い機会すぎる。10月24日という中途半端さ。
    強いて言えば今日が月曜日ということくらい。はい、手帳は月曜スタート派です。

    現状の、私のステータス

    • テスト駆動開発について、概要は知っている
      • ケント・ベックさんの本は読んで、写経もしました(JavaとPython両方
      • Red、Green、Refactoringを繰り返す作業
      • 初めに失敗するコードを書き、次に成功するコード、そしてリファクタリングを繰り返すということ
    • テストについて
      • JSTQB ALのTMを持ってる程度の。
      • テストアーキテクチャ設計の辺りを考えるのが大好き
      • テスト設計、テスト実行も好きなエリア
    • プログラミング言語
      • 上述したケント・ベックさんのを写経したのと、Pythonに関しては「Minecraftで楽しく学べるPython プログラミング」も写経しました

    とっかかり

    まず何をすれば良いのか分かりません。環境構築からか。

    • Mac OS 12.6
    • Visual Studio Code 1.72.2
    • Pytho

    と、ここまで書いて、なぜかpython のバージョンが分からなくなってしまいました。急になぜ。
    何もしてないのに壊れた(嘘

    python –vesrion のcommand not found

    辛い。1日目にもなってない。

    上記の解決方法が分かったら追記しようと思います。今日はここで店じまい(かなり早い