<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Software Engineering</title>
        <link>http://geekswithblogs.net/smitcham/category/6994.aspx</link>
        <description>Software Engineering</description>
        <language>en-US</language>
        <copyright>Steven Mitcham</copyright>
        <managingEditor>smitcham@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Framework Blues</title>
            <link>http://geekswithblogs.net/smitcham/archive/2008/01/10/framework-blues.aspx</link>
            <description>Being an ultra-introvert, it always freaks me out when a comment I make brings me out from under the radar.&lt;br /&gt;
&lt;br /&gt;
I &lt;a href="http://tech.groups.yahoo.com/group/altdotnet/message/812"&gt;posted on the alt.net list&lt;/a&gt; to a thread concerning the pro's and cons.  Jeremy Miller &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/01/09/do-you-even-need-to-build-your-own-cab.aspx"&gt;posted an opinion&lt;/a&gt; on my comment, and I followed up with a comment on the post.&lt;br /&gt;
&lt;br /&gt;
As a reflection on all that,  I'd like to say that I think that in priciple I'm inclined to agree with Jeremy.  In practice, I'm stuck with the Framework that led to the post.&lt;br /&gt;
&lt;br /&gt;
I believe that my ideas of what a 'Framework' should be is changing.  Jeremy talks about code generation and the templates and IDE productivity stuff, but I think that I'm going a different route myself, although it wouldn't be the first time I was wrong.&lt;br /&gt;
&lt;br /&gt;
What I've been currently trying to do, with the help of the language enhancements (anonymous delegates, generics, lambda expressions, etc.) is get libraries of limited scope reusable objects that can be modified through the use of generics and delegates to perform instance specific work.&lt;br /&gt;
&lt;br /&gt;
What I am working on right now involves a ton of reuse,  many of our systems are basically made up of building blocks that are identical in specification.  Our framework involved creating blocks of reusable objects, along with the rules of validation, that could be dropped into place.&lt;br /&gt;
&lt;br /&gt;
For the first round of systems (which were almost identical), this worked very well; however, as more less similar systems were included, the framework started to show strain.  My original point was that the framework would have been able to be adapted or evolved into a better form, except that the development contracts were written in such a way as to preclude any further development on the system in question (a bad choice by program management).  Once we finally got the money in place to make updates to the framework, the enhancements are stretching the capabilities of the framework.&lt;br /&gt;
&lt;br /&gt;
One of the biggest issues I've had recently was to try to convince a team not to use the system for a project that didn't fit well with the design intent with the framework, and they suffered exactly the fate that Jeremy mentions in his post and would have been better off starting from scratch. &lt;img src="http://geekswithblogs.net/smitcham/aggbug/118439.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steven Mitcham</dc:creator>
            <guid>http://geekswithblogs.net/smitcham/archive/2008/01/10/framework-blues.aspx</guid>
            <pubDate>Thu, 10 Jan 2008 18:46:12 GMT</pubDate>
            <comments>http://geekswithblogs.net/smitcham/archive/2008/01/10/framework-blues.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/smitcham/comments/commentRss/118439.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/smitcham/services/trackbacks/118439.aspx</trackback:ping>
        </item>
        <item>
            <title>A missing piece to CMMI</title>
            <link>http://geekswithblogs.net/smitcham/archive/2007/10/30/A-missing-piece-to-CMMI.aspx</link>
            <description>&lt;p&gt;I've been working in organizations that adhere to some level of the CMMI for some time now.  And we are trying to fit what we can of agile programming into our process, and hopefully are achieving better results while still keeping the structure required of our contracts.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;A long time ago I ran across this article which discusses some of the levels of process that are often encountered in the wild, but rarely discussed by SEI.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So here's the &lt;strong&gt;&lt;a href="http://www.stsc.hill.af.mil/crosstalk/1996/11/xt96d11h.asp"&gt;The Capability Im-Maturity Model (CIMM)&lt;/a&gt;&lt;/strong&gt; as envisioned by Capt. Tom Shorsch USAF.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/smitcham/aggbug/116457.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steven Mitcham</dc:creator>
            <guid>http://geekswithblogs.net/smitcham/archive/2007/10/30/A-missing-piece-to-CMMI.aspx</guid>
            <pubDate>Tue, 30 Oct 2007 16:27:07 GMT</pubDate>
            <comments>http://geekswithblogs.net/smitcham/archive/2007/10/30/A-missing-piece-to-CMMI.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/smitcham/comments/commentRss/116457.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/smitcham/services/trackbacks/116457.aspx</trackback:ping>
        </item>
        <item>
            <title>Jeff Answers My Unit Test Question</title>
            <link>http://geekswithblogs.net/smitcham/archive/2007/10/24/Jeff-Answers-My-Unit-Test-Question.aspx</link>
            <description>Earlier Jeff Brown posted some &lt;a href="http://blog.bits-in-motion.com/2007/10/constructor-dependency-injection-in.html"&gt;comments &lt;/a&gt;on some new features of MbUnit v3, which I responded to by how to answer the NUnit critics concerning isolation of test fixtures.&lt;br /&gt;
&lt;br /&gt;
Jeff &lt;a href="http://blog.bits-in-motion.com/2007/10/but-xunit-book-says.html"&gt;responded &lt;/a&gt;with what I think is a pretty good answer.  I'll have to think it through for a bit.&lt;br /&gt;
&lt;br /&gt;
I believe that my original question was not so much a question of the validity of the approaches, but that after reading the book, I found that I had not considered the original issue of isolation via new test fixture classes.&lt;br /&gt;
&lt;br /&gt;
I started with NUnit as my first experience and not JUnit, so the set and tear down mechanisms were just 'what was' rather than what should be.&lt;br /&gt;
&lt;br /&gt;
As I've said in my other posts,  I am often constrained by decisions made from outside my organization and the choice of unit testing framework is no different so having the best arsenal of responses to the unavoidable battles for these types of choices is a good thing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt; &lt;img src="http://geekswithblogs.net/smitcham/aggbug/116299.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steven Mitcham</dc:creator>
            <guid>http://geekswithblogs.net/smitcham/archive/2007/10/24/Jeff-Answers-My-Unit-Test-Question.aspx</guid>
            <pubDate>Wed, 24 Oct 2007 18:34:58 GMT</pubDate>
            <comments>http://geekswithblogs.net/smitcham/archive/2007/10/24/Jeff-Answers-My-Unit-Test-Question.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/smitcham/comments/commentRss/116299.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/smitcham/services/trackbacks/116299.aspx</trackback:ping>
        </item>
        <item>
            <title>Why half implementations of TDD don't work</title>
            <link>http://geekswithblogs.net/smitcham/archive/2007/09/12/Why-half-implementations-of-TDD-dont-work.aspx</link>
            <description>Currently I'm in the process of reviewing some code that was written and then had MbUnit tests written to back flush the requirements.  Since I'm part of a more traditional shop, the code has already been peer reviewed.  The tests, of course, revealed errors in the code that weren't caught as a part of the peer review; so the code was corrected and re-reviewed.  Of course, when the tests were reviewed, the tests were found to have errors, which precipitated further changes.&lt;br /&gt;
&lt;br /&gt;
I addressed the approach we are using to fix this effect (although the fix won't be perfect due to the limitations of our process) in the post &lt;a href="http://geekswithblogs.net/smitcham/archive/2007/08/20/Making-the-most-of-traditional-peer-reviews.aspx"&gt;How to make the most of traditional peer reviews&lt;/a&gt;. &lt;img src="http://geekswithblogs.net/smitcham/aggbug/115303.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steven Mitcham</dc:creator>
            <guid>http://geekswithblogs.net/smitcham/archive/2007/09/12/Why-half-implementations-of-TDD-dont-work.aspx</guid>
            <pubDate>Wed, 12 Sep 2007 13:26:32 GMT</pubDate>
            <comments>http://geekswithblogs.net/smitcham/archive/2007/09/12/Why-half-implementations-of-TDD-dont-work.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/smitcham/comments/commentRss/115303.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/smitcham/services/trackbacks/115303.aspx</trackback:ping>
        </item>
        <item>
            <title>Infragistics Pain</title>
            <link>http://geekswithblogs.net/smitcham/archive/2007/09/06/Infragistics-Pain.aspx</link>
            <description>It is entirely possible for something to have too many features.&lt;br /&gt;
&lt;br /&gt;
In response to a question from a co-worker, we spent approximately 2 hours digging through the options and model structure of the Infragistics UltraGrid control to discover the way to get the bound rectangle of a row for a drag operation.&lt;br /&gt;
&lt;br /&gt;
While I get the desire for everything to be super customizable, at some point it seems like overkill. &lt;img src="http://geekswithblogs.net/smitcham/aggbug/115197.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steven Mitcham</dc:creator>
            <guid>http://geekswithblogs.net/smitcham/archive/2007/09/06/Infragistics-Pain.aspx</guid>
            <pubDate>Fri, 07 Sep 2007 02:59:38 GMT</pubDate>
            <comments>http://geekswithblogs.net/smitcham/archive/2007/09/06/Infragistics-Pain.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/smitcham/comments/commentRss/115197.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/smitcham/services/trackbacks/115197.aspx</trackback:ping>
        </item>
        <item>
            <title>Solid build process</title>
            <link>http://geekswithblogs.net/smitcham/archive/2007/08/22/Solid-build-process.aspx</link>
            <description>&lt;p&gt;Experiences today have made me realize how important a solid build process is.  I spent 6 hours today trying to get a development environment in a virtual machine to build the source to a component that I needed to help debug.  The actual debugging session has taken less than five minutes and will probably take only about another 30 minutes tomorrow.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/smitcham/aggbug/114910.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steven Mitcham</dc:creator>
            <guid>http://geekswithblogs.net/smitcham/archive/2007/08/22/Solid-build-process.aspx</guid>
            <pubDate>Thu, 23 Aug 2007 04:36:24 GMT</pubDate>
            <comments>http://geekswithblogs.net/smitcham/archive/2007/08/22/Solid-build-process.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/smitcham/comments/commentRss/114910.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/smitcham/services/trackbacks/114910.aspx</trackback:ping>
        </item>
        <item>
            <title>Making the Most of Traditional Peer Reviews</title>
            <link>http://geekswithblogs.net/smitcham/archive/2007/08/20/Making-the-most-of-traditional-peer-reviews.aspx</link>
            <description>&lt;font face="Arial"&gt;
&lt;p&gt;In the traditional waterfall development process, one of the key pieces of quality assurance is the traditional peer review. In theory, peer reviews allow additional coders to view the code and hopefully discover issues before the make it into the release of the software. &lt;/p&gt;
&lt;p&gt;Unfortunately, in practice,  the reviews do not really add meaningful value to the development process.  Typically, the reviews are done near the end of development, and are almost always superficial in nature.  The first few files in the review get a decent treatment, but quickly the effort turns to just validating the coding standard and perhaps finding some examples of the reviewers pet issues. In an effort to reduce this tendency, often limits are imposed to the number of files, or number of lines that can be placed in a review, but that only adds the additional overhead of more reviews.&lt;/p&gt;
&lt;p&gt;My team is currently involved in a very large coding effort and our peer reviews are encountering the same kind of symptoms.  In an effort to improve the situation, I've been moved to make the following suggestion in how to deal with peer reviews in the future.  Some of the remedy involves borrowing techniques from agile development to help focus the point of the reviews.  It is possible that something similar can be done without the use of the agile methods, but I believe that the method described is a good mix of the traditional and the agile.&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;strong&gt;The Steps&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;First, it is important not to review things that are better reviewed by a machine.  We are creating a gateway procedure that uses the tools available to us to eliminate the common, clerical findings that clutter up most peer reviews.  The starting point is using a tool, such as Resharper, to assist in getting the code into the standard format.  Also, tools are used to measure complexity as well as check against basic coding standards.  We are currently using the Static Analysis function in Visual Studio Team Developer Edition.  Finally, we have implemented the requirement for executable unit tests (in MbUnit) that are passing and have at least 85% coverage. By letting the peer review moderator ensure that the code has been run through these tools first, and that the code is passing a basic level of quality before involving more than one other &lt;/font&gt;&lt;font face="Arial"&gt;person in a review.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Once the review is allowed to go foward, the 'peer review' is actually divided into two parts.  The first review&lt;font face="Arial"&gt; takes the set of unit tests and matches them against the requirements.  The purpose of this review is two-fold,  to ensure that all the requirements have been satisfied, and to ensure that as written, each test actually tests what it says it does.  The code the unit tests are executing is not reviewed at this time.  &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Given that the units test are passing (we would hope), then if the requirements map to the tests and the tests test what they say they do, we have a level of confidence in the code under test.  Additionally, if a problem is found with the requirements, or the tests, then we know that it is fruitless to continue with the rest of the review cycle.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;After the review of the unit tests is complete, and any findings in the tests have been worked through the codebase, then we proceed with a review of the code itself.  Because of the earlier steps, the reviewers understand the requirements and have reviewed the tests which should give them a basic understanding of what they are actually reviewing.  Additionally, because all the clerical noise and basic 'correctness' has been dealt with via tools and the earlier reviews, the reviewers are free to examine the more important (and more difficult to automate) issues of maintainability, and hard to find errors such as memory leaks. &lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt; In the pilot projects where we have run this process all the way through, we are seeing additional benefits from our code reviews.&lt;/p&gt;
&lt;/font&gt; &lt;img src="http://geekswithblogs.net/smitcham/aggbug/114810.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steven Mitcham</dc:creator>
            <guid>http://geekswithblogs.net/smitcham/archive/2007/08/20/Making-the-most-of-traditional-peer-reviews.aspx</guid>
            <pubDate>Mon, 20 Aug 2007 18:12:23 GMT</pubDate>
            <comments>http://geekswithblogs.net/smitcham/archive/2007/08/20/Making-the-most-of-traditional-peer-reviews.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/smitcham/comments/commentRss/114810.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/smitcham/services/trackbacks/114810.aspx</trackback:ping>
        </item>
    </channel>
</rss>
