août 28

 eXtreme .NET

Introducing eXtreme Programming Techniques to .NET Developpers

By Dr. Neil Roodyn


Find it on Amazon

Summary of the editor

'At last, somebody has introduced eXtreme Programming techniques to the world of .NET! Through enjoyable writing and tons of hands-on exercises, Dr. Neil explains how to use the best techniques from eXtreme Programming to vastly improve developer productivity within the .NET Framework.'

--George Bullock, Program Manager, Microsoft Corporation

eXtreme .NET shows developers and team leaders how to incorporate eXtreme Programming (XP) practices with .NET-connected technologies to create high-quality, low-cost code that will build better software. This practical, realistic guidebook systematically covers key elements of XP methodology in the specific context of the Microsoft .NET Framework, Visual Studio .NET, Visual C#, and related Microsoft .NET-enabled applications.

Leading .NET and XP mentor Dr. Neil Roodyn covers planning, task definition, test-driven development, user interfaces, refactoring, spiking, pair programming, and much more. Dr. Neil offers field-proven advice for everything from automating builds to integrating third-party libraries. He also incorporates valuable exercises and presents a start-to-finish case study that shows exactly how XP and Microsoft .NET interoperate throughout an entire development project. Coverage includes

  • Where to start if you've never used XP or other Agile methods before
  • Pair programming: Turning .NET programming into a collaborative game
  • Test-Driven development: Making sure your .NET code works as intended while it's easiest to fix
  • Refactoring: Organizing your .NET code to improve flexibility and enable changes more readily
  • Continuous integration and automated build/test: Enhancing quality in distributed, component-based systems
  • Spiking: Using rapid experimentation to validate your expectations about behavior in the .NET Framework
  • The importance of customer input to successful projects
  • How to test .NET user interfaces and third-party libraries

The Microsoft .NET Framework is today's most productive development platform. XP represents a fundamental breakthrough in building higher-value software. Combine them: transform your team into an eXtreme .NET team that can accomplish more than ever before. This book will show you how--starting with your very next project.

Dr. Neil Roodyn has been actively involved with eXtreme Programming since 1999, and founded Sydney's eXtreme Programming Activity Club (SyXPAC). He has helped drive the adoption of the .NET Framework in Australia through his work as a project leader, consultant, instructor, and mentor. His clients have ranged from Microsoft to Rogue Wave and he has helped launch several software startups. Dr. Neil holds a Ph.D. from University College London where he specialized in software architectures for real-time systems.

My criticsm and comments

It was more than 2 years I was working in an XP team when I read this book. As a consequence, I was already having my habits (whatever they were good or wrong) and my team was working in a smooth way, living on its certainties. We had learned XP, clearly adopted it, and for sure adapted it.

It's also a long time that I implement design patterns. I usually adapt them or combine them so they better stick to my functionnal and implementation need. However, I like to go back regularly to the GOF to re-read the theory of the pattern(s) I want to put in place. What for? Just to get back to the definition and to appreciate more in detail any delta I was thinking to do. After that, maybe I will not change my implementation idea but at least I had been focused on all differences between my idea and the theory, and had forced myself to wonder why I was thinking to do that or that change. It helps me doing my job in a more clever way, letting me ask the "Why" towards my solution.

I see this book in the same way. It has allowed me (forced me?) to go back to the definitions, and most of all to the definitions given thru examples. Clearly, it made me look deep at each step of our XP stack to see what we were doing, if it was working good or not, if such or such difference was needed or not. It does not mean that we have drastically changed everything after that but clearly the interrogation is the first step to do before taking actions, and these examples gave me some directions where I wanted to go.

How does it work in practice? The author present us a small XP team: a few (named) characters having all their own personality and domain of competence : from the client, including the expert, to the stressed guy seeing insurmountable difficulties in all places. (Come on, we have all met a guy like this. Maybe yours won't scream "Panic !!" each time, but it will for sure tell very often "Gonna be hard", "It's not won in advance" or "I have no idea of how we can do that". Please... just come with positive mood, and with solutions... It's in moment like that, that I like the most the Shaddock philosophy...)

We are following this team among all the phases of a project development: analysis, development, refactoring, spiking, planning game, ... Each "act" will be described with some team dialogue, to put these personnages in action. And in most of the parts, some exercices and code example really place us as privileged spectators, in the center of the arena.

A sentence to remember?

Two in fact. First of all this book reinforce the fact that XP (and agile methodologies in general) will better fit to a team composed of mature developpers, with solid notions of simple design and conceptions. Did I said simple? This is the other fact I like to mention when I can.

"Simple does not mean easy. Developpers who are starting out often misinterpret this as "Do the easiest thing you can possibly do." This is incorrect; simple is often a lot harder to achieve than complicated. [...] The switch statement is easier to write, but the polymorphism provides a simpler solution."

The last word? This is an easy reading book, done in a clever way, didactic and fun, but highly serious at the same time. A "must-read" book to place in the hand of all XP team (beginners or not) and to be seen as an external third-eye. My only real criticism? Well... it has not been read by all of my team members. But can we really blame the author?

Want to find more about the books I have read ? Go to my bookshelf to find the few criticism I have already made !

Tags:
août 28

A few time ago, I have decided to publish some about the books I read. Of course, I won't speak about old books, but I will try to do so for the most interesting one I will read from now.

In that goal, I have added a link "Books" on the left part on the website where you will get the list of the books I'm reading, with a link to amazon, and a link to the post where I have done my criticism. If you have also some exciting reading you would like to share, do not hesitate to send me information !

Tags:
août 27
While I was redesigning my website, I have been working a lot with CSS and this make me discover some selectors I was knowing in CSS.

Let's start with an example

To better understand what selectors are used to, let's start with a simple HTML page, like for instance :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

   <title>Page for CSS selectors</title>

 

   <link rel="stylesheet" href="style.css" type="text/css" />

</head>

<body>

   <div>

      <input type="text" id="InputId" /><br />

      <input type="text" id="Prefix_InputId" /><br />

      <input type="text" id="InputId_Suffix" /><br />

      <input type="text" id="Prefix_InputId_Suffix" /><br />

      <input type="text" id="someOtherId" title="I have a title" /><br />

   </div>

</body>

</html>

This HTML page reference a basic CSS file: "style.css".

Let's now modify this file to see how this is modifying the output.

Selector testing :

input

{

   background-color: Aqua;

}

Apply to all Input elements

input[id="InputId"]

{

   background-color: Red;

}

Apply to all Input elements, having the id attribute equal to "InputId"

input[title]

{

   background-color: Green;

}

Apply to all Input elements, having the an attribute "title"

input[id^="InputId"]

{

   background-color: Gray;

}

Apply to all Input elements, having the id attribute starting with "InputId"

input[id$="InputId"]

{

   background-color: Fuchsia;

}

Apply to all Input elements, having the id attribute ending with "InputId"

input[id*="InputId"]

{

   background-color: Silver;

}

Apply to all Input elements, having the id attribute containing "InputId"

As you can see, in many case, the syntax is inspired by the regex standard notation. There are some more selectors, but those ones shall already allow you to catch any of your HTML elements and so will give you the opportunity to apply your CSS styles.

Tags:
août 26

It's quite a while I'm unsatisfied with my website:

  • not enough place for posts
  • not correctly displayed on some widely used browsers
  • some pages not displayed correctly (archive for example)
  • some pages being displayed in a static way

Well many reasons that motivate me to take some time to redesign it. Even if it was implying to stop my other works in progress for a while. And here it is !

Basically if the colour theme remain unchanged, this new look shall answer to all the previous criticism and thus give a more pleasant reading to you. Do you have any comment or criticism, feel free to comment on that, and I will see how I can answer to your demands !

Happy reading !

août 08

Hello all !

I have been working for quite a long time on this tool and it's time to publish a first official release. What is it for ? What do I need to install it ? How do I configure it ?

All the information is available after the installation in the Documentation folder. And also online (as a pdf) at http://users.skynet.be/fa242154/Downloads/Jarod.Instrumentation.pdf. However, you will find hereafter some clues about this soft.

You can download the sofware here.

What do I need to launch it ?

  • The .NET Framework 3.5
  • Excel 2007

What is it for ?

This tool is what I call a "metric grabber". There is already many existing tools on the market that provides metrics as for instance NDepend, Visual Studio itself, NCover, the Reflector's addins, Source Monitor, ... However they get information from a single source : their own calculation engine and at a single moment.

My need was different and I started from the following observation: as a developper / project manager, we are having many potential sources of metrics : a source control, a continuous integration engine, some classical code metric tools, task / bug tracking system, ...

I want to grab metrics from different sources, and aggregate them in a single tool to provide me with clear figures and charts.

Moreover, for a specific metric, the source itself is not that important. If tomorrow, I get rid of Team Foundation Server to go to Cruise Control.NET, I will still have the same need of metric, but I will just have another source. This should be as transparent as possible. For instance, I wanted to implement what I was needing for my .NET team and give the tool to my company's JAVA team so they could develop a simple new metric source as easily as possible.

A few key features ?

  • 3 metrics availables for now, with various metric providers
    • Evolution of the duration of the build, compared to the evolution of the number of tests
      • One provider is dedicated to dealing with Team Foundation Server 2005
      • Another wil deal with Team Foundation Server 2008
      • A last one will just give dummy data for testing purposes
    • Evolution of the code coverage during the different builds
      • One provider is dedicated to dealing with Team Foundation Server 2005
      • Another wil deal with Team Foundation Server 2008
      • A last one will just give dummy data for testing purposes
    • Snapshot of the distribution of the Cyclomatic Complexity
      • One provider will use the Reflector's addin : CodeMetrics
      • Another one will give dummy datas
  • You can easily configure the sources
  • You can choose at runtime which metric you want to display and which source / provider you want to use
  • You can easily configure the texts and chart size
  • You can easily develop your own provider for any of the previous metric in only a few line of code, and plug it to the tool at no cost (via configuration) !

Some screenshots ?

(Click on each thumbnail to enlarge it)

 

 The graph showing the evolution of the build duration (in blue) compared to the evolution of the number of tests.

You can parameter different tresholds to specify which builds you want to see appearing on this graph

   The graph showing the average duration of a single tests. A lienar trendline (in black) will help analysing the direction of the project
 

 Some data of the Code Coverage metric : global and individual percentage.

Some conditional formatting will help finding quickly the trend and some code coverage problems.

 

 The graph displaying the evolution of the overall code coverage.

Another graph will also show the individual code coverage evolution.

 

 The graph showing the distribution of the cyclomatic complexity among the methods.

You can also see in red the line of slope "-2" which is the empiric limit between projects trening to simplicity (below) or trending to complexity (above).

What's next ?

Well I will continue developping it for myself and my team. Some of my future objectives are:

  • Adding some new metric generation
  • Adding some other provider for the existing metrics so my colleague using CruiseControl or any Java tool could use them
  • Simplifying the internal design to be able to add faster any provider or metric
  • Extracting the display engine : no all of us are using Office 2007. This is a strong prerequisite. If I could decouple the display engine to let the user choose what he wants to use, this tool coule also be used more abroad. I'd like to target Excel 2007 and a WPF standalone application

But in the meanwhile, I'm waiting for you ! Please try this tool, blog on it, comment on it, criticize it. I will react to any comment and see how I can take them into account for a next version !