Ok a bit sweeping but I think there is truth in this, if you have to resort to a mocking framework (such as Typemock the one I use) I think it is vital to ask ‘why am I using this tool?’ I think there are three possible answers:
- I have to mock some back box that is huge and messy that if I don’t mock it will mean any isolated testing is impossible e.g. SharePoint
- I have to mock a complex object, I could write it all by hand, but it is quicker to use an auto-mocking framework. Why do loads of typing when a tool can generate it for me? (the same argument as to why using Refactoring tools are good, they are faster than me typing and make less mistakes)
- My own code is badly designed and the only way to test it is to use a mocking framework to swap out functional units via ‘magic’ at runtime.
If the bit of code I am testing fails into either of the first two categories it is OK, but if it is in third I know must seriously consider some refactoring. Ok this is not always possible for technical or budgetary reasons, but I should at least consider it. Actually you could consider category 1 as a special case of category 3, a better testable design may be possible, but it is out of your control.
So given this I looked at the new Typemock feature with interest, the ability to fake out DateTime.Now. Something you have not been able to do in the past due to the DataTime classes deep location in the .NET framework. OK it is a really cool feature, but that is certainly not a good enough reason to use it. I have to ask if I need to mock this call out does my code stink?
Historically I would have defined an interface for a date services and used it to pass in a test or production implementation using dependency injection e.g.
public class MyApplication
public MyApplication(IDateProvider dateProvider)
// so we use
DateTime date1 = dateProvider.GetCurrentDate();
// as opposed to
DateTime date2 = DateTime.Now
So in the new world with the new Typemock feature I have three options:
- Just call DateTime.Now in my code, because now I know I can use Typemock to intercept the call and return the value I want for test purposes
- Write my own date provider and use dependency injection to swap in different versions (or if I want to be really flexible use a IoC framework like Castle Windsor)
- Write my own date provider class with a static GetDate method, but not use dependency injection, just call the method directory wherever I would have called DateTime.Now and use Typemock to intercept calls to this static method in tests (the old way to get round the limitation that Typemock cannot mock classes from MSCORELIB
I think this bring me back full circle to my first question: does the fact I use the new feature of Typemock to mock out DateTime.Now mean my code stinks? Well after bit of thought I think it does. I would always favour putting in some design patterns to aid testing, so in this case some dependency injection would appear the best option. Like all services it would allow me to centralise all date functions in one place, so a good SOA pattern. With all my date service in one place I can make a sensible choice of how I want to mock it out, manual or via an auto mocking framework.
So in summary, in mocking, like in so many things in life, just because you can do it is no reason why you should do something in a polite society. If you can, it is better to address a code smell with good design as opposed to a clever tool.
I was at the Architect Insight Conference yesterday, so the big question is do I better know the role of the architect in the development process – I have to say no. Don’t get me wrong the event was interesting, I especially enjoyed the interactive group discussion sessions, one of which I chaired if that is the right term. As I have said about other conference I tend to find I get more from the discussions with other delegates than the more tradition presentation sessions.
For me the role of the architect is very fluid. There are many different ways to run a project and a company. Some define a role for the architect, usually those with more formal structures, for others the role is actually an emergent virtual role that the team as a whole perform, usually as part of an agile planning process. There is no single silver bullet solution for all project types, recognising this is probably the big insight of the conference.
Give this why does it seem that people aspire to being an architect? what do the think the role entails that makes it appeal so much?
A very noticeable comment in our interactive session was that recent computer science graduate did not seem to have done much programming as part of their courses. They all seemed to be focused on the business/analysis aspects of the industry. Is this driving people to the perceived glamour/rock star role of architect? More than one delegate went as far as to say they were now looking at A Level students to fill junior developer roles. Graduates were either not interest or lacked the skills companies would expect after completing a degree course. It was easier to train up suitable 18 year olds. In our industry a keen enquiring mind is more important than a degree, something that seems to beaten out of many people at university.
This harks back to my formative years, I was a thin-sandwich course student mixing 6 months at university followed by 6 months in industry (which I hasten to add I would not recommend, better a couple of years study and then a year out in industry). Many people I worked with were not student/graduate engineers but HND students, in my opinion an educational route sadly underused with this current government target of 50% of people going to university. HND’s aimed to turn out good technicians, people who knew the job of making and testing the product, but without the grounding in theoretical theory a graduate would have. Very much a craftsmanship point of view where staff are trained up within team, not arriving from university as the finished article.
So the key takeaway for the conference for me? Software development is a people/communication process. It is key to get everyone involved in the all stages of the process. Whatever else an architect is, they should not a person in an ivory tower lobbing out huge specification tomes to the minions below.
You can run Virtual PC 2007 on Windows 7, but Windows 7 does include a new version of Virtual PC as part of the operating system, which is good.
The problem I have, and as will many others, is though my 64Bit Acer 8210’s Intel process has hardware virtualization support, Acer for some bizarre reason chose to disable it in the BIOS; thought it was enabled in the 32bit 8200 series, and is enable in the later Travelmate equivalents. Acer are not alone in this choice. This means that many people with fairly recent PCs will not be able to run the newer version of Virtual PC.
If at all possible I think Microsoft need to provide support for host PCs with no hardware virtualization support,or that lack the option to enable it in the BIOS, as does my Acer. However I wonder, as hardware virtualisation is pre-requisite for Hyper V, is it that this new version Virtual PC share technology with Hyper V, thus giving the same hardware requirements?
I got round to listening to the latest Radio TFS podcast today whist out for a run, Adopting Team System with Steve Borg. If you are looking at adopting TFS or even just critically looking at your development life cycle with a view to improving (irrespective of the tools you use), then this podcast is well worth the time to listen to. It actually covers a lot of the points I was discussing at the Agile Yorkshire user group this week in my session of Crystal Clear. By now I would usually have put my slide stack up for all to download, but in this case, as my session was a book review in essence I would like you to read the original Crystal Clear by Alistair Cockburn.
In my opinion, the key point they both raise is the that it is important to have a process that provides:
- Safety – provides a framework that means the project can safely be delivered
- Efficiency – development should be in an efficient manner
- Habitable – that the team can live with the process (if they can’t the process will be avoided/subverted)
Or to put it another way (and quoting here from the Crystal Clear book) “a little methodology does a lot of good, after that weight is costly”
A point raised at the user group in the chat after my session was that of how to get senior people (such as CEO, CFO etc) to buy into the ‘new’ development process (a critical factor for success). Too often it is heard “I don’t care if you are agile or not, I just want it delivered” and no support is provided beyond the actual coding team from the business. A good discussion of this type of problem is in Gojko Adzic’s book Bridging the Communication Gap: Specification by Example and Agile Acceptance Testing. This is written for non software developers and discusses how to make sure that the whole business is involved in the development process, thus enabling the project to deliver what the business really needs not what people think they need. I would say this book is an essential for anyone involved in the software specifications process – and that should be everyone in an agile project!
Today has been interesting, I have been to conferences where you sit and listen, such as DDD, TechEd etc. I have been to conferences where everyone is encouraged to talk open spaces style such as Alt.Net, but today has fallen between the two styles.
The Software Craftsmanship 2009 conference has been in more of a workshop style; most sessions have started with a short presentation to set the scene then the attendees split to forms small groups to do some exercise or chat, reporting back later in the session. A sort of lead open spaces feel if you want.
As usual with events you need to let what you heard sink in, but I think it will be useful. Not so much in the 'I must do X to fix project Y' but in the general approach to development issues. This was a conference on craftsmanship, best practice in general not magic bullets. A good example was in the session on responsibility driven design with mock objects, where a good deal of time was spent discussing the important of variable/object names in the design. From this session you should not take away that 'View' is a bad name and 'Display' is a good one; but that the choice of the name is important to how you will view the intent of the test and the code you are writing.
I suppose this was the theme for the day, in development intent is key, why you do something is more critical than how. It is only through clear understanding of the intent of the business users that a developer can hope to design the best system. So often what the client asks for is based on what they think can be done and unless this requirement is challenged to get at the underlying intend the best solution (whatever best means to the project) will be missed. The same holds true with writing tests, it is vital that the test conveys the intent of what is being tested, else there is little hope for any future maintenance work when all the original staff have moved on. This means to me that the most important part of the user story is the 'so that they can' clause at the end, it is so often the window onto the truth of the real story intent behind the story.
So an excellent day all round, thanks to Jason Gorman and everyone else who helped to organise the event, I look forward to next years, and so should you if you are interested in your craft....
I had the PDC CTP on my Netbook and that was OK so I had not expected any major issues. That said it has not been without problems, but all the issues I have logged as part of the beta program have been related to hardware detection (missing base stations and ignored physical Wifi switch state) on my Acer laptop. However, these issue can be worked around i.e. don’t use sleep or hibernate. so have not stopped be using the beta on my primary PC.
As to using Windows 7, I like it. I am find the revised UI easy to use, and it certainly seems faster than my Vista build on the same PC, but this might just be the fact it is fresh install on a formatted disk.
I will report more then I have used it for a few days in the real world
At the last MVP Summit Steve Ballmer said “I’m going to ask you one week switch your default [search engine], one week. At the end of the week…I’ll want feedback, how was your week, what happened, what did you like, what didn’t you like … Can I make that deal with you? (Cheers and applause.) That’s the deal.”
Well the week was last week, and how did I find Live Search?
I have to say it is vastly improved, in the past I just assumed Live Search would find nothing of use, especially if I was after something I would expect to find on a Microsoft site like TechNet.
This week I have found that though it does not return exactly the same a Google, it is just as useful; in fact the two are fairly complimentary. For most searches it does not now seem to matter which one I used, but when really digging one might turn up something the other does not.
So am I going to move back to Goggle? Well I am just not sure it matters for day to day searching. I certainly don’t now feel the need to change my default search engine to Google immediately when I setup a PC as I used to.
Whist at PDC and the VBug conference I have heard a a good deal of chat over the future of paying for conferences and user groups. This is in the light of all the PDC sessions being available on Channel9 in under 24 hours and that the content at the Vbug conference is also available at free events like DDD.
The question boils down to can a person or company justify paying a good few thousand Pounds, Euro or Dollars to fly half way round the world when they could see the same content at home? In my previous post on the PDC I suggested it was worth it for the networking, and I still think this is so. However, I have heard an interesting slant on this from more than one person; this is go to the city were the conference is but not to the actual conference; just taking in the parties and maybe watching content via the Internet where available.
For some people I think this might be a viable option; as long as you get the right party invites! For example at TechEd Europe there many community orientated events organised outside the conference because this is the one time most relevant people are in the same city. Also if you are in this group then you may struggle to find time to go to the actual conference so maybe this plan is viable or even preferred. However, for the average developer I am not certain it is the case, too much of the networking happens randomly inside the conference corridors and at meal tables. For this ‘outside the conference’ model to work you have to know who you want to meet and get invited to the right places/parties i.e. you need some profile in the community
As to the other point whether Vbug like events will continue I think we need to consider who they are aimed it. I had expected at the Vbug conference to see a lot of faces in the audience who I see at DDD, but this was not the case. There were a few but not a majority. Then again I don’t see the same faces at DDD as Alt.net. We have a number of distinct communities going on here, there is some cross over but not that much. I think the three broad groups are:
- People who go to events (free or otherwise) during office hours – VBug attendees, and people who come to the events we host with Microsoft.
- People who will go an event in their own time, but it is a passive learning experience – like DDD on a Saturday or a speaker at a user group
- People who want to discuss what they do either in a user group over a beer or at an Open Spaces format conference – like Alt.net
We are never going to get all three groups merged into one. People will move from one to another and maybe attend all three, but that is their choice.
We are lucky in the UK that we have such an active and high quality community so all three groups can be supported, it will be interesting to see if any one type prevails (judged by attendance) as time goes on. However I do not expect to see any type disappear soon.
So back home now after a reasonable journey back from LA all things considered; so I have had a bit of time to reflect, was the PDC good?
Well I think I enjoyed my previous PDC in 2005 more, your first time always sticks in your memory. I think that this might be due to the fact that at the 2005 PDC LINQ was announced and it was a real left field thing, nobody seemed to see it coming. Due to the prior announcements (leaks) there was nothing that was not expected at this years PDC.
This said, it does not mean the the announcements were not important, for the future of Microsoft probably far more important than LINQ was. You could argue that Azure is more of an IT pro announcement, on a day to day basis it will certainly effect them, due to remote hosting of core services, more than developers who will still basically be using .NET via WCF, EF etc. just altering a connection string or two. So an announcement at the Professional Developers Conference was in itself interesting, but where else would Microsoft do it?
On a more step change for developers front, will Oslo change the world? Well in my opinion not yet, but this was a PDC so we expect the new ‘real’ product to be a few years out. Next year’s PDC 2009 I think will see the Oslo and Dublin technologies productify (is that a word?). It is worth comment that a PDC two years running is rare, so Microsoft must have something up their corporate sleeve.
Since getting back I have done the conference survey and I found one question interesting ‘does the fact that the sessions were all available via www.microsoftpdc.com effect your choice to go to the conference in the future?’. I have to say yes, but on reflection it was worth the trip. A conference is more than the keynote and breakout sessions, maybe there is a future in fully online conferences but it is not there for me yet. Whether I want to travel best part of half way round the world is a interesting point; a 2 hour flight to Barcelona did seemed attractive when sitting in Heathrow Terminal 5 prior to my11 hour flight. But I was lucky I suppose, a friend was off to Hawaii for an air compressor conference the same week I was in LA (each to their own I suppose). The location for me does not warrant the travel, the inside of a conference centre is much the same in any country. I suppose a factor here is how much time you spend in the conference against the beach, for me if you are going to a conference it is to learn not have a holiday (or hunt for swag!), but I am not sure all people have the same opinion here. Some people seem to see a conference a reward for work done in the year, so at treat not a learning experience.
So will I be at PDC 2009 – I expect so. Whether Black Marble send as many to the PDC as opposed to the various TechEds I am not sure, this is a discussion we need to have post conference season. We defiantly need to cover both types of conference, as does any forward looking Microsoft partner, but the ratio is the question.
As for me next it is the Vbug conference I am speaking on VSTS; I believe there are still spaces available, maybe I will see you there.
The keynote today was all about MSR, interesting as ever. I particularly liked the demos of Second Light (Surface computing that reaches beyond the surface of the physical pc) and Boku (a system to help children program). The latter is close to our hearts at Black Marble due to the work we have done on FPL, another system to teach children to program (watch out for free downloads of this application soon)
It was also interesting to see that there was a date for a PDC 2009 – shows that Microsoft have plenty of new things in the pipeline.
Outside of the keynote, what could be more directly useful to me will be Visual Studio Team Lab, a new SKU for 2010 (sorry still can’t find a link with more details) that will manage the provisioning of test environments: Hyper-v VHDs are stored in a repository and created using pre defined rules as part of a build process. Test can then be run either automatically or manually using the new VS2010 test tools. Test results are then fed back into the TFS work item tracking system including screen shots, error test information – in fact enough information to allow a developer to connect to the Hyper-v pc at the point of error and debug. This idea is something we are working on internally with current VS2008 and Hyper-V tools. Unfortunately we are unlikely to see Team Lab until VS2010 reaches beta, so a good way off – so I am going to have to persist with our own internal projects it seems.