Helpful Error Message

Oh man, I was so excited when I downloaded the newest version of Google Chrome in Chrome and it started automatically installing. Google is installing the update for me automatically like a real browser! I don't have to do it myself, the browser just knows that I want to update it. I messed around with Chrome a long time ago, but was put off by a lack of maturity.

Then, I got this helpful error message:

Read on →

IWST Summary

Last Friday I attended the full-day Indiana Workshops on Software Testing conference with Jen, Howard, Beth, Jeremy and about ten other people. This session was very helpful in understanding my personal knowledge of testing, learning new skills and about previously unknown technologies, and meeting people in the testing community in Indianapolis. I presented second, and discussed my experiences with Test-Driven Development on a recent Rails project that I worked on.

The first experience report probably had the most relevance to things that I have directly worked with. In the production Rails project that I worked on, we used Selenium for automated integration testing as verification of the development process. Dave Christiansen covered using Selenium to do automated integration testing on a Rails app. However, what was noteworthy to me about the approach that he took was that instead of writing and executing these tests only in the test phase of the development process, they were written and executed throughout the development lifecycle. He wrote a wrapper to generate RSpec tests from the Selenium IDE, refactored to DRY up the code, and then had the team write their own integration tests as they were developing. Since the tests were written in RSpec, they would actually be run whenever code was checked in (continuous integration.) After awhile, they built up enough helpers to stop really using Selenium at all except for replicating bugs.

Read on →

Why Blog?

If you're seeing this post, then my nefarious plan worked.

I had the idea of having a personal blog external to SEP after seeing that the posts and comments could not be seen by others outside of the company. Essentially it was like emailing everyone internally. More importantly, no cross-pollination with the community could happen either. It seemed like the overall value could be improved by taking a little more effort to put the ideas out there. I talked with a few people about their blogging habits and practices, and determined that this could work.

Read on →

Architecting Scalable and Usable Web Applications

Here are my notes from a Microsoft ArcReady seminar I went to in the middle of May. I went because I wanted to know more about building web applications that scale to many users. I definitely learned the basics of this, and found some references to other work as well.

At least one interesting thing that I learned was ProtoXAML, which is a way to take prototypes and make them seem a bit more flawed so that customers are more likely to give you good feedback. It was interesting to see this perspective, and might be helpful with some client interactions we have.

Read on →

Java Anti-Pattern

I was doing some Java programming today, and I noticed an anti-pattern that was in an existing code base. It went something like the following:

public Class Klass {
    ...

    public Klass(int foo, boolean flag, String s1, String s2, String s3, String s4) {
        initialize(foo, flag, s1, s2, s3, s4);
    }

    public Klass(int foo, boolean flag, String s1, String s2, String s3) {
        initialize(foo, flag, s1, s2, s3, null);
    }

    public Klass(int foo, boolean flag, String s1, String s2) {
        initialize(foo, flag, s1, s2, null, null);
    }

    public Klass(int foo, boolean flag, String s1) {
        initialize(foo, flag, s1, null, null, null);
    }

    public Klass(int foo, boolean flag) {
        initialize(foo, flag, null, null, null, null);
    }

    private initialize(int foo, boolean flag, String s1, String s2, String s3, String s4) {
        _foo = foo;
        _flag = flag;
        _s1 = s1;
        _s2 = s2;
        _s3 = s3;
        _s4 = s4;
    }

    ...
}

Immediately, my Don't Repeat Yourself sensor went off. It felt like the previous coder was essentially trying to use some default values for a method. You can do something like this in other languages, even other statically typed ones. In Ruby, it would be pretty simple:

Read on →