Giter Site home page Giter Site logo

fizzbuzz's Introduction

FizzBuzz問題をRSpecで書いてみる!

学習用にこちらの「50分でわかるテスト駆動開発」を元に、RSpecとRubyに書き直して作成したものです。
わかりやすい動画を作成していただいた@t_wadaさんに感謝します。
https://channel9.msdn.com/Events/de-code/2017/DO03?ocid=player

RSpecでのテスト駆動開発のテストを目的としたもののため、Rubyのコードは冗長な部分があります。

問題

次のFizzBuzz問題をテスト駆動開発で実装をおこないました。

1から100の値を出力する。
ただし、値が3の倍数なら"Fizz"、5の倍数なら"Buzz"、3と5の公倍数なら"FizzBuzz"を出力する。

テスト駆動の流れ

テスト駆動の流れは以下のようにおこないました。

  1. テスト内容のTODOリストを作成
  2. テストを作成し、"RED"(失敗)になることを確認。
  3. テストを"GREEN"(成功)になるように実装をおこなう。
  4. 今後のためにリファクタリングをおこなう。 一見無駄な作業に思えても、長い目でみると修正作業などで時間短縮になる。
  5. 次のタスクを 2. へ戻り以降繰り返す。

実装サイクル RED -> GREEN -> Refactoring -> RED ...

実装の流れ

実装は以下の流れでおこないました。

  • 仮実装(Fake It):仮の実装をおこないテストが通るようにする。
  • 三角測量(Triangulation):簡単な実装を2つ以上おこない、テストが通るか確認する。リファクタリング時に不要ならば削除する。
  • 明白な実装(Obvious Implementation):実際の実装をおこなう。

テスト作成のTODO

  • 数を文字列にして返す

    • 1を渡したら文字列”1”を返す
  • 3の倍数の時は'Fizz'を返す

    • 3の時は'Fizz'を返す
  • 5の倍数の時は'Buzz'を返す

    • 5の時は'Buzz'を返す
  • 3と5の倍数の時は'FizzBuzz'を返す

    • 15の時は'FizzBuzz'を返す
  • 1から100までの数を使用する

    • 1から100までを返す
  • 標準出力をする

    • 1を標準出力する
    • 1から100までを標準出力する

実装のポイント

FizzBuzzの出力までは参考した動画でおこなっていたので、書き直しのみでほとんどすみました。

1から100までの数を使用しているかの確認は実行する配列を取得しておこないました。

標準出力の確認で少し悩みましたが、標準出力のメソッドをオーバーライドしてカウント変数を追加。実行時にカウント回数を返すようにし確認をおこないました。
この実装でよかったのか今でも悩んでいます。

まとめ

テスト駆動開発をおこなって、テストや保守が楽になりそうという面もありましたが、コードをいきあたりばったりで書かずにしっかり仕様を考えるようになるなと感じました。

RSpecを見直すことで、どのようなふるまいをコードに求めているかもわかりやすいため、後々自分やチームが困らないようにするためしっかり書いていきたいと思います。

fizzbuzz's People

Contributors

ki-0302 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.