<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>VSTS 2010 (Codename Rosario)</title>
        <link>http://geekswithblogs.net/UlteriorMotiveLounge/category/9118.aspx</link>
        <description>Microsoft does UML, and The UML Guy shows you what's ahead.</description>
        <language>en-US</language>
        <copyright>Martin L. Shoemaker</copyright>
        <managingEditor>Martin@TheUMLGuy.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>All right, Mr. DeMille, I'm ready for my close-up</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/26/all-right-mr.-demille-im-ready-for-my-close-up.aspx</link>
            <description>&lt;p&gt;Back in January, &lt;a target="_blank" href="http://www.brianhprince.com/"&gt;Brian H. Prince&lt;/a&gt; from Microsoft interviewed me about the UML features in Visual Studio Team System 2010. Today, he informed me that &lt;a target="_blank" href="http://channel9.msdn.com/shows/ARCast.TV/ARCastTV-Martin-Shoemaker-discusses-UML-in-VSTS2010/"&gt;the interview is finally live on Channel 9&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132437"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132437" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/132437.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/26/all-right-mr.-demille-im-ready-for-my-close-up.aspx</guid>
            <pubDate>Tue, 26 May 2009 23:58:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/132437.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/05/26/all-right-mr.-demille-im-ready-for-my-close-up.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/132437.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Pattern 19. Requirements Archaeology</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/pattern-19.-requirements-archaeology.aspx</link>
            <description>&lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="100%"&gt;
            &lt;h2&gt;Diagnostic Checklist: Requirements Archaeology&lt;/h2&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 70 Your project is to supplement, upgrade, or replace an existing system.&lt;/p&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 30 The existing system is poorly documented, or the documentation is out of date.&lt;/p&gt;
            &lt;p&gt;____ Total&lt;/p&gt;
            &lt;p&gt;&lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/requirements-patterns-and-antipatterns-checklists.aspx"&gt;You can learn how to score the checklists here.&lt;/a&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Problem:&lt;/h2&gt;
&lt;p&gt;The project is to supplement, upgrade, or replace an existing system, which is the &lt;em&gt;de facto&lt;/em&gt; primary source of your requirements.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Context:&lt;/h2&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="60%"&gt;In many organizations, new work has to be done in a context of legacy systems, which embody a wide range of explicit and implicit requirements that customers may overlook. &lt;br /&gt;
            &lt;h2&gt;Forces:&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;Legacy systems represent an investment of capital and time that must be conserved. &lt;/li&gt;
                &lt;li&gt;Legacy systems may not be well documented or well understood by the current customer. &lt;/li&gt;
                &lt;li&gt;The team that built the legacy system may no longer work in this organization.&lt;strong&gt;&lt;/strong&gt; &lt;/li&gt;
            &lt;/ul&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="40%"&gt;
            &lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="100%"&gt;
                        &lt;p align="center"&gt;&lt;font color="#000080" size="5"&gt;&lt;strong&gt;Legacy systems represent an investment of capital and time that must be conserved.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Solution:&lt;/h2&gt;
&lt;p&gt;Reverse engineer models (see the &lt;strong&gt;Modeling&lt;/strong&gt; pattern) and specs for the current system, and review those to identify requirements. Then analyze and organize those “uncovered” requirements, and present your results back to your customer as a form of &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/the-echo-effect.aspx"&gt;The Echo Effect&lt;/a&gt;. Be ready for your customer to be surprised, as you reveal features they’ve long forgotten, never known about, or just taken for granted. Listen for them to identify legacy features that they don’t need replicated or supported, and then explore those features to be sure there’s nothing there that other features depend upon.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="60%"&gt;
            &lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="100%"&gt;
                        &lt;p&gt;UML tools that will reverse engineer UML structure include &lt;a target="_blank" href="http://argouml.tigris.org"&gt;ArgoUML&lt;/a&gt;, &lt;a target="_blank" href="http://www.sparxsystems.com"&gt;Enterprise Architect&lt;/a&gt;, &lt;a target="_blank" href="http://www-01.ibm.com/software/rational/uml/products.html"&gt;IBM Rational UML tools&lt;/a&gt;, and &lt;a target="_blank" href="http://www.excelsoftware.com/maca&amp;amp;dproducts.html"&gt;MacA&amp;amp;D&lt;/a&gt;, among others. In their preview of &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vsts2008/default.aspx"&gt;the 2010 version of Visual Studio Team System&lt;/a&gt;, Microsoft has demonstrated powerful UML tools, including the ability to &lt;a target="_blank" href="http://www.theumlguy.com/Videos/RosarioReverseSequence.wmv"&gt;reverse engineer sequence diagrams from source code&lt;/a&gt;. This is a major advance in general purpose reverse engineering, turning what used to be hours of manual work into minutes.&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="40%"&gt;You may be able to rely on mechanical tools to do much of this reverse engineering. Many UML tools, for example, will reverse engineer models from source or from compiled code.&lt;a name="_ftnref1_7587" href="#_ftn1_7587"&gt;[1]&lt;/a&gt; Other tools will reverse engineer and graphically depict database schemas, network layouts, and other elements of existing systems.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;But you need to go beyond such mechanical reverse engineering for two reasons.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;It’s far too coarse, as our archaeology metaphor shows. Imagine the look on an archaeologist’s face if a contractor showed up at a dig site and said, “Hey, I’ll dig up this whole excavation for you. Let me get my bulldozer.” While mechanical reverse engineering isn’t destructive like the bulldozer, it’s not much more discriminating. The bulldozer piles up a great big heap of earth and stone and rubble, while the mechanical tools pile up a great big heap of classes, relations, tables, columns, nodes, and other artifacts. If you don’t sift through the rubble, you really haven’t learned anything. &lt;/li&gt;
    &lt;li&gt;In &lt;a target="_blank" href="http://www.TheUMLGuy.com"&gt;my UML classes&lt;/a&gt;, I teach that UML isn’t about software design, but rather about &lt;em&gt;system&lt;/em&gt; design, where a system is structure with behavior and goals. Well, I’m missing something in that definition: a system is structure with behavior &lt;em&gt;that fulfills some intention&lt;/em&gt;. A good mechanical reverse engineering tool should produce a structural model of a legacy system. Modern tools shed a little light on the behavior model of a system. But only a human reader can produce “intentional” models. A mechanical model captures Functional Requirements at best; but an intentional model captures the User Requirements, Business Requirements, Non-Functional Requirements, Constraints, Actors, and Domain Objects that are represented by the Functional Requirements. (See the &lt;strong&gt;Categorization&lt;/strong&gt; pattern for a discussion of these types of requirements.)&lt;strong&gt;&lt;/strong&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="60%"&gt;
            &lt;p&gt;So certainly &lt;em&gt;start&lt;/em&gt; with mechanical reverse engineering, as much as your tools will allow; but then dig into the resulting models and organize them (a form of &lt;a target="_blank" href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/the-outline-effect.aspx"&gt;The Outline Effect&lt;/a&gt;) to learn what’s in the models. From there, you can create behavioral and intentional models by looking at mechanical models, the user manuals, and the system in operation and then deducing how these fit together.&lt;/p&gt;
            &lt;h2&gt;Resulting Context:&lt;/h2&gt;
            &lt;p&gt;The reverse engineered requirements should serve as a baseline for or input into the requirements for the new system or extensions to the existing system. From there, turn to other patterns as a way to elicit and analyze new requirements.&lt;/p&gt;
            &lt;/td&gt;
            &lt;td valign="top" width="40%"&gt;
            &lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="100%"&gt;
                        &lt;p align="center"&gt;&lt;font color="#000080" size="5"&gt;&lt;strong&gt;Certainly &lt;em&gt;start&lt;/em&gt; with mechanical reverse engineering, as much as your tools will allow; but then dig into the resulting models and organize them (a form of &lt;strong&gt;The Outline Effect&lt;/strong&gt;) to learn what’s in the models.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There must be new requirements, right? You’re not just replacing the existing system for something to do, right? There should be &lt;em&gt;some&lt;/em&gt; reason for replacing it: porting to a new platform, better maintainability, better extensibility, or &lt;em&gt;something&lt;/em&gt;. If you’re just suffering from replacement-itis, you should read &lt;a target="_blank" href="http://www.joelonsoftware.com/articles/fog0000000069.html"&gt;Joel Spolsky’s essay on rewriting&lt;/a&gt;.He makes a good argument for preserving the hard-earned knowledge embodied in legacy systems, and the consequences of replacing working code without a business case.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Discussion:&lt;/p&gt;
&lt;p&gt;See also &lt;strong&gt;Modeling&lt;/strong&gt;, &lt;a target="_blank" href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/the-outline-effect.aspx"&gt;The Outline Effect&lt;/a&gt;, and &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/the-echo-effect.aspx"&gt;The Echo Effect&lt;/a&gt; for patterns that work well with &lt;strong&gt;Requirements Archaeology&lt;/strong&gt;.&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="100%" border="3"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td valign="top" width="100%"&gt;
            &lt;h2&gt;Verification Checklist: Requirements Archaeology&lt;/h2&gt;
            &lt;p&gt;For each pre-existing system or component:&lt;/p&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 1 You have a mechanically reverse-engineered structural model of the component. &lt;/p&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 2 You have a manually reverse-engineered intentional model of the component.&lt;/p&gt;
            &lt;p&gt;&lt;font size="5"&gt;□&lt;/font&gt; 1 You have a presented one or both models to the Customer and received useful feedback.&lt;/p&gt;
            &lt;p&gt;%__ Percentage of requirements which score 4.&lt;/p&gt;
            &lt;p&gt;%__/2 Percentage of requirements which score 3.&lt;/p&gt;
            &lt;p&gt;%__/4 Percentage of requirements which score 2.&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;%____ Total&lt;/strong&gt;&lt;/p&gt;
            &lt;p&gt;&lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/requirements-patterns-and-antipatterns-checklists.aspx"&gt;You can learn how to score the checklists here.&lt;/a&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129119"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129119" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129119.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/pattern-19.-requirements-archaeology.aspx</guid>
            <pubDate>Sun, 01 Feb 2009 19:13:36 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129119.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/02/01/pattern-19.-requirements-archaeology.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129119.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ulterior Motive Lounge Episode 31: The Teams Split Up</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/31/ulterior-motive-lounge-episode-31-the-teams-split-up.aspx</link>
            <description>&lt;p&gt;Continuing &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/07/ulterior-motive-lounge-episode-30-touring-the-laboratories.aspx"&gt;The Project That Time Forgot&lt;/a&gt;, a UML case study in comic strip form... (Click pictures for larger images.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Episode%2031.jpg"&gt;&lt;img title="Episode 31" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="389" alt="Episode 31" width="604" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Episode%2031_5.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;After a long hiatus due to weather, illness, work, conferences, and more stuff than I can explain, the Lounge is back.&lt;/p&gt;
&lt;p&gt;This Episode gets the ball rolling for Act II, so there’s not much new UML content here yet. But I can give you a few diagrams of the team’s review process. The process starts with some preliminaries, then splits into three threads of operations, each with a separate team:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/9138/o_Review%20Process.jpg"&gt;&lt;img title="Review Process" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="432" alt="Review Process" width="604" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Review%20Process_3.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Design Review.&lt;/strong&gt; This team, led by The UML Guy, will create a Design Assessment, summarizing the state of the design and any clear risks and concerns. The details of the Design Review look like this: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img title="Design Review" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="627" alt="Design Review" width="554" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Design%20Review_3.jpg" /&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;ul&gt;
        &lt;li&gt;Review the original design spec to determine the intent of the original team. &lt;/li&gt;
        &lt;li&gt;Review design documents and updates since the original spec. &lt;/li&gt;
        &lt;li&gt;Reverse engineer a design from the code. A good UML tool like &lt;a target="_blank" href="http://www.sparxsystems.com/"&gt;Enterprise Architect&lt;/a&gt; makes this a lot easier, but not easy. &lt;a target="_blank" href="http://www.theumlguy.com/Videos/RosarioReverseSequence.wmv"&gt;VSTS 2010 will make it even easier&lt;/a&gt;, but &lt;em&gt;still&lt;/em&gt; not easy. Incorporate this into a design summary. &lt;/li&gt;
        &lt;li&gt;Review the design with the dev team and revise until it’s ready for presentation. &lt;/li&gt;
        &lt;li&gt;Review the design with the full review team and revise until it’s ready for assessment. &lt;/li&gt;
        &lt;li&gt;Create the design assessment. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;li&gt;&lt;strong&gt;Functional Review.&lt;/strong&gt; This team, led by Geek Girl, will create a Functional Assessment: a description of how well the system performs existing functions, with emphasis on usability and correctness. The details of the Functional Review process look like this: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img title="Functional Review" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="484" alt="Functional Review" width="503" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Functional%20Review_3.jpg" /&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;ul&gt;
        &lt;li&gt;Review the existing requirements docs. &lt;/li&gt;
        &lt;li&gt;Review outstanding defect reports, and make those the beginning of a functional assessment. &lt;/li&gt;
        &lt;li&gt;For each function identified in the requirements, identify actors and user who represent those actors. Interview those users to determine how well the system &lt;em&gt;really&lt;/em&gt; works, and update the functional assessment. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;li&gt;&lt;strong&gt;Requirements Review.&lt;/strong&gt; This team, led by The Reader, will create a Requirements Assessment: a description of what requirements the system covers; and more important, what it &lt;em&gt;doesn’t&lt;/em&gt; cover. The details of the Requirements Review process look like this: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img title="Requirements Review" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="526" alt="Requirements Review" width="509" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/UlteriorMotiveLounge/WindowsLiveWriter/UlteriorMotiveLoungeEpisode31TheTeamsSpl_EA80/Requirements%20Review_3.jpg" /&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;ul&gt;
        &lt;li&gt;Review the existing requirements docs. &lt;/li&gt;
        &lt;li&gt;Assess the quality of the existing requirements. Are they quantified? Are they testable? Are they unambiguously stated in words, diagrams, and tests? Are they assigned business values and priorities? Do they have clearly identified actors and use cases and scenarios and goals for each feature? These and many more questions will help to create the requirements assessment. &lt;/li&gt;
        &lt;li&gt;For each actor represented in the requirements &lt;em&gt;or&lt;/em&gt; discovered during interviews, identify and interview representative users. Determine whether they have missing requirements, as well as whether they know of or require previously unidentified actors. &lt;/li&gt;
    &lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;For a really thorough review, you probably need at least three more threads of activity:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Code Review to inspect the code, either completely or through sampling, to identify how well it’s constructed and maintained. &lt;/li&gt;
    &lt;li&gt;Quality Review to identify Quality Assurance measures, Testing measures, and the status of each. &lt;/li&gt;
    &lt;li&gt;Process Review to analyze the processes followed by the dev team and related teams. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But for simplicity (and to keep most of my focus on &lt;a href="http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/17/requirements-night-at-ulterior-motive-lounge.aspx"&gt;my primary message&lt;/a&gt;), I’m going to restrict this case study to Design, Functionality, and Requirements. Code will be reviewed under Design, and Quality will be reviewed under Functionality. Process will be reviewed everywhere.&lt;/p&gt;
&lt;p&gt;Is this a lot of work? Yep. But it’s a minimal necessary set of activities to review a project for status and risks after you’ve ignored them for a long time. It would be &lt;strong&gt;so&lt;/strong&gt; much easier if you could do these sorts of assessments in real time right from the start as the project proceeds. It would be &lt;strong&gt;so&lt;/strong&gt; much easier if you could report the status and health of the project at the push of a button, based upon the actual work the team does &lt;strong&gt;as they do it.&lt;/strong&gt; Gee, wouldn’t Owner’s life be a lot easier if there were tools to do all that?&lt;/p&gt;
&lt;p&gt;Oh, wait a minute… There &lt;em&gt;are&lt;/em&gt; tools like that! In fact, there’s a whole category of such tools: &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Application_Lifecycle_Management"&gt;Application Lifecycle Management (ALM)&lt;/a&gt;. And my current favorite is the aforementioned &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vsts2008/products/default.aspx"&gt;Visual Studio Team System&lt;/a&gt;, perhaps the most poorly named product Microsoft produces today. Why poorly named? Because &lt;a target="_blank" href="http://msdn.microsoft.com/vstudio/products/"&gt;Visual Studio&lt;/a&gt; is a developer tool set, particularly a tool set for .NET developers; so when people hear a name like “Visual Studio Team System”, they assume it’s a developer tool set, only bigger and better. They assume it’s about .NET development.&lt;/p&gt;
&lt;p&gt;VSTS is &lt;strong&gt;not&lt;/strong&gt; about .NET development. Oh, VSTS includes Visual Studio, and then adds some powerful developer and architect and DBA and tester features; but those features, as powerful as they are, are just the icing on the cake.&lt;/p&gt;
&lt;p&gt;The cake is ALM. VSTS is about your process and how you can define it and design it and manage it and track it, all through tools your team – your &lt;strong&gt;whole&lt;/strong&gt; team, not just .NET developers – are already using. Your Project Managers can create task lists and project plans in Excel or Project. Your developers can work on those plans in Visual Studio – or not! If they’re working with Eclipse or other non-.NET tools, developers can use &lt;a target="_blank" href="http://www.devbiz.com/teamplain/webaccess/default.aspx"&gt;TeamPlain&lt;/a&gt; to access their work items. Testers can create and apply test plans. Executives can view summaries and reports and Key Productivity Indicators (KPIs) through a project Web portal.&lt;/p&gt;
&lt;p&gt;And all of these tools are updated automatically as the team works, in real time, through the Team Foundation Server: a powerful set of databases, reports, services, and tools that integrate with Excel and Project and Visual Studio and Sharepoint and other tools to provide a seamless process involving all participants.&lt;/p&gt;
&lt;p&gt;I didn’t intend this post to turn into an ad for VSTS, so I’ll leave you to explore further if you like. But I can tell you this: even if Owner had known about VSTS, even if he could’ve convinced Cowboy Consultant to look at it, they would’ve turned it down. Owner already balked at spending proper time and money on requirements and design. Cowboy Consultant already demonstrated that he has no patience for anything beyond the code itself. Well, as powerful as VSTS is, it’s not cheap (though I think it’s well cost justified), and it takes time and effort and training to use it properly. They both would’ve written it off as needless overhead, judging by the attitudes we’ve seen so far.&lt;/p&gt;
&lt;p&gt;And those attitudes are going to lead to some mighty big problems pretty soon. Dinosaur sized, even.&lt;/p&gt;
&lt;p&gt;One final note on today’s Episode. You may wonder why Dog is going out into the Park with The Reader and Stick Boy. Well, she’s a dog. She smells things, really interesting things. She wants to investigate, not hang around in some sterile, air conditioned computing center. Dogs gotta be walked, ya know?&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129103"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129103" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/129103.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/31/ulterior-motive-lounge-episode-31-the-teams-split-up.aspx</guid>
            <pubDate>Sat, 31 Jan 2009 06:59:22 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/129103.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2009/01/31/ulterior-motive-lounge-episode-31-the-teams-split-up.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/129103.aspx</wfw:commentRss>
        </item>
        <item>
            <title>"Where do I start?"</title>
            <link>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/where-do-i-start.aspx</link>
            <description>&lt;div class="bvEntry" id="entrycns!B4665B67C2981533!133" bv:cns="cns!B4665B67C2981533!133" bv:ca="true" bv:cat="UML Tip of the Day"&gt;
&lt;div class="bvMsg" id="msgcns!B4665B67C2981533!133"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Friends and family claim I have an annoying habit of answering a question with a question. They think I'm being difficult, and they think the answer I deserve is a kick in a tender spot. But I have a reason: I’m convinced that the answer to most useful questions is: It depends. The best answers depend not just on the question, but on the context. &lt;/p&gt;
&lt;p&gt;So when people ask me “I want to learn UML, where do I start?”, my answer is, “Where are you stopped?” Well, OK, my &lt;em&gt;first&lt;/em&gt; answer is, &lt;a href="http://www.theumlguy.com/Default.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;"My UML Applied Class."&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; But after I make the obligatory shameless plug, I have to know where your current project is. UML is a communications tool, not a technology, so it's useful across the complete application lifecycle; but different diagrams are more generally useful at different stages of the lifecycle.&lt;/p&gt;
&lt;p&gt;In the UML Applied classes, we'll start with use cases, which is a great place to start at the onset of a project. If you just can't get started writing code because no one is sure what to write, use case diagrams will help you to capture user requirements and communicate them to stakeholders for feedback. Draw an actor, add use cases for that actor, and then add collaborating actors or related information for each use case. Repeat for each actor and use case until everyone agrees that you've identified the significant tasks that users must perform.&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH: 540px; HEIGHT: 483px" alt="Stable Use Cases" src="http://www.theumlguy.com/Images/Stable%20Use%20Cases.gif" /&gt;&lt;/p&gt;
&lt;p&gt;If you're trying to learn and extend an existing, unfamiliar system, you might want to start by creating a component diagram that shows the existing components and the interfaces through which they communicate. From there, you can determine where your new code will fit within this architecture. You can also use these diagrams to plan out entirely new architectures.&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH: 539px; HEIGHT: 389px" alt="Stable Component Diagram" src="http://www.theumlguy.com/Images/Stable%20Components.gif" /&gt;&lt;/p&gt;
&lt;p&gt;Or you might start with a broader scope: a deployment diagram that shows where within a network the existing components are deployed. Again, you might also use these to plan a brand new deployment architecture. &lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH: 540px; HEIGHT: 341px" alt="Stable Deployment Diagram" src="http://www.theumlguy.com/Images/Stable%20Deployment.gif" /&gt;&lt;/p&gt;
&lt;p&gt;Yet another way to learn existing code is to read the code and create sequence diagrams. A sequence diagram shows how parts of the code call other parts of the code to carry out user requirements. To learn how a particular user input -- say, a button click -- is processed, start with a lifeline that represents the form where the button click occurs. Read the button handling code, and add a self-message that describes any code within the handler. When the handler calls a method of another object, add a lifeline for that object, and then add a message from the form to the object, and label it with the method name. Repeat until you have diagrammed the entire handler. And then repeat for each call and method you have added, until you have a detailed view of how the handler works and how it collaborates with other objects.&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH: 540px; HEIGHT: 301px" alt="Stable Sequence Diagram" src="http://www.theumlguy.com/Images/Stable%20Sequence.gif" /&gt;&lt;/p&gt;
&lt;p&gt;I should add: &lt;a href="http://www.theumlguy.com/Videos/RosarioReverseSequence.wmv"&gt;the upcoming Visual Studio Team Systems 2010 (codename Rosario) will reverse engineer sequence diagrams straight from code!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Our final example today is when you're trying to understand or plan out the user interface flow of a system. For that, I like to use state diagrams, with each state representing one page within the user interface.&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH: 540px; HEIGHT: 362px" alt="Stable State Diagram" src="http://www.theumlguy.com/Images/Stable%20State.gif" /&gt;&lt;/p&gt;
&lt;p&gt;By no means are these the only ways to start using UML. You name a diagram type, and I'll tell you about a time where I started work with that diagram. But these are the ones I start with most often. I hope they'll help you get started, too.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127060"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127060" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/UlteriorMotiveLounge/aggbug/127060.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martin L. Shoemaker</dc:creator>
            <guid>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/where-do-i-start.aspx</guid>
            <pubDate>Sat, 15 Nov 2008 21:10:19 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/UlteriorMotiveLounge/comments/127060.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/UlteriorMotiveLounge/archive/2008/11/15/where-do-i-start.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/UlteriorMotiveLounge/comments/commentRss/127060.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>