Created by on 2008-01-23 13:46:25
Last modified on 2008-01-23 16:21:21
Last modified on 2008-01-23 16:21:21
Design and development process
Goal
The goal of the knowledge session is to identify the different steps in software design and development and discuss how these fit it in our development process.
Guiding questions
How important is the design phase and which steps should we take in it?Which development methodologies are there and what are their pros and cons?What should we document and how should we document it?
Software design
Source: Wikipedia
Software design is a process of problem-solving and planning for a software solution. After the purpose and specifications of software is determined, software developers will design or employ designers to develop a plan for a solution. It includes low-level component and algorithm implementation issues as well as the architectural view.
Design considerations and goals
Source: Wikipedia
- Extensibility - New capabilities can be added to the software without major changes to the underlying architecture.
- Robustness - The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with a resilience to low memory conditions.
- Reliability - The software is able to perform a required function under stated conditions for a specified period of time.
- Fault-tolerance - The software is resistant to and able to recover from component failure.
- Security - The software is able to withstand hostile acts and influences.
- Maintainability - The software can be restored to a specified condition within a specified period of time. For example, antivirus software may include the ability to periodically receive virus definition updates in order to maintain the software's effectiveness.
- Compatibility - The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward-compatible with an older version of itself.
- Modularity - the resulting software comprises well defined, independent components. That leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project.
- Reuse - the modular components designed should capture the essence of the functionality expected out of them and no more or less. This single-minded purpose renders the components reusable wherever there are similar needs in other designs.
Software development methodologies
The result of some research shows that there are many different software or application development methodologies, but they can ruffly be distinguished in: the "waterfall model" and the responses to it. Here are some examples (source: Wikipedia):
| Waterfall model | The waterfall model is a sequential software development model (a process for the creation of software) in which development is seen as flowing steadily downwards (like a waterfall) through the phases of requirements analysis, design, implementation, testing (validation), integration, and maintenance. |
| Agile software development | Agile software development is a conceptual framework for software engineering that promotes development iterations throughout the life-cycle of the project. |
| Iterative and incremental development | Incremental development is a scheduling and staging strategy in which the various parts of the system are developed at different times or rates, and integrated as they are completed. Iterative development is a rework scheduling strategy in which time is set aside to revise and improve parts of the system. |
| Rapid application development | The methodology involves iterative development, and the construction of prototypes. |
| Unified Process (UP) and the Rational Unified Process (RUP) | The Unified Software Development Process or Unified Process is a popular iterative and incremental software development process framework. The best-known and extensively documented refinement of the Unified Process is the Rational Unified Process or RUP. |
| Extreme Programming | Extreme Programming (or XP) is a software engineering methodology (compared to and possibly relative to agile software development) prescribing a set of daily stakeholder practices that embody and encourage particular XP values. |
| Spiral model | The spiral model is a software development process combining elements of both design and prototyping-in-stages, in an effort to combine advantages of top-down and bottom-up concepts. Also known as the spiral lifecycle model, it is a systems development method (SDM) used in information technology (IT). This model of development combines the features of the prototyping model and the waterfall model. The spiral model is intended for large, expensive and complicated projects. |
| Scrum | Scrum is a project management method for agile software development. The approach was first described by Takeuchi and Nonaka in "The New New Product Development Game" (Harvard Business Review, Jan-Feb 1986). They noted that projects using small, cross-functional teams historically produce the best results, and referred to this as the "rugby approach". |
The use of documentation
The different methodologies all have the same goal and all use some kind of testable phases. A big difference is the level of documentation. What are the possibilities?
Product
- Vision documents
- Use cases
- Visualizations and sketches
- Requirements
- Class and design pattern diagrams
- Pseudo code and algorithm specifications
- Code documentation
- Manuals
Process
- Plans and schedules
- Standards
- Progress reports