Sadek Drobi’s Blog

February 18, 2008

Coplien and Martin Debate TDD, CDD and Professionalism

On JAOO 2007 I could, with the help of Floyd, organize a debate between Bob Martin and James Coplien about TDD and DbC. This is the most interesting debate about the subject I’ve ever heard of. A lot of things I wanted to say have been said here. And I am proud to announce it :)

http://www.infoq.com/interviews/coplien-martin-tdd

Thanks Cope, thanks Bob.

 

October 11, 2007

Religion driven industry: buzzwords and checklists vs. thinking and inspection

This post has been originally posted on infoQ on Religion driven industry: buzzwords and checklists vs. thinking and inspection

James O. Coplien has recently argued that today’s industry is based on buzzwords and checklists. The use of some techniques and methodologies, TDD for instance, has become “a religious issue”. This prevents from inspecting possible tradeoffs and focusing on finding solutions that would be the most appropriate and the most cost-effective . (more…)

September 29, 2007

Design Driven Testing: Using tests as specifications of system’s invariants and contracts design

Filed under: Agile Programming, Conferences, Domain Driven Design, JAOO, Uncategorized — Sadache @ 4:44 pm

I just got back from JAOO2007. One session of the conference was James Coplien’s “Scrum Architecture”. After this session, a discussion took place about Coplien’s statement that “TDD harms your architecture”! This discussion continued afterwards as an Open Spaces debate. I had the chance then, with the help of Floyd Marinescu, to organize a filmed debate at InfoQ’s studio between Bob Martin and James Coplien on the same topic. I really enjoyed this debate which really showed a high quality spirit of discussion from both sides. Both had their arguments. I will not tell my opinion but rather let you judge yourself once the video is out on www.InfoQ.com .

Recently, I posted about the fact that I always write tests before code, but I don’t do Test Driven Development where I discussed the way I view testing. Yet I don’t guess I’ve been clear enough, so I decided to write few lines trying to better reflect the way I view a testing approach.

When I have a domain problem at hand, first what I think about is partitioning and abstraction, which means dividing the domain into sub-domains. This partitioning procedure is not driven by any tests, but rather by domain knowledge acquired from domain experts. This is extremely important; the architecture/design should reflect the domain/sub-domain problem it is trying to solve. This helps the software be flexible adopting business changes, as it was designed from a business perspective. A book that explains very well this approach is Eric Evans’s Domain Driven Design.

This Up-Front analysis is not defining the full up-front architecture, far from it, rather defining good bases for an architecture that maps to business. It shouldn’t take much time, just enough to help going forward with an iterative approach. This should define, either in code or in a tinny UML sketch, an object structure that forms the basic sub-domain’s components.

After defining the main structure of the sub-domain’s solution, I follow an iterative process as follows:

1: Driven by the business knowledge crunching, I define a component’s contract with its invariants and conditions

2: I write a test that forms the specification of this contract and its invariants

3: I start the implementation to satisfy the specifications I defined in the test

A very important note here is that the contract specifications should be readable, very clear and explicit. This explicitness helps to have a better vision of the whole system while reading the contracts-invariants of its defined components. This also helps spot bugs without the painful debugging: this approach of Design by Contract reflects developers understanding of the business domain in a more explicit way, so it makes it easier to spot misjudgments developers might have done in their implementation. This intention revealing method of development highlights important business rules, rather than letting them hidden behind an abstraction. Abstractions should not hide any important business concern as an implementation details. Explicit contracts and invariants allow business experts to have a look on what is going on inside the software. For an example of bugs that result from developer’s misjudgment see Reganwald’s recent post .

Of course unit tests are not the best tools for this approach. They work fine if we emphasize on methods and class naming for readability and visibility of invariants and rules. Still I prefer tools like BDD or Eiffel/Spec# Design by Contract. Hope we will have some more support for such tools in the industry soon.

A metaphor James Coplien used to illustrate the problem in Test Driven Development approach, which made sense to me, is a test driven course in a school. It’s about a teacher that finds that most of his students fail in the final test. So to make things work better, he decided to ask the students to write themselves their tests by the beginning of the semester, and then to let them pass these tests by the end of that semester! Hence, they might get better grades, but that doesn’t mean they got better knowledge at all.

 

September 20, 2007

My schedule for JAOO 2007

Filed under: Conferences, JAOO — Sadache @ 8:52 am

It is always a hard choice for such an interesting conference, I scheduled my first day, still couldn’t decide about some session. I’ll be trying to make some sort of live coverage with my laptop :) as I did for QCon2007

Monday  Agility on the Edge  Five Things I Wish I Learned In College  Real-World Ruby  Solution Track: Virtualization for Developers  The .Net Road  The Programming Experience
09:00 - 10:00

Opening Keynote: Clean Code II: Craftsmanship and Ethics.

Track host: Robert C. Martin

10:00 - 10:30

Break

10:30 - 10:45 Introduction: Agility on the Edge
Aino Vonge Corry & Track host: Jutta Eckstein
Introduction: Five Things I Wish I Learned in College
Track host: Erik Meijer
Introduction: Ruby
Track host: Glenn Vanderburg
Virtualization at JAOO
Steffen Grarup
Introduction: . Net
Trackhost: Joe Hummel, PhD
Introduction: The programming experience
Track host: Markus Völter
10:45 - 11:00

Break

11:00 - 12:00 Refactoring Databases: Evolutionary Database Design
Pramod Sadalage
A Programming Language for the New Web
Shriram Krishnamurthi
JRuby: The Beauty and Power of Ruby on the JVM
Charles Nutter & Thomas Enebo
Crash course on Virtualization & Virtual Appliances
Rene W. Schmidt
Writing Domain Specific Languages in Boo
Oren Eini
Intentional Software - Democratizing Software Creation
Henk Kolk & Charles Simonyi
12:00 - 13:00

Lunch

13:00 - 14:00 Organically Agile
Klaus Marquardt
Tales From The Financial Industry
Lennart Augustson
What makes code beautiful? (And why beauty matters)
Marcel Molina Jr
Virtualization for Software Test and Development
Steven Kishi
Ajax on .NET: Microsoft Ajax Extensions for ASP.NET
Trackhost: Joe Hummel, PhD
Erlang - software for a concurrent world
Joe Armstrong
14:00 - 14:30

Break

14:30 - 15:30 Experiences with Agility in the Mainframe Environment
Jan Mütter
Property based testing with Quviq QuickCheck
Thomas Arts
Ruby in the Enterprise - A Case Study
Justin Gehtland
LiquidVM - Better Resource Control and More Efficient Java in a Virtualized World
Mikael Vidstedt
Testing Data Access code pragmatically
Roy Osherove
Scala: Bringing the Future to the JVM
Lex Spoon
15:30 - 16:00

Break

16:00 - 17:00 Global - Yet Agile - Software Development
Track host: Jutta Eckstein
Executable Grammars
Gilad Bracha
Ruby and the Art of Domain Specific Languages
Rich Kilmer
Debugging hard bugs using Record/Replay technology
Gustav Wibling
Information cards and .Net - Cardspace
René Løhde
Developing Software like a band plays Jazz - From Eclipse to Jazz
Erich Gamma
17:00 - 17:15

Break

17:15 - 18:15 Agile Retrospectives: Inspecting and Adapting In Challenging Environments
Diana Larsen
Beautiful Debugging
Andreas Zeller
Mingle: Building a Rails-Based Product
Neal Ford
Virtualization: TBA (5)
Speakers: TBA
An introduction to Spring.NET
Mark Pollack
Terracotta: Open Source Network-Attached Memory and JVM-level Clustering
Jonas Bonér
18:15 - 18:30

Break

18:30 - 19:30

Party Keynote: Charles in Space

Charles Simonyi

19:30 - 20:00

Exhibitor Reception

20:00 - 23:59

JAOO Conference Party

Tuesday  Architecture Quality (day 1)  Enterprise Application Frameworks (day 1)  LINQ  Modeling  Scrum At JAOO2007  Solution Track : Tuesday  Web 2.0
Host Frank Buschmann Eberhard Wolff Mads Torgersen Rebecca Wirfs-Brock Jeff Sutherland Beat Schwegler
09:15 - 10:00 Democratizing the Cloud Track host: Erik Meijer
10:00 - 10:30 Break
10:30 - 10:45 Introduction: Architecture Quality (day1) Track host: Frank Buschmann
Location: Conference Hall
Introduction: Enterprise Application Frameworks (day 1) Track host: Eberhard Wolff
Location: SAS Nortvegia
Introduction: LINQ Speakers: TBA
Location: SAS Dania
Introduction: Design and Modeling Track host: Rebecca Wirfs-Brock
Location: Conference Hall 3
Introduction: Scrum at JAOO Track host: Jeff Sutherland
Location: Conference Hall 2
Spring SpaceCraft Shay Banon Introduction: Web 2.0 Track host: Beat Schwegler
Location: SAS Suecia
10:45 - 11:00 Break
11:00 - 12:00 Architecting for Software Product Lines Jan Bosch
Location: Conference Hall
Painless Persistence with Castle ActiveRecord Hamilton Verissimo & Oren Eini
Location: SAS Nortvegia
The .NET Language Integrated Query (LINQ) Framework Luca Bolognese
Location: SAS Dania
Models that work: When Model Engineering Meets Open Source Jean Bezivin
Location: Conference Hall 3
Planning in Large Companies Hubert Smits
Location: Conference Hall 2
JBoss - The professional Open Source SOA Platform Michael Martinsen Building Rich Internet Applications for the Browser and the Desktop with Flex and AIR Christophe Coenraets
Location: SAS Suecia
12:00 - 13:00 Lunch
13:00 - 14:00 Managing Variability in Product-Lines Track host: Markus Völter
Location: Conference Hall
Leveling Persistence and State Management Technologies with Spring Track host: Eberhard Wolff
Location: SAS Nortvegia
C# 3.0 under the hood Track host: Mads Torgersen
Location: SAS Dania
Strategic Design Eric Evans
Location: Conference Hall 3
Implementing Type C Scrum in different corporate models Evan Campbell
Location: Conference Hall 2
Inside JavaBlackBelt John Rizzo Building Large Applications with GWT 1.4 Rajeev Dayal
Location: SAS Suecia
14:00 - 14:20 Break
14:20 - 15:20 Complexity Management Klaus Marquardt
Location: Conference Hall
Active Record - Easy Living on the Golden Path Chad Fowler
Location: SAS Nortvegia
LINQ to XML Track host: Erik Meijer
Location: SAS Dania
Things your mother didn’t tell you about architecture and GUIs Trygve Reenskaug
Location: Conference Hall 3
Scrum Architecture Jim O. Coplien
Location: Conference Hall 2
The Heretic’s View of Java Persistence Mike Fuller From HTML to XUL, Web to Desktop Shane Caraveo
Location: SAS Suecia
15:20 - 15:40 Break
15:40 - 16:40 Variability (and) Modeling Krzysztof Czarnecki
Location: Conference Hall
Grails: Next Generation Spring plus Hibernate Development Graeme Rocher
Location: SAS Nortvegia
Using LINQ to SQL to Access Relational Data Luca Bolognese
Location: SAS Dania
The Adaptive Object-Model Architecture: Giving users control over their business model Joseph Yoder
Location: Conference Hall 3
Scrum@British Telecom Geoff Watts & Paul Goddard
Location: Conference Hall 2
CruiseControl Track host: Erik Dörnenburg & Chris Read JavaFX Speakers: TBA
Location: SAS Suecia
16:40 - 16:55 Break
16:55 - 17:55 The Symphonia Product-Line Wolfgang Strunk
Location: Conference Hall
JCR in the Real World Alexandru Popescu
Location: SAS Nortvegia
LINQ for Domain Driven Design (DDD) Kim Harding Christensen & Jimmy Nilsson
Location: SAS Dania
Muddle-Driven Marketecture or Model-Driven Tarchitecture? Cris Kobryn
Location: Conference Hall 3
Heartbeat Retrospectives Boris Gloger
Location: Conference Hall 2
Using the public Danish SOA Infrastructure Speakers: TBA The Overlooked Power of JavaScript Track host: Glenn Vanderburg
Location: SAS Suecia
17:55 - 18:05 Break
18:05 - 18:50 Sun Keynote Matt Thompson
18:50 - 19:00 Break
19:00 - 21:00 JAOO IT-Run
21:00 - 23:00 Jam Session

 

Wednesday  Architecture Quality (day 2)  Enterprise Application Frameworks (day 2)  Professional Developer  Public Sector Open Source  Scrum at JAOO: Case Studies  Scrum: Open Space Discussions  Solution Track: Wednesday
Host Frank Buschmann Erik Doernenburg Bob Martin Mogens Kühn Pedersen TBA Facilitator: Diana Larsen & Jens Østergaard
09:00 - 09:15 Introduction: Architecture Quality (day2) Track host: Frank Buschmann
Location: Conference Hall
Introduction: Enterprise Application Frameworks (day 2) Track host: Erik Dörnenburg
Location: SAS Nortvegia
Introduction: Professional Developer Track host: Robert C. Martin
Location: Conference Hall 3
Introduction: Public Sector Open Source Mogens Kühn Pedersen
Location: SAS Dania
Introduction: Case Studies Speakers: TBA
Location: Conference Hall 2
Introduction: Open Space Speakers: TBA
09:15 - 09:30 Break
09:30 - 10:30 Operational Scalability in the Next-Gen-Web World Wayne Fenton
Location: Conference Hall
MonoRail: Building Maintainable & Testable Web Applications Hamilton Verissimo & Oren Eini
Location: SAS Nortvegia
With Economy and Elegance Kevlin Henney
Location: Conference Hall 3
Developing and Sustaining Local Authority Applications through Aingaran Pillai
Location: SAS Dania
Scrum@Planon Erik Jaspers & Maarten Smeets
Location: Conference Hall 2
Open Space (1) Speakers: TBA ServiceMix 4.0, the next generation ESB Guillaume Nodet
10:30 - 11:00 Break
11:00 - 12:00 Fault Tolerance Robert S. Hanmer
Location: Conference Hall
Choosing the right technology for the web-tier Alef Arendsen
Location: SAS Nortvegia
The Journeyman’s Tale Laurent Bossavit
Location: Conference Hall 3
OSS Electronic Health Care Records; Vista in Denmark Martin Sølvkjær
Location: SAS Dania
Scrum@Telenor Peter Johansson & Arne Ahlander
Location: Conference Hall 2
Open Space (2) Speakers: TBA Infragistics Speakers: TBA
12:00 - 13:00 Lunch
13:00 - 14:00 Performance Art Kevlin Henney
Location: Conference Hall
Ruby on Rails - ActionPack Justin Gehtland
Location: SAS Nortvegia
The Ethics of Error-Prevention Michael Feathers
Location: Conference Hall 3