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. The software requirements analysis (SRA) step of a software development process yields specifications that are used in software engineering . If the software is "semiautomated" or user centered , software design may involve user experience design yielding a story board to help determine those specifications. If the software is completely automated (meaning no user or user interface ), a software design may be as simple as a flow chart or text describing a planned sequence of events. There are also semi-standard methods like Unified Modeling Language and Fundamental modeling concepts . In either case some documentation of the plan is usually the product of the design. A software design may be platform-independent or platform-specific , depending on the availability of the technology called for by the design. There are many aspects to consider in the design of a piece of software. The importance of each should reflect the goals the software is trying to achieve. Some of these aspects are: 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. Reusability - 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.

Related Posts with Thumbnails