Fork me on GitHub

Thursday, September 18, 2008

Controllability, Observability and Testability

I was an electrical engineering major in college and control systems was one of my most favorite subjects. The fundamental and important principle I understood in it was to control any system you need controllability (to effectively direct it to a particular state) and observability (to find out the application behavior or state at any point of time).

Now working in the field of testing, automation comes into play most of the time. To automate any application testability is a important. So what does this testability mean? what does the test interface for an application represent? Testability is the ability to control and observe the application's behavior to validate it and test interface facilitates this by helping in making calls to the application and in observing the behavior or state of the application at any point of time.

Based on my understanding of control systems, testability of an application is actually the combination of controllability and observability. Test Interface is a facade to the application which helps us to control it and observe its behavior and state.

But does controllability and observability assure us testability? This is something I need to think about. For an application there can be multiple interfaces through which you can control and observe its behavior. But not all interfaces are appropriate for testing for example user interface is a bad candidate for a test interface.

So testable interface has controllability and observability but not every controllable and observable is testable. For an interface to be useful for testing it is necessary to be easy to work with it programatically as well the interface to be stable to a certain extent.

Testability and test interfaces are an important aspect for automating an application. They are also an interesting topic and I hope to explore it more in future.

No comments: