Solien’s software development process methodology includes elements of the Microsoft Solutions Framework, as well as other industry best practices, and is intended to be flexible and broad enough to apply to a variety of software development projects. This process may be adapted to include alternatives that are beneficial to the project, including agile practices, depending on the parameters of the particular project.
Solien’s emphasis on project management encompasses all project phases described below. We employ Microsoft Project as our primary tool for creating and tracking schedules and budgets. In addition, a combination of Microsoft Sharepoint Portal Server and our proprietary DevTrak intranet project management application provides timesheet, defect tracking, priority setting, threaded discussion, document management, meeting coordination, and reporting capabilities that allow us to quickly and easily disseminate information throughout the project team.
Perhaps most importantly, our project management approach incorporates the ethic that our work is not complete until our client is satisfied. Toward this goal, we maintain frequent client communication through regularly scheduled and ad hoc meetings, as well as status reports.
The planning phase of a project includes the key “upstream” areas of requirements development, quality assurance planning and architecture. A thorough planning phase is of key importance to the overall health of a project. This is illustrated in the image below and through industry research that shows an error in the planning phase, such as a requirements or architecture error, may cost 50-200 times as much to correct late in the project as it does to correct close to the time in which it was originally made. Requirements Development
Requirements Development consists of gathering, specifying and analyzing requirements. This phase should include direct communication with end users whenever possible. It may also include User Interface (UI) prototyping and development of a style guide. Because UI is so fundamental to the flow of the application, changes to the UI can lead to dramatic design changes in the underlying software. Thus, UI is a critical element of requirements development. Depending on the complexity of the project, prototyping may be extended to demonstrate functionality.
The final deliverable from this phase is requirements documentation, which includes use cases as well as system and other non-user requirements. Use cases are an exceptionally important deliverable from this phase, as they are the basis for both end-user documentation as well as functionality test cases. Use cases are simply a convenient way to describe the functionality of a system from the perspective of the people who will use that system. Each use case specifies the actions that a user may take and the responses that the system provides to those actions, without saying how those actions are performed. The how is defined in the architecture and detailed design phases. Data and business rule definition are part of the use case development process. Quality Assurance Plan
The Quality Assurance plan defines the scope and approach of testing. This plan includes technical reviews and relevant testing activities, which are further defined in the Testing section below. Quality Assurance is often thought of simply as functionality testing, which begins after coding is complete. However, such an approach is both limited and potentially costly. An industry rule of thumb states that each hour of upstream (i.e., early in the process) quality assurance activities will save 3-10 hours of downstream costs. System Architecture
System Architecture is a high level specification of how the project requirements will be met. It provides the technical structure for the project by covering issues such as overall program organization, notation, change scenarios and strategy, components that can be leveraged from existing code or purchased from a third party, design approaches to standard functional areas, and requirements mapping.
Design of the application should flow out of the use cases specified during the requirements development and the high-level system architecture. During this phase, the application is defined and documented on a detailed technical level so that all of the requirements will be met. This should include data modeling, which is the definition of how the data necessary for the application will be stored in a database. An object model should be created to define the software components. Also, the system architecture defining the physical design (including specifications for servers and their roles) should be created. Several people review technical specifications to ensure the quality of the design. Design is still an upstream activity, and like the requirements phase, offers greater leverage on the development schedule than subsequent activities.
On larger projects, Design may be broken down into two distinct phases, High Level Design and Detailed Design. High Level Design specifies the overall Architecture required to meet the overall requirements of the system. During this phase all the major components of the system are defined. During detailed design, each major component of the system undergoes another iteration of design making sure all the technical details for its implementation are fleshed out.
During the construction phase the development team plans (pseudocode and code design), creates, unit tests, and debugs the application source code. Coding standards are enforced during technical reviews that occur at pre-defined milestones in the construction phase. In addition to coding standards, technical reviews will evaluate application scalability and maintainability relative to the project’s objectives. Change control is a key element of an effective construction phase.
Types of Testing
A brief overview of different types of testing is set out below. The types that are applicable and included in the scope of the project will be set out in the Quality Assurance Plan in the Project Planning phase. Activities applicable to several of these testing types may overlap with each other (such as functionality, system and end-to-end). Typically, all projects will include unit and system testing.
|Type of Testing
||Testing of particular functions and code modules, done during the Construction phase.|
||Tests are based on requirements and functionality. Not based on any knowledge of internal design or code.|
||Testing that is based on overall requirements specifications; covers all combined parts of the system.|
||The “macro” end of the test scale; involves testing of a complete application environment in a situation that mimics real-world use, such as interacting with a database, using network communications, or interacting with other hardware, applications, or systems if appropriate.|
||Tests the system’s ability to accommodate the required cumulative volume of data over a period of time. Measures system response time as the volume of data in the system increases. Data Load Testing overlaps somewhat with Performance Testing|
||Testing application under heavy loads to determine at what point the system degrades or fails. This test is generally executed using testing tools to simulate large numbers of users. System components are monitored during the tests to help identify and anticipate failure points.|
||Measures system performance while modeling “real-world” conditions. Allows determination of average response times of typical users under normal conditions.|
||Testing how well the application protects against unauthorized internal or external access, willful damage, etc.|
||Testing how well software performs in a particular hardware/software/operating system/network/etc. environment. The requirements outline the specific platforms, browsers, etc. the application will be tested on.|
||Final testing based on specifications of the end-user or customer, or based on use by end-users/customers over some limited period of time. Acceptance period defined in project plan. Parameters for acceptance defined in Planning phase.|
||Usability testing measures whether users are able to find and do what they need with reasonable effort and within a reasonable period of time. It helps establish how users perform specific tasks and interact with specific elements of the interface, and how satisfied they feel about each of these interactions. In addition, usability testing can provide significant ROI for an application that will include user support features. By improving usability upfront, ongoing user support costs can be lowered.|
The QA team uses an internal tracking tool, DevTrak, to track defects found during testing. A defect indicates that the site does not work as specified or is otherwise expected to work. Defects are recorded and tracked until they are closed. As defects are identified, a severity and a priority is assigned by QA based on established criteria.
The deployment phase involves moving the developed software to the production environment. The Lead Developer for a project is responsible for writing a code release plan that details all steps necessary to move the application from the development environment to all applicable subsequent environments (including stage). This plan is reviewed in a meeting with the System Administrator and any other team members that is be involved in the deployment prior to the release to the next environment. All production moves require approval from the client and project manager.
Change control is a management practice that permeates all phases of a software development project. It applies to the practice of placing important work products, such as Use Cases, Technical Design, Quality Assurance Plan, Test Cases, Source Code, Assets, and Code Release Plans under change control. It also applies to a systematic process for addressing change wherein changes are identified, justified, and quantified and assessed for impact to schedule, budget and product quality. Pre-determined stakeholders then make change decisions on the basis of this information. The formality of the process will vary from project-to-project, depending on factors such as project size, scope and duration, and should be determined at the outset of the Planning phase of the project.
While many aspects of the software development process described above are implicitly risk reduction activities, several explicit risk management activities and concepts are worth noting. Each project should have some portion of its budget set aside for risk management activities. This may include time for activities such as creating and updating a Top Ten Risks List, assessing risks, and communicating (including documentation) these assessments to stakeholders. The primary risk management tool is the Top Ten Risks List, which is created and maintained on a consistent basis (approximately once a week) by the project team. This list includes a description of the risk, priority (current and historical) and resolution status.