But one thing that I'm completely sold on is Rapid Cycle Testing. (Not to be confused with Short Time Horizon Designing, which I'm *not* sold on.) To the degree that you *do* write automated tests, they should be executed frequently. How frequently? Well...
- How about once per release cycle, right before code freeze?
- How about once a week?
- How about once a day, as part of the "nightly" build?
- How about several times a day, as part of each developer build?
- How about every time you save a source file from your editor?
Ruby
Being somebody who enjoys learning new things, I decided to do some Ruby learning. When I learn a new thing, I like to experiment and take notes. I have files named "learning_lisp.txt" and more recently "learning_clojure.txt". These files have small examples of source code with minimal explanation; they aren't intended to be useful for somebody else, but only to trigger my memory. In particular, they show the results of my experiments.
The other day I saw this post, in which the author describes writing unit tests as he learns Ruby. This made complete sense to me, and I wish I had seen that post a year ago! Now that I'm learning Ruby, my notes file is "learning_ruby.rb" ... ".rb" instead of ".txt". My experiments are entered in there instead of just typed interactively in a REPL. I've only just started, and I'm not sure if I'll stick with it, but I really like the idea of having my notes file be executable; if nothing else, it catches my typos.
Unfortunately, Ruby doesn't have a Midje-like autotest that I know of, so I wrote my own. I'm sure this will need to evolve significantly over time, especially as I work on larger projects, but here's my "start small" approach. Note that this is Unix-centric (I use it on my Mac):
fswatch -i "\.rb$" -e ".*" . | xargs -n1 ./test1.sh
where "test1.sh" contains little more than:
echo "========================================="
ruby $*
date
Note, I don't think fswatch comes with Mac out of the box. I used Homebrew's:
brew install fswatch
I love this setup! I have my "learning_ruby.rb" file in my editor and my Ruby book open. I see a new function, and I enter a couple of experiments in my ".rb" file and save it. The "fswatch" window immediately runs it and shows me the results. Talk about instant gratification!
2 comments:
Interesting note about fswatch, which I didn't know about. Shameless plug: you might also be interested in https://github.com/eigenhombre/continuous-testing-helper (blog post: http://eigenhombre.com/testing/2012/03/31/ontinuous-testing-in-python-clojure-and-blub/). It's quite a bit simpler in design than fswatch (it requires a Python installation as well as PIP or similar to install), but I have used it for years (and use it for situations where Midje won't work).
Good stuff! I'll check it out.
Post a Comment