Software designFrom Wikipedia, the free encyclopediaSoftware 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-formal 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.
Design ConsiderationsThere 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:
Design PatternsA software designer or architect may identify a design problem which has been solved by others before. A template or pattern describing a solution to a common problem is known as a design pattern. (Design pattern (computer science)). The reuse of such patterns can speed up the software development process, having been tested and proved in the past. Design methodologiesDesign methodologies aim to provide a template process or a framework for the actual design of a system. They aim to simplify the actual process of designing a system and aim to enforce some standard design principles which improve the quality of a design. One of the earlier design methodologies is the Responsibility Driven Design (RDD) pioneered by Rebecca Wirth et al. It forms the basis of the URDAD, the Use Case, Responsibility-Driven Analysis and Design method which aims to generate a technology neutral design which is then mapped onto one's choice of implementation architecture and technologies. UsageSoftware design documentation may be reviewed or presented to allow constraints, specifications and even requirements to be adjusted prior to programming. Redesign may occur after review of a programmed simulation or prototype. It is possible to design software in the process of programming, without a plan or requirement analysis, but for more complex projects this would not be considered a professional approach. A separate design prior to programming allows for multidisciplinary designers and Subject Matter Experts (SMEs) to collaborate with highly-skilled programmers for software that is both useful and technically sound. |