Sign in
|
Join
ISerializable - Roy Osherove's Blog
Unit Testing, Agile Development, Leadership & .NET - By Roy Osherove
This Blog
Home
About
Syndication
RSS
Atom
Comments RSS
Search
Go
Navigation
Home
Blogs
News
My new book is out!
The Art Of Unit Testing
Buy and read it as I write it.
I work at:
Your ad here
The Art Of Unit Testing Book
Roy's Cool Tools
Subscribe!
Subscribe to ISerializable by Email
About
Hire me
Ask me
On my bookshelf
About me
Ego trip
Roy's Tools
5 Whys - a blog for team leaders
Key.bo - a search engine wiki for keyboard shortcuts
unit testing
ruby styff
All Developer Songs
It's Time for Violence
Que Sera Sera
Articles
3: Oops! Typed Datasets
Are
scalable!
4: Introduction To Regular Expressions
5: Practical Parsing Using Groups in Regular Expressions
6: UI Threading Helper Classes
Make Your App Support Plugins 2 - Dynamic Search (MSDN)
Winforms Data Binding Lessons Learned
Make Your App Support Plugins (MSDN)
1: Introduction to Typed Datasets
2: Typed Datasets Are No Silver Bullet
My articles on MSDNAA
7: Solving VS.NET Debugger Problems
Make your log files searchable using Regex and the XML classes (MSDN)
Introduction to TDD with NUnit
Fun with Unit Tests – Testing abstract classes
New: Creating a generic Site-To-RSS tool
.Net scripting
- the practical way
Simplified Database Unit testing using Enterprise Services
Creating custom test attributes easily with NUnit 2.2.1
Cool tools every .Net Dev should be aware of
Cool Tools every .Net developer should be aware of
New: The case for staged delivery and Agile methodologies
My .Net Deep Dive lectures on video
New: Defensive event publishing in .Net, part 1
Test Feasibility Matrix
Depenedency Breaking Issues
*new* Achieving And Recognizing Testable Software Designs – Part I
Favorite Blogs
The Morning Brew
Martin Fowler
Scott Hanselman
Joel On Software
.NET Weblogs
Microsoft Israel Community
The Runtime
Daniel Moth
Oren Eini
Jimmy Bogard
CodeBetter
Dustin Campbell
Guy Kawasaki
Stephen Toub
Research @ Intel
Udi Dahan
The Typemock Insider
My Projects
Vs.Net Settings import.export Add-in
SchemaHelper - auto-detect & create data relations
Proxy handling using ProxyFactory and ProxyInfo
BackgroundWorker implementation
XtUnit: An Unofficial Unit Testing Extensibility Framework - Add new attributes to NUnit or MbUnit e
Intercetpion Application Block
Extensibility Application Block
The Regulator
VS.Net 2003 registry tweaker
My Tools page
Regular Expressions
RegEx Lib
Expresso
Regex Blogs
Sites : .Net
.Net Tools List
.NetWebLogs Forums
Winforms FAQ
.Net Debugging Resources
.Net WebCasts & Others
.NetWeblogs Archive
MSDN Magazine
Design Patterns in C#
.Net Rocks Radio
.Net Resources
Howto: .Net common tasks
VB.Net blogs on MSDN
.NetSlackers
Sites : Misc
Regular Expression Library
MSR Downloads
Win2k3 Tweak Guide
About Microsoft Interviews
Tech Interview Riddles
Feedster
Amazon Light
C:\Utils
Sites : Unit Testing & XP
NUnitASP
Tips and techniques with NUnit
NUnit
NUnit Addin
XProgramming
MSDN Mag:Simplify Data Layer Unit Testing using Enterprise Services
Tags
.NET
.Net 2.0
.Net Original
.Net Quotations
.NetWeblogs Site
Addin Contest
ADO.Net
Agile
Agile Israel News
Agile Related
altnet
altnetconf
altnetisrael
Architecture
Art Of Unit Testing
ASP.NET
BDD
Blogging
C#
CLR
Community
Community News
Cool Articles
Cool sites
Cool Tools
Extensibility
Family
FeatureFocus
Free book chapters
General Software Development
Interview
Lean
Mobile
MSBuild
NDC09-Video
Off Topic
Open Source
Other
Product Reviews
Project Management
racer
Recommended books
Reflection
Regex
Regular Expressions
review
Security
Sharepoint
Silverlight
SOA
Songs
SQL Server
tdd
Team Agile News
Team System
TechEd 05
Testing Guidelines
TestReview
Threading
Tips & Tricks
Typed Datasets
Typemock
Unit Testing
Visual Studio
web
web services
WebCast
Windows Forms
WinFX
Recent Posts
How to: Move your blog off of weblogs.asp.net (aka ‘This Blog has moved’)
test – ignore
Bounty: 500$ is you can convert my blog to squarespace
Join me for a live webinar on unit testing with Isolator++ this thursday
What’s coming in Test Lint 1.5
Archives
November 2010 (2)
October 2010 (4)
September 2010 (4)
August 2010 (3)
July 2010 (2)
June 2010 (5)
May 2010 (6)
April 2010 (6)
March 2010 (4)
February 2010 (5)
January 2010 (11)
December 2009 (7)
November 2009 (7)
October 2009 (5)
September 2009 (6)
August 2009 (21)
July 2009 (7)
June 2009 (11)
May 2009 (13)
April 2009 (5)
March 2009 (21)
February 2009 (4)
January 2009 (2)
December 2008 (5)
November 2008 (6)
October 2008 (13)
September 2008 (4)
August 2008 (13)
July 2008 (19)
June 2008 (5)
May 2008 (17)
April 2008 (11)
March 2008 (13)
February 2008 (16)
January 2008 (21)
December 2007 (8)
November 2007 (18)
October 2007 (17)
September 2007 (15)
August 2007 (19)
July 2007 (18)
June 2007 (33)
May 2007 (16)
April 2007 (10)
March 2007 (15)
February 2007 (10)
January 2007 (11)
December 2006 (22)
November 2006 (18)
October 2006 (19)
September 2006 (30)
August 2006 (19)
July 2006 (27)
June 2006 (26)
May 2006 (32)
April 2006 (15)
March 2006 (20)
February 2006 (33)
January 2006 (23)
December 2005 (22)
November 2005 (41)
October 2005 (21)
September 2005 (7)
August 2005 (28)
July 2005 (41)
June 2005 (60)
May 2005 (14)
April 2005 (51)
March 2005 (31)
February 2005 (17)
January 2005 (63)
December 2004 (45)
November 2004 (35)
October 2004 (28)
September 2004 (36)
August 2004 (21)
July 2004 (44)
June 2004 (63)
May 2004 (62)
April 2004 (78)
March 2004 (64)
February 2004 (55)
January 2004 (67)
December 2003 (34)
November 2003 (67)
October 2003 (68)
September 2003 (113)
August 2003 (56)
July 2003 (112)
June 2003 (71)
May 2003 (136)
April 2003 (52)
March 2003 (81)
February 2003 (77)
Test Driven Development with C++: Much harder than it should be
My blog has moved. You can view this post at the following address:
http://www.osherove.com/blog/2004/12/2/test-driven-development-with-c-much-harder-than-it-should-be.html
Published
Thursday, December 02, 2004 6:50 PM by
RoyOsherove
Filed under:
Agile Related
Comments
Thursday, December 02, 2004 12:15 PM by
Paul Bartlett
#
Is "agile C++" an oxymoron
Here are my thoughts on the subject from a while back...
http://blogs.geekdojo.net/pdbartlett/archive/2004/03/09/1339.aspx
Thursday, December 02, 2004 1:41 PM by
Kyle Alons
#
re: Test Driven Development with C++: Much harder than it should be
Here's one other C++ unit testing framework (haven't used any of them so don't know which is best):
http://cpptest.sourceforge.net/
Thursday, December 02, 2004 1:51 PM by
Roy Osherove
#
re: Test Driven Development with C++: Much harder than it should be
Hey Kyle, thanks! I've checked out Kinook's Visual Build software a while ago and have often compared it with FinalBuilder which I just love. Just wanted to give props to your company for making a powerful product. I just wish it would be more usable and less "macro" oriented.
Thursday, December 02, 2004 7:25 PM by
Brian Button
#
re: Test Driven Development with C++: Much harder than it should be
Roy,
check out Ron Jeffries site,
http://www.xprogramming.com/software.htm
. There are a bunch of links there to C++ testing frameworks. Also check out CppUnitLite from Michael Feathers. I've used this on a project before, and it worked really well. It's available on the objectmentor.com site someplace.
bab
Friday, December 03, 2004 4:04 AM by
Dee Zsombor
#
re: Test Driven Development with C++: Much harder than it should be
Well Roy you are right it is more difficult than it should be, but not nearly as difficult as you have describe it! Some of the limitations come from the nativeness of the language itself, for example without reflection you cant have a framework that auto discoverers test functions. Also you cant have mock objects without reflection.
As for refactoring support, there is one tool that I can think of: Xrefactory that integrates well in Emacs, Xemacs and I believe Jedit too. Also there is plan to implement DOM parser in CDT (that has decent support) thus you be able to use Eclipse for refactoring Not that I would need another IDE as I'm an (X)Emacs guy. By the way I also think the Visual Studio 6.0 sucks but there are better options anyway.
There is no need to register testcases manually (although I prefer to do this myself for reasons not presented here): there you can use CPPUNIT_TEST_SUITE_REGISTRATION macro, or just configure your editor template support to add these lines automatically. Also you can very well use fancy GUI runners, as far as I know there is one implemented for windows with MFC and another cross-platform with QT. But then again you-will need command line as for automated continuous builds. Supplied GUI runner example is minimalistic enough for you to use one for your self should you need it.
True that you don't have ant, but you have make, nmake, jam, A-A-P, SCons and lot more of build tools that don't need hairy XML syntax to setup a simple build. As for coverage there is Rational Pure Coverage, tcov, gcov, Dynamic Code Coverage, CTC++, and whole lot more. As for dependency analysis your statement is simply not fare.
Saturday, December 04, 2004 9:36 AM by
Eric Vautier
#
re: Test Driven Development with C++: Much harder than it should be
Arnold Ewald mentions he has implemented a Mock Objects framework for C++.
Saturday, December 04, 2004 9:57 AM by
Thibaut Barrère
#
re: Test Driven Development with C++: Much harder than it should be
>(BTW: Does anyone have any knowledge of the C++ testing frameworks listed here >at the bottom of the page? Got any favorite?)
My favourite C++ testing framework is TUT (which is not listed!), although it won't work with vc 6 nor vs.net 2002 (it requires a strongly template compliant compiler). It works fine with vc 7.1 (vs.net 2003) and as well with other platforms (solaris etc)
It only requires two header files (no lib!) and I find it very easy to setup and use, very lightweight, and its integration in the build cycle is simple.
I posted about it :
http://blogs.dotnetguru.org/tbarrere/?title=unit_testing_with_tut&more=1&c=1&tb=1&pb=1
You can download TUT here :
http://tut-framework.sourceforge.net/
Sunday, December 05, 2004 3:08 PM by
Reginald Braithwaite-Lee
#
Agile C++ Development Shop
I'm the development manager seeking agile C++ developers in Toronto.
I wouldn't say that Test Driven Development ("TDD") with C++ is much harder than it should be (although that's true). I would say:
1. Test-driven development of any applications written 5-15 years ago is hard. TDD was not common, and the architectures of legacy applications are not supportive. Even with great tools, it is hard to use TDD on legacy applications.
The connection with C++ is fairly obvious: much of the C++ code out there was first written 5+ years ago.
As a knock-on effect of this, most of the C++ developers kicking around did not employ TDD during their "formative years." As a result, they don't use TDD tools. Try making a TDD C++ tool: you'll find it very hard to get C++ developers to adopt it.
2. Test-driven development of highy OS-initimate applications is hard. Operating system APIs simply aren't written to facilitate test-driven development. That's why WinRunner sucks as a test tool: it's the OS that makes it hard.
Of course, if people were using C++ for three-tier business applications we would find TDD easier. But of course, people aren't writing those applications in C++. People are writing things that are fairly intimate with APIs, and most of these don't facilitate TDD>
Can we factor UIs out and take other steps to make C++ applications easier to test using automation? Of course we can, and we do. But it's inherently harder to do so.
*****
In summary, my experience is that there is a vicious cycle at work: legacy coders (5+ or 10+ years of experience) aren't big on TDD, so the market for TDD is smaller on platforms/languages that have been around longer. This drives fewer tools, which in turn drives lower adoption.
Simultaneously, it's hard work to make API-intimate applications testable. This exerts serious negative pressure on TDD.
p.s. "Hard work"??? I know, just design well from the get-go. This is easy in theory, difficult in practice when the bug list is a mile long, there's a hard cap on a release date next Friday, and the VP of Product Management is drilling down on every developer-hour invested. The "hard work" is often political :-)
Sunday, December 05, 2004 3:14 PM by
Reginald Braithwaite-Lee
#
re: Test Driven Development with C++: Much harder than it should be
p.p.s. Despite my complaining, we're still hard core about agile development and test-driven development. And yes, I do the "hard work" of selling management on the ROI. For example, later this (12/2004) month, we have a consultant coming in to lead a two day CPPUnit workshop.
Although this seems like an easy thing to arrange, I assure you there has been serious due diligence on investing two days for each developer in this training as opposed to doing other work.
It's easy to say "we'll make up the lost time in improved productivity," but in a professional environment you had better be prepared to say "if we don't do the training here is the schedule for what will be developed by when. If we go ahead with the training here are the specific and measurable improvements in dates and/or scope. And here's the objective analysis backing everything up."