Development Workflow Using Reef 
        Click on parts of the diagram for an explanation of Reef's workflow, or start with  Step 1.  
      
        The Developer 
        A developer is anyone who edits the source code of the object-oriented 
        application. Reef is most suitable for small to medium-size, 
        co-located or distributed teams following an agile 
         development process 
        with little up-front design. Reef initially supports Java 
        applications and UML design diagrams, but could be adapted to work in 
        other settings.  Within those constraints, Reef follows 
         adoption-centric principles by adapting to the developer's preferred 
        tools and workflow.  
      
        The Code Repository 
        A code repository holds versions of the source code and other resources 
        that punctuate the evolution of the application. Initially, Reef 
        supports file system and CVS stores, but can be extended with other 
        version control system adapters.  
      
        Reef's Back-End System 
        Reef's back-end runs a continuous autonomic control loop on the server, 
        regularly checking the  
        repository for changes, publishing updated
         documentation, and interacting 
        with team members through  diagram 
        agents. It stores data in an embedded  
        XML database and accepts plug-ins at well-defined extension points.  
      
        A UML Diagram Agent 
        UML diagrams are rendered in SVG 1.2 and pack their own 
         browsing and
         editing 
        facilities (programmed in  ECMAScript). Since they are self-contained, 
        requiring only an SVG viewer to be displayed, they can be transmitted 
        freely to and edited by any interested parties without worrying about 
        installing a special-purpose diagramming tool. The agents can operate in 
        both on-line and off-line environments, automatically tailoring their 
        features and communication techniques.  
      
        Application Documentation 
        The documentation set generated by Reef cross-references the 
        design-level diagrams with implementation-level descriptions (e.g. 
        Javadocs) and possibly the source code itself. The documentation also 
        includes a variety of metrics related to the source code, the diagrams, 
        and the development and documentation process.  (For example, it 
        would be possible to see which diagrams are most in need of 
        ratification, or who has been remiss in their documentation duties.)  
      
        
        Step 1: Commit the Source Code 
        The developer commits some changes to the application's source code to 
        the repository, using their favourite tool, unaffected by (and possibly 
        even unaware of) Reef. It is advantageous if the commits follow 
        best practices by including an appropriate message and being applied in 
        small, cohesive chunks, but Reef will adapt to less disciplined 
        approaches as well.  
      
        
        
        Step 2: Update the Design Diagrams 
        When Reef detects that the application's source code has changed in the 
        repository, it checks out an up-to-date version and, by means of
         reverse-engineering techniques, propagates the 
        modifications to the 
        application's design model. The update process is incremental, so 
        that reasonably sized commit sets can be 
        handled quickly even for large applications. Furthermore, updates to the UML diagrams 
        extrapolate previous adjustments made by the editors (see
         Step 4) 
        to reduce their workload, and do not unnecessarily change the layout of 
        the diagram to 
        preserve the readers' mental map of the design.  
      
        
        
        Step 3: Request Diagram Ratification 
        Any UML diagrams that have sustained non-trivial changes are sent by 
        Reef to the appropriate editors with the changes highlighted.
        Email is the preferred transport mechanism, due to its features (e.g., 
        authentication, off-line availability) and universal cognitive support, 
        with instant messaging, RSS and manual web page polling rounding out the 
        picture. By default, a diagram is sent to the developer 
        responsible for the majority of the relevant changes, but the recipient 
        can delegate the responsibility by forwarding the message to somebody 
        else. Whoever finally ratifies the diagram becomes its editor and 
        is implicitly added to the development team, thus enabling a viral 
        spread of the tool. If the diagram is not ratified for a long time, Reef 
        may decide to resend the request to the same or another editor.  
      
        
        
        Step 4: Ratify the Design Diagrams 
        Editors fix the diagrams and ensure that they provide an accurate and 
        useful representation of the application. Human involvement is necessary 
        since some design-level properties are diffused beyond recognition in 
        the implementation, making them unrecoverable by automated 
        reverse-engineering techniques. Furthermore, an editor makes important 
        decisions about what to elide from the diagrams to maximize their 
        communicative value. To make the editor's job easier, the diagram 
        indicates any reverse-engineered changes and links them to commit set 
        comments and ultimately to the source code. Any edits can also be
         amplified, teaching Reef by 
        example how to improve future diagrams. When the editor is satisfied 
        with the diagram, he ratifies it and submits it back to Reef.  
        Although ratifying a diagram should only take a few minutes, the editor 
        can also delegate the task (see  
        Step 3), postpone it, or obsolete the diagram altogether.  
      
        
        
        Step 5: Publish the Documentation 
        As ratified diagrams pour back into Reef's back-end, they are embedded 
        into the application's documentation and published to a web server. Team 
        members are notified of updates to diagrams (if so requested), enabling 
        them to track the evolution of the application at a higher level of 
        abstraction than the raw repository change logs would, increasing the 
        team's awareness.  
      
        
        Step 6: Browse the Documentation 
        At any time, team members can browse the application's documentation. 
        All documentation is cross-referenced, so there's no need to decide  a 
        priori whether implementation or design documentation is relevant to 
        the problem at hand. The ratified UML design diagrams are time-stamped 
        and version-stamped, so that developers can be confident they're not 
        stale; if the browser is running in on-line mode, a diagram can even 
        report how well it matches the current source code. Finally, all the 
        diagrams are still self-editable, so readers can make opportunistic 
        corrections if so authorized.  
       |