Does this dress make me look fat?
Don’t you just know if you have good quality or not?
I bet that if you spend lots of time worrying about how to measure your quality then you’re probably feeling insecure. On the other hand, if you’re confident about having a high quality product then you won’t be bothered as much.
“Wow! I look fabulous in this dress!”
The fulfillment kick
Earlier this week I was part of discussion on how getting things done led to fulfillment and how you can struggle with getting that fulfillment kick in certain positions. Someone bought up the example of programmers who had become managers/mentors. When they used to find fulfillment in a code check-in, this was more difficult as a mentor when their new job is to talk to people and help them get their jobs done.
We agreed that since our childhood we have been drilled to fulfill our task individually. In school we are mostly graded on individual performance. As adults we read and develop techniques to get things done ourselves. This can be through to-do lists, personal kanban boards, etc.
But in the team setting that most of us work in this doesn’t work out very well.
I’ve had programmers tell me that once their code is “ready for test” their job is done and they can start working on something else. As a tester I obviously disagree with that approach. But I’ve also gotten developers to to help me with the testing, which made us finish a feature much faster than if I had done it alone. The day after they all agreed that it had been nice to push on and and get it ready for release right away rather than starting something new.
But what do you do when you are done with your task and have nothing obvious to do? You try to find something to do. Something immediately related to you. Probably because it is what you are used to and also because it gives you a sense of fulfillment.
This might not be what is best for your team at the moment. Asking a few colleagues if they need any help could be a better option.
If you have a team where people are more used to the individual fulfillment kicks then I would suggest that you show them to see how nice the team fulfillment kick can be.
PS. When I was tied up one day, the developers in my example went about to test a feature without me. I got a review when I came back and the team could release the feature. Previously, we would have had to wait one day to get it finished.
Getting started with rails on Ubuntu
Getting rails running on Ubuntu wasn’t as easy as I expected, there were a few bumps. This is what I learned in the process.
1. Ubuntu isn’t really keeping up to date with the ruby versions. If you do apt-get install ruby you will get version 1.8.7. I happend to get 1.8.7 p249 which turns out to be completely incompatible with rails3.
How to solve this: use rvm to manage ruby versions. https://rvm.beginrescueend.com/
Follow the installation instructions.
2. You want to get ruby version 1.9.2. However it doesn’t come with openssl per default which you will need.
How to solve this: use rvm.
$ rvm package install openssl $ rvm install 1.9.2 --with-openssl-dir=$HOME/.rvm/usr
3. You want to install rails using gems.
How to solve this: go to rubygems http://docs.rubygems.org/ Download, decompress and run setup.rb.
4. Now, you should be able to install rails. Don’t use sudo! This will mean that you override the rvm version of ruby and use your system version instead.
$ gem install rails
5. Time for sqlite3. But, you’ll probably get an error message unless you first apt-get install libsqlite3-dev. And then gem install sqlite3-ruby.
Ok, now you should hopefully be able to do a simple hello world. For example:
Specification by example, my thoughts collected after workshop with Gojko Adzic
I had the pleasure of attending a two day workshop titled “From user stories to acceptance tests” with Gojko Adzic. The main topics that the workshop touched were specification by example and effect mapping.
In short: we want to use specification by examples in order to explore the domain language and decide what features are needed and why. We also want the single version of the truth that this living documentation will provide us. We want the tests that accompanies them to be confident about our system.
The long story:
Incremental vs iterative development
By making us build a game of black jack under time pressure, Gojko started off by illustrating the difference between incremental and iterative development. All of the groups in the exercise decided (without asking our customer) to design an algorithm for the back jack dealer. It seemed to us as a good start: a small piece that we would have the time to complete and deliver in the time given to us. When the customer at the end came with his acceptance tests and they all started with the “The player has a 10 and an Ace” we were all baffled. We hadn’t thought of the player and none of the tests passed. The customer had spent money and received nothing. Needless to say we were very embarrassed.
What we did was incremental development. We designed a component and wanted to later build more components to finally have a game. But the feedback loop in that case is very long. It takes a long time before the customer gets something he can try out. Gojko told us that it is common for development teams to basically say “We can’t really implement something useful for the customer in one iteration so we’ll do something now and then in x iterations we’ll have reached something he can try”.
The opposite approach is to focus on giving the customer a (basic) complete flow that we can receive feedback on right away. In our case, a simple game round with hard coded values would have been nice, just to see if it is what the customer had in mind.
Specification by examples and the benefits that come with them
Besides the benefits that come from the dialog with the customer, by working with specification by examples together with tests you will get a living documentation of the system. A single version of the truth about the system. When done right, this living documentation will be consistent, easy to read, easy to access. It will also be reliable, precise and comprehensive because of the tests.
To create good specifications it is important to keep the specifications and examples self explanatory. If there is need to explain it further then that information should be in the specification. It is also important to remember that the tests should be about the business domain and not about software design. For example, they shouldn’t be scripts (e.g. “Click”, “wait”). A script will tell us how something is tests but not what or why.
Effect mapping and business goals
On the second day we talked about effect mapping and how it can be used to achieve business goals. An effect map is a diagram with a business goal in the center. On the second level you will find the stake holders (users, marketing department, etc). These are the people that we identify by asking the question “Who can help us achieve our goal?”. On the next level we write down activities that the stake holders can do by answering “How can they do it?”.
An effect map will have elements of software design in it but will also contain other activities.
The next step will be to prioritize the map by trying to identify which goals are most likely to help us achieve our goal and to focus on those.
Gojko also talked about the benefits of keeping features within one business goal since it is easier to design features which are related.
Conclusion
The two days were inspiring and fun. I had trouble seeing how requirements, tests, product owners, developers, etc all could fit together and I feel that those pieces of the puzzle are better aligned now in my understanding of software development.
What was nice about the workshop was, among other things, the fact that Gojko bought examples from real businesses with him. He talked about their adoption processes and the mistakes that they had made. He also talked about their different constrains and how they had successfully worked around them.
VirtualBox
I have the great pleasure of be able to run Linux at work. Since I’m working with test it is important that all types of operating systems are represented (there’s probably about 1% of our users who actually run Linux but don’t tell anyone!). However I am forced to do some tasks in Windows so I’ve installed VirtualBox.
At first I wasn’t too impressed. Sure, the installation was smooth but my desk neighbor runs VMware on his Windows machine and it has many more cool features. Copy and paste, drag and drop files, etc. There is a way to make some of that work with VirtualBox as well.
You need to install the Guest Additions. here’s a guide: http://www.dedoimedo.com/computers/virtualbox-guest-addons.html
Of course, the next time you start your image, it will be in a 800×600 resolution… don’t panic. Just resizing the window in which your VirtualBox is running and it will change resolution.
Now you can create a shared folder to share files between you machine and your virtual machine without having to email them back and forth.
Edit 2011-08-24: setting up a new vbox on my new job I ran into the windows xp shared folder bug again. It seems impossible to see the shared folders in the network using Windows Explorer. The answer is to click the plus sign next to the network instead of clicking the label. This will make the tree of folders appear. I found the solution here : http://www.giannistsakiris.com/index.php/2007/09/28/virtualbox-access-shared-folders-from-windows-xp-guest-os/
About failure
The key is failing fast, failing cheap
Howto: do basic things using ProjectWhite/White
Howto:
- launch an application
- navigate into a submenu
- get a hold of a MDIChild-window.
Public Class Test1
Private Const path As String = "C:\Path\myprogram.exe"
Public Sub TestMethod1()
Dim application As Application = application.Launch(path)
//Find the form
Dim main_window = application.GetWindow("name of window", InitializeOption.NoCache)
Assert.IsNotNull(main_window)
//Find the Menubar and its choices
Dim menu As MenuItems.Menu = window.MenuBar.MenuItem("Menu choice")
menu.Click()
Dim openSubMenuChoice = menu.SubMenu("Submenu choice")
openSubMenuChoice.Click()
//Find the MDIChild-window
Dim child_window = main_window.MdiChild(SearchCriteria.ByControlType(ControlType.Window))
Assert.IsNotNull(child_window)
application.Kill()
End Sub
End Class
Howto: Display code in wordpress
I’ve been wanting to add some code examples but the difficulty of working with code in the wordpress editor has made me shy away from it.
Until I saw: http://en.support.wordpress.com/code/posting-source-code/
That was a lot easier than I imagined.
public class hello(){
int a;
int b;
a= a+b;
}
Where does quality come from?
At work I was asked, together with a colleague, to come up with a plan on how to improve/introduce automated testing on our two systems.
It didn’t take us long to identify that integration testing was the way to go. We presented that track. And we were met with questions such as “And how are you going to measure the amount of defects we have?”
Well, would the quality of our systems improve if we measured the amount of defects they had? Would it tell us anything more than the amount of faults they used to have? (Or still have if the mentality is to tolerate and not fix the bugs)
Our plan was completely different.
Quality is something that you build into the system and testing is a tool that can help keep focus on it.
People are fond of TDD because the quality of the code can improve when you use it. It helps you keep track of the intent of your code, make it more structured and hopefully keep the complexity down.
In the same way, by using BDD and integration testing, you can keep track on the goal of the system. What business value does your code add? Who will use it? What is the desired effect?
Even though they are testing techniques, they are also development tools. And an interesting part in introducing quality.
The window is opened
I didn’t renew my contract for my part-time job after the end of this month. I really want to finish my master’s thesis and now I’ll be able to do it full time.
So, the window is opened. I’ll be done in the beginning of march, and I’ll need a job!
About me:
- I believe in agile methods
- I feel good when I TDD
- I own a xkcd t-shirt
- I really know how to sell myself
(“The window is opened” is a reference to HIMYM (S05E10). My favorite sitcom.)
Leave a Comment