I own [this shirt, because it’s funny][1]… but it bothers me a little bit at the same time because I also own a shirt that says “Prefectionist.” ¹
Software quality to me means to have values and justification for doing things a certain way, and not just because it’s easier… but because it’s the right way.
Software quality to me means to stay open minded about your values, new values can be learned when appropriately justified.
Software quality to me means you don’t need a 100 page document to explain how your code works. You can look at the code, start at main() and figure it out. It’s reverse engineerable by mere mortals.
Software quality to me means you took the time to prepare for the worst real-time situations that could popup in the future, whether you think they are really likely to happen or not.
Software quality to me means you’ve assumed upfront your code will do something you didn’t intend so it’s structured to fail-safe when human safety is a concern.
Software quality to me means it’s not done until I’ve commented it properly, held a code review with my peers… explained how my code works and openly considered their feedback and made changes appropriately, written a firmware validation test plan and executed it, stored the complete project in version control software with all instructions on how to compile and deploy.
Software quality to me means I know it’s not really done until I’ve come to terms that I will no longer support it, because as time moves forward… code always has the possibility to change for any unknown reason.
Software quality to me means if I don’t comment and document it as I writing it (i.e. NOW), if will never get done because there is always the next project tugging at me just as soon as this one “appears” to be functional.
I’d be curious to know how you document your state diagrams. Sometimes I use excel tables, some times visio, word or even framemaker to make a more traditional state diagram. Other times I’ve used a mind map. When it starts to get complicated, I often wish there was a good tool to write it out logically like a table, but then have the flow chart part of it auto generated by the table. Some people can’t “see” how it works as a table, and others can’t follow a simple flow chart or state diagram… so you kind of need both. Any good free or cheap tools for this you use?
I don’t typically write unit tests, because most of my issues seems to be real-time functional issues that I haven’t found a unit test that would automatically find. So a firmware validation test plan that executes functional testing with many different worst case conditions seems to be the best way to find these subtle problems. Regression testing with many functional tests is a completely PITA though, but unit testing alone wouldn’t make me feel comfortable. That said I would like to start adding unit tests to my code.
¹ if you caught the typo, then you’re a perfectionist as well! It’s a cool shirt.
[1]: http://www.thinkgeek.com/product/f141/?srp=6