in

 

AgileJoe

Answering all world issues with, "...it depends..."

October 2007 - Posts

  • Model Driven Architecture

    I was really excited to read about Microsoft's recent exploration into the MDA arena!  This is something I have been wanting for quite sometime but I am very hesitant to get too excited.  Microsoft has a tendency to create bloat ware and this may kill the tool from being adopted (Think Rational Rose).

     

    If it works as Microsoft envisions it, model driven development would bridge the gap between business analysts and IT and deliver on the SOA promise to align application development with business needs.

    I can definitely speak from experience on this subject that it does definitely bridge the gap between all stakeholders.  The key is to not look at MDA like failed attempts of the past that have attempted to capture the architecture in a model.  The reason these attempts failed is because they took a Waterfall approach to creating software, where the model was the technical spec on which the development team was expected to produce software.  This model proved to be like all specification documents, useless, by the time the development team actually coded the system.  For one, the models where created by analyst who had no clue about software engineering!  They believed that if it looked good on paper then it must work this way in the code.

    Utilizing a Model driven approach to creating software in an Agile environment forms a synergistic bond between  stakeholders.  Story cards are great but models speak volumes to elucidating greater concepts about the domain that may have been overlooked otherwise.  In an Agile environment the models are never complete. 

    • They evolve with the software as you move from iteration to iteration. 
    • They are not a contract but a mere representation of thoughts and ideas to a domain solution. 
    • Modeling sessions participants are facilitated by a modeler who has very good soft skills in communicating the architecture as it relates to the domain (Always a developer)! 
    • The Product owners take an active role, in that they drive the session at is relates to the business domain. 
    • The Testers use the model the gain an understanding on testing strategies they will use to validate the domain against the code. 

    From a modeling session you can easily decompose a business domain into manageable stories and you have a working reference from where the stories originated from if you need to come up with a strategy on how the implement the story.

    I have been thinking of an idea for pursuing yet another OSS tool around modeling and this just kick starts that even more.  More to come on that later.

  • Please Welcome Evan Hoff!

    <humor>

    We wanted to bring a little southern hospitality to Los Techies but we couldn't find anyone and settled for Evan Hoff.  j/k

    </humor>

    All kidding aside Evan brings a fun spirited point of view on vast array of pragmatic topics.  I look forward to his post and lively debates.  Let the fun begin!

    Welcome Evan!

    Posted Oct 21 2007, 11:10 PM by Joe Ocampo with no comments
    Filed under:
  • Curious, What does your day look like?

    I am just curious about all these great post I see coming from many of you.  How do you all (Texans ya'll) find the time?

    My typical day.

    • 5:30 Wake-up kids, and family
    • Snooze till 6:15 (I need all the beauty rest I can get!) 
    • 7:15 Take kids to school
    • 7:30 Drop off kids
    • 8 - 8:15 Get to Work
    • 8:30-6:30PM I am at work (some where in there I manage to eat lunch)
    • 6:30 - 8:00 (I am at my daughters cheerleading, Sons chess club or what ever else he is doing)
    • 7:00 - 8:00 Eat dinner with family if time permits and talk about their day.
    • 8:00 - 9:30 spend time with the family
    • 9:30 put kids to bed
    • 9:30 - 10:30 Spend time with Wife.  (Yeah, one whole hour LOL)
    • 10:30 - 2-3 AM Code and catch up on blogging.  (If wife permits) :-)

    I am curious for those with commitments outside of work how does one find time.  I myself some how manage to squeak in 10 minutes here and there on a post but I am curious how the rest of you all pull it off.

    Posted Oct 20 2007, 05:57 PM by Joe Ocampo with 6 comment(s)
    Filed under:
  • Please Welcome Jimmy Bogard!

    It was a long hard fight with a lot of hair pulling and sacrificing small dogs(not really) but please help me Welcome Jimmy Bogard to Los Techies!  

  • RE: BDD and Requirements Traceability - Oh No, Not Again

    This is a response to Scott Bellware’s recent post on “BDD and Requirements Traceability - Oh No, Not Again”

    It is true that we are inevitably doomed to repeat our past mistakes if subsequent generations are unaware of the travails of its previous generation, and requirements traceability is one form of Gen -1 travail that that I hope doesn't get accidentally revived by this generation's league of speculative scientists.

    Seeing that I am one of the principle contributors to NBehave, I love that I can now dawn a lab coat and refer to myself as a “Speculative Scientist”. I say that tongue and cheek of course but my profoundness in my assertions of traceable requirements are in part based on my experience with (twitching in my seat) Rational Rose in the 90’s!

    I am one of the idiots that were forced to use this monolithic monstrosity from hell to draft requirements (getting shortness of breath), UML documents and code that magically map to each other. Forget that it took a systems administrator 4 hours to lock on unlock requirements. Forget that when you reverse engineered the code back into the model that it broke the last 6 hours of modeling that had occurred. Forget that towards the end of the project you ended up decoupling the (coughing) traceability and said “$@&% it, let’s just code and get this darn thing done!” As you can tell I am little bitter about the whole experience.

    I will say this. My entire professional career has been brought up in Government and Enterprise level development. I have had to deal with more regulatory flack over the last 14 years then I would care to talk about, yet here I am still in the hot seat. You might ask, “Why are you still there if you can’t stand it?” The short answer is

    “Because I believe that despite regulatory or bureaucratic issues that arise in these arenas, I know software can be done right!”

    This is why I am firmly committed to evangelizing pragmatic approaches to developing software at the enterprise level.

    I don’t think just because we have failed in the past means that we shouldn’t revisit the present and learn from those mistakes.

    >I never want to go back to a context where traceability is seen by my organization as a reasonable course of action.

    Neither do I which I why I am creating policy to insure that this does not happen. I know that in the past organizations have been tainted by the proverbial blame game that occurs through traceability.

    In dealing with Financial Enterprise systems it is imperative that business decisions are traced through code because of security and regulatory related issues of changing pricing or loan payment amount algorithms. These have serious implications if policy and procedures are not followed (take for instance the plot of Office Space.) So we have two opposing mindsets. Produce tons of documentation to track these changes? Or Find a way to make the process light weight and uninvasive.

    I want to go on the record that NBehave was never intended to solve traceability issues. I simply saw this tool as well, just that, a tool that can help me the corporate AVP, deal with traceability issues in the most simplistic way possible.

    Traceability in financial enterprise systems is seen as a comfort indicator from an executive board level of insuring that business requirements have been followed and nothing has been injected that falls outside the boundary of essential, needed or exposure. They can safely go to our shareholders and check off one out of the 50 oversight constraints that it takes to deliver software to production.

    I want to caution people that are reading this entry that if you are not in an enterprise level arena or for that matter if you are. You should still exercise the most simplistic means of developing software. By that I mean start off with index cards if they work for you use them. If they don’t evaluate your process, see if you need greater understanding or a new tool.

    >We don't use stories as a way to talk about why some feature didn't turn out the way a customer expected.

    I agree. Why a story didn’t turn out a certain way is usually the result of not understanding the acceptance criteria. I am simply proposing, rather than creating a whole new story card, simply go back to the story and revise it with the customers till it meets their expectations. It is not a contract it is simply a reference point for communication.

    I also find that RallyDev, VersionOne and Target Process have all built models around Agile Project Management where the focus is about documenting the story in an electronic medium that can be tracked. In an enterprise environment these tools are essential in communicating with distributed teams on projects.

    > This aspect of confrontational team process is part of what traceability is often concerned with.

    Traceability can be used in this manner but for that matter anything can. I have witnessed several times where developers, analyst etc. argued with the product owners, story card in hand over implicit behavior that wasn’t meeting their expectations. The standard argument is that the story didn’t have any of those details. I am not saying that their behavior was in line with embracing change but people are people. So no this is not what I am intending traceability to solve. That aspect is all about managing people.

    > Traceability is theoretically also concerned with compliance and auditing, but in practice, traceability between user stories and code rarely serves compliance and auditing concerns to a greater extent than it hampers the primary customers of stories - the cross-functional team building the software application.

    Possibly but I have not read any empirical evidence to support either side of the issue.

    > Payments to the bureaucratic ferryman should be made outside of the project's main line of operational efficiency.

    I'm not saying that we should avoid bureaucratic and regulatory pressures. I'm saying that we are called to find the right layer within which to encapsulate those kinds of processes. The team needs to be aware of regulatory issues, but they need to be supported through workflows other than those whose aims see to the satisfactory accountability to customer requirements for features and functionality - even features and functionality that directly serve compliance concerns.

    I couldn’t agree with you more. In fact I feel it is absolutely impossible to practice Agile in the enterprise environment unless you do just that. I call this the Agile Project Management Façade layer. This layers acts as an anti corruption layer between traditional oversight and Agile processes. The difficult part is that concerning traceability or Software Engineering Development oversight, the façade layer sometimes leaks! I am sure I could find a way to somehow satisfy the traceability issues at this layer and have it not affect the development team but I am afraid it will come at a cost of man power or increased bureaucracy.

    UPDATE: Apparently I am not the only person calling this a managment facade layer. D. P. Bullington uses this term as well.

    I am not about to disturb the atmosphere in the lab or the department for that matter at the expense of an idea or tool. If the tool (NBehave) proves to be a failure I will know early on since we practice one week iterations. So the loss will be marginal at best.

    It is important to point out that I have not implemented NBehave in my organization (yet). I don’t think it is there yet. It solves certain issues but it creates new ones. I have proved that it can work with certain individual but I agree with Scott that we shouldn’t expect a product owner to learn how to code. That is why I am really excited about Jeremy Millers proposal to integrate Story Teller with NBehave. I believe it we can come up with an external DSL that compliments Story cards and acceptance testing that this will be of enormous value to the community at large.

    I want everyone to understand that this debate only deals with Automated Requirements and Tracebility. It does not have any bearing on BDD. Think of this issue as a distant cousin to BDD.

  • Reinstalled Firefox -- What add-ons do you use?

    I recently had to reinstall Firefox and was wondering what (other than the add-ons listed below) add-on's everyone else is using?

    I personally use this as my standard add-on image.

    image

    Posted Oct 13 2007, 07:59 PM by Joe Ocampo with 13 comment(s)
    Filed under:
  • Resp: Why ALT.NET?

    perception_vase Perception!

    I am sure all of us have heard that perception is 9/10th the rule. Unfortunately perception is what tainted the name Alt.Net.

    <humor>

    The community at large has seen this movement as gathering of elite programmers to form a secret society that is trying to crush the Microsoft software development world.

    </humor>

    I am not implying that this how you feel Collin just my perception :-) over the couple of post I have read over the last day or so.

    >You'd be bringing your ideas to a whole new audience instead of, and I realise this is a generalisation, preaching to the converted.

    This could not be further from the truth. As a community we realize the VALUE that all of the engineering practices add to the community but you know what? People aren't listening. We have tried for the past 4-6 years to convey these practices but as a community (Alt.Net) we aren't being very effective. Hence the confusion surrounding all these initiatives.

    Enter the Alt.Net conference.

    • How as a community of passionate developers can we come together and figure out how to adequately convey these awesome software engineering practices to the development community as a whole.
    • How can we come together and figure out even amongst ourselves what these engineering practices are so we don't interrupt each other&#x2019;s progress.
    • And last how as a community can we show people how to do this using the Microsoft technologies that have grown to love.

    This forum allowed each of us that are passionate about these concepts to better refine our ideals, constructs and practices in being a professional developer, so that we can better serve the community at large.

    It is not a movement so much as it is a refinement of practices as an overall community.

    My anguish is in the derogatory perception that is surrounding the Alt.Net moniker.

    As a community of developers that just want to do what is right and share what we do, we have to do a better job at not propagating the stereo type of what Alt.Net community members are (There are a lot of do's in there). Classic example of this can be found on Sam Gentiles blog.

    Like all great things it is going to take time, patience and a lot of laughter. :-)

    Rome was not built in a day. But everyone had a great tan!

  • Alt.Net conference and Behavior Driven Design

    Today at the Alt.Net conference we discussed Behavior Driven Design. The debate was heated and there were varying opinions on “What is BDD?” and how to implement it. What I am worried about is that I think we did more harm than good with this session in bringing awareness to the .Net community regarding BDD.

    The discussion on BDD utilized a Fish Bowl style forum. The issue that I saw from the onset is the bowl was too small for the amount of people that wanted to jump in.

    What I wanted to get out of the meeting was consensus on what does BDD mean to the .Net community. I think one of my mistakes in this discussion was to introduce NBehave at the beginning of the discussion and not focus on what BDD is and why you should use it over TDD.

    The NBehave framework introduces a Narrator assembly that exposes a Story type for the collection of Agile stories. The contention point is should you do this? Don’t get me wrong debate is a wonderful medium to bring change and churn new ideas but it comes at a cost. The cost in this scenario was focus. I feel that a majority of the participants in this forum left confused and well frankly unimpressed, I can’t blame them.

    NBehave brings about a radical evolution of TDD and blurs the line between Acceptance Testing and traditional TDD. The inclusion of the Story Narrative was looked at as a high contention point and not applicable to all development contexts. This was the cultivating reason why we decided to break up the project into these 3 discrete assemblies.

    • NBehave.Spec <This contains the specification assertion framework a.k.a. NSpec>
    • NBehave.Narrator <This contains the fluent Story type constructs >
    • NBehave.Runner <One console runner to run them all>

    So if the Story types aren’t applicable to your given development context don’t use them. Use the NBehave.Spec instead. But it doesn’t have to stop there. You can apply a BDD mindset to your current test fixtures now as I have explained here.

    My passion for BDD isn’t gone it is simply bruised. I think given the right facilitation, that the ideas and constructs of BDD can make a huge impact in the .Net community. And for those that attended the Alt.Net conference I apologize for the lack of clarity on the subject.

  • Off to the Alt.Net Conference

    I am really excited about the Alt.Net conference this weekend.  If anything it will give me a chance to meet a lot of my blog roll in person. 

    Expect allot of blog entries when I get back.

    Posted Oct 05 2007, 09:58 AM by Joe Ocampo with no comments
    Filed under:
  • NSpec merges with NBehave!

    I am pleased to announce that Tim Haughton has agreed to join his NSpec project with NBehave!

    So what does this mean for you the developers? Well it means that you have one OSS project team supporting multiple BDD frameworks for the .Net framework! Think of it more as a centralized project for the many facets of BDD in the .Net community.

    But Joe I have invested allot of time in setting up my NSpec test. Not to worry. We are firmly committed to giving the community options!

    What we have done is break up the NBehave project into the following assemblies.

    • NBehave
      • NBehave.Spec <--This is basically the core NSpec assertion framework
      • NBehave.Performer <--Contains the fluent interface behavior constructs and references NBehave.Spec (Think JBehave)
      • NBehave.Narrator <-- Contains the story builder fluent interface and leverages NBehave.Performer and NBehave.Spec
      • NBehave.Runner <-- Global console runner capable of running any test that uses Spec, Performer, or Narrator.

    This is really great because now we get to utilize our own assertion framework in the creation of all these new projects (as seen below). Which is essence should create a better framework for everyone.

    using System;
    using NBehave.Spec.Framework;
    using System.IO;
    
    
        
    namespace NBehave.Runner.Console.Specifications
    {
     [Context]
     public class ParseGoodArgumentsSpec
     {
     const string assemblyName = "NSpec.Console.exe";
     const string xmlFileName = "Bob.xml";
     const string txtFileName = "Bob.xml";
    
    
        
     const string assemblyArg = "/assembly:" + assemblyName;
     const string outputArg = "/output:" + xmlFileName;
     const string behaviourOutputArg = "/behaviourOutput:" + txtFileName;
    
    
        
     Arguments args;
    
    
        
     [SetUp]
     public void Setup()
     {
     string[] argArray = new string[] { assemblyArg, outputArg, behaviourOutputArg };
     args = Arguments.Parse( argArray );
     }
    
    
        
     [Specification]
     public void ShouldParseAssemblyFileName()
     {
     Specify.That( args.Assembly ).ShouldEqual( Path.GetFullPath( assemblyName ) );
     }
    
    
        
     [Specification]
     public void ShouldParseOutputFileName()
     {
     Specify.That( args.Output ).ShouldEqual( Path.GetFullPath( xmlFileName ) );
     }
    
    
        
     [Specification]
     public void ShouldParseBehaviourOutputTextFileName()
     {
     Specify.That( args.BehaviourOutput ).ShouldEqual( Path.GetFullPath( txtFileName ) );
     }
     }
    
    
        
     [Context]
     public class ParseBadArgumentsSpec
     {
     const string badArg = "badstring";
     Arguments args;
    
    
        
     [SetUp]
     public void Setup()
     {
     args = Arguments.Parse( new string[] { badArg } );
     }
     
     [Specification]
     public void ShouldReturnNull()
     {
     Specify.That( args ).ShouldBeNull();
     }
     }

    This also allows the developers to utilize different aspects of BDD. You can use NBehave.Spec.Framework for you lower level testing and for your Story and Behavioral Domain test you can use NBehave.Narrator.Framework. Look at how by simply adding the Spec framework increased the readability of the Narrator Story framework (see below).

    using System;
    using NBehave.Narrator.Framework;
    using NBehave.Spec.Framework;
    
    
        
    namespace TestAssembly
    {
     [Theme("Account transfers and deposits")]
     public class AccountSpecs
     {
     [Story]
     public void Transfer_to_cash_account()
     {
     Account savings = null;
     Account cash = null;
    
    
        
     Story transferStory = new Story("Transfer to cash account");
    
    
        
     transferStory
     .AsA("savings account holder")
     .IWant("to transfer money from my savings account")
     .SoThat("I can get cash easily from an ATM");
    
    
        
     transferStory
     .WithScenario("Savings account is in credit")
     .Given("my savings account balance is", 100,
     delegate(int accountBalance) { savings = new Account(accountBalance); })
     .And("my cash account balance is", 10,
     delegate(int accountBalance) { cash = new Account(accountBalance); })
     .When("I transfer to cash account", 20,
     delegate(int transferAmount) { savings.TransferTo(cash, transferAmount); })
     .Then("my savings account balance should be", 80,
     delegate(int expectedBalance) { Specify.That(savings.Balance).ShouldEqual(expectedBalance); })
     .And("my cash account balance should be", 30,
     delegate(int expectedBalance) { Specify.That(cash.Balance).ShouldEqual(expectedBalance); })
    
    
        
     .Given("my savings account balance is", 400)
     .And("my cash account balance is", 100)
     .When("I transfer to cash account", 100)
     .Then("my savings account balance should be", 300)
     .And("my cash account balance should be", 200)
    
    
        
     .Given("my savings account balance is", 500)
     .And("my cash account balance is", 20)
     .When("I transfer to cash account", 30)
     .Then("my savings account balance should be", 470)
     .And("my cash account balance should be", 50);
    
    
        
     transferStory
     .WithScenario("Savings account is overdrawn")
     .Given("my savings account balance is", -20)
     .And("my cash account balance is", 10)
     .When("I transfer to cash account", 20)
     .Then("my savings account balance should be", -20)
     .And("my cash account balance should be", 10);
     }
    We haven't released a stable build just yet but if you want to take a look at the root you can. Simply navigate to:

    del.icio.us Tags: ,
  • Is your IDE looking kind of dull? Tired of the same colors?

    Well then I have the place for you.  Ok used car salesmen pitch over.  I stumbled across this site IsYourIDEHot that has allot of preconfigured color schemes to try. 

    Note: I wasted an hour of my life looking at this site and trying the various color scheme. In the end I gave up.  :-)

    Posted Oct 03 2007, 11:40 PM by Joe Ocampo with 1 comment(s)
    Filed under:
  • Does this mean we can patch the .Net Framework?

    In an interesting move Microsoft opened portions of the .Net Framework source code to the development community.  You will be able to seamlessly debug into the lower innards of the framework provided you have Visual Studio 2008 installed.

    I wonder does this mean that the community can now submit patches against the framework?  If they do this will be an awesome move as the framework becomes centrally managed but community owned.

    What are your thoughts?

  • Why every developer needs a MacBook Pro?

    MacOver the past couple of week I have been debating of why I should NOT by a Mac.  In the past before Apple moved to the Intel chipset, I saw Macs as more of a overpriced graphics workstation with a niche market targeting people who wear black turtlenecks and frequent coffee shops.I was under the impression that they really did not have any viability in making it into the mainstream development arena.

    Now a year later and the climate has changed.  Lets see, now I can use a MacBook as my primary OS, install Fusion and run Linux and Windows seamlessly as a virtual OS.  So in one machine I can develop and target 3 specific platforms. 

    If I want to develop in Java and test my build on 3 different OS's not a problem I have the machine to do it.  If I want to develop a Microsoft SilverLight project and insure that it works on Windows, Macs and Linux not a problem I have a Mac.  Developing a web site well ... I don't have a case for this one.

    Quality and performance of the OS aside.  From a practicality stand point why wouldn't I invest in buying a Mac ? It just doesn't make sense.

    What are your thoughts?  Are you ready to wear a turtleneck.  I already love coffee shops, so I am half way their.  :-)

    Posted Oct 03 2007, 11:48 AM by Joe Ocampo with 13 comment(s)
    Filed under:
Copyright Los Techies 2007. All rights reserved.
Powered by Community Server (Commercial Edition), by Telligent Systems