Total views On Slideshare 0. From embeds 0. Number of embeds 0. Downloads 3. Shares 0. Comments 0. Likes 0. You just clipped your first slide! Clipping is a handy way to collect important slides you want to go back to later. Now customize the name of a clipboard to store your clips.
Visibility Others can see my Clipboard. Cancel Save. Exclusive 60 day trial to the world's largest digital library. For example, the concept of a wicked problem—a problem with no definitive solution—is interesting in terms of nderstanding the limits of design. A number of other notions and concepts are also of interest in understanding design in its general sense: goals, constraints, alternatives, representations, and solutions see Problem Solving Techniques in the Computing Foundations KA.
Software design is an important part of the software development process. To understand the role of software design, we must see how it fits in the software development life cycle. Thus, it is important to understand the major characteristics of software requirements analysis, software design, software construction, software testing, and software maintenance.
The output of these two processes is a set of models and artifacts that record the major decisions that have been taken, along with an explanation of the rationale for each nontrivial decision. By recording the rationale, long-term maintainability of the software product is enhanced. A principle is "a comprehensive and fundamental law, doctrine, or assumption" [7].
Software design principles are key notions that provide the basis for many different software design approaches and concepts. A number of key issues must be dealt with when designing software. Some are quality concerns that all software must address—for example, performance, security, reliability, usability, etc.
Another important issue is how to decompose, organize, and package software components. This is so fundamental that all design approaches address it in one way or another see section 1. A number of these key, crosscutting issues are discussed in the following sections presented in alphabetical order. Design for concurrency is concerned with decomposing software into processes, tasks, and threads and dealing with related issues of efficiency, atomicity, synchronization, and scheduling.
This design issue is concerned with how to organize data and control flow as well as how to handle reactive and temporal events through various mechanisms such as implicit invocation and call-backs. This design issue is concerned with how to distribute the software across the hardware including computer hardware and network hardware , how the components communicate, and how middleware can be used to deal with heterogeneous software.
This design issue is concerned with how to prevent, tolerate, and process errors and deal with exceptional conditions. This design issue is concerned with how to structure and organize interactions with users as well as the presentation of information for example, separation of presentation and business logic using the Model-View-Controller approach.
Note that this topic does not specify user interface details, which is the task of user interface design see topic 4, User Interface Design.
Design for security is concerned with how to prevent unauthorized disclosure, creation, change, deletion, or denial of access to information and other resources. It is also concerned with how to tolerate security-related attacks or violations by limiting damage, continuing service, speeding repair and recovery, and failing and recovering securely.
Access control is a fundamental concept of security, and one should also ensure the proper use of cryptology. During the mids, however, software architecture started to emerge as a broader discipline that involved the study of software structures and architectures in a more generic way.
This gave rise to a number of interesting concepts about software design at different levels of abstraction. Some of these concepts can be useful during the achitectural design for example, architectural styles as well as during the detailed design for example, design patterns. These design concepts can also be used to design families of programs also known as product lines. Interestingly, most of these concepts can be seen as attempts to describe, and thus reuse, design knowledge.
Different high-level facets of a software design can be described and documented. Views pertain to distinct issues associated with software design—for example, the logical view satisfying the functional requirements vs. Various authors use different terminologies—like behavioral vs.
In summary, a software design is a multifaceted artifact produced by the design process and generally composed of relatively independent and orthogonal views. Various authors have identified a number of major architectural styles:. While architectural styles can be viewed as patterns describing the high-level organization of software, other design patterns can be used to describe details at a lower level. These lower level design patterns include the following:. Architectural design is a creative process.
During the design process, software designers have to make a number of fundamental decisions that profoundly affect the software and the development process. It is useful to think of the architectural design process from a decision-making perspective rather than from an activity perspective.
Often, the impact on quality attributes and tradeoffs among competing quality attributes are the basis for design decisions. We know that a system is composed of more than one sub-systems and it contains a number of components. Further, these sub-systems and components may have their on set of sub-system and components and creates hierarchical structure in the system.
Top-down design takes the whole software system as one entity and then decomposes it to achieve more than one sub-system or component based on some characteristics. Each sub-system or component is then treated as a system and decomposed further. This process keeps on running until the lowest level of system in the top-down hierarchy is achieved. Top-down design starts with a generalized model of system and keeps on defining the more specific part of it.
When all components are composed the whole system comes into existence. Top-down design is more suitable when the software solution needs to be designed from scratch and specific details are unknown. The bottom up design model starts with most specific and basic components.
It proceeds with composing higher level of components by using basic or lower level components. It keeps creating higher level components until the desired system is not evolved as one single component.
With each higher level, the amount of abstraction is increased. Bottom-up strategy is more suitable when a system needs to be created from some existing system, where the basic primitives can be used in the newer system.
Both, top-down and bottom-up approaches are not practical individually. Instead, a good combination of both is used. Arnab Chakraborty. There are many different forms of the agile development method, including scrum, crystal, extreme programming XP , and feature-driven development FDD.
Pros: The primary benefit of agile software development is that it allows software to be released in iterations. Iterative releases improve efficiency by allowing teams to find and fix defects and align expectation early on. They also allow users to realize software benefits earlier, with frequent incremental improvements. Cons: Agile development methods rely on real-time communication, so new users often lack the documentation they need to get up to speed.
They require a huge time commitment from users and are labor intensive because developers must fully complete each feature within each iteration for user approval. Agile development methods are similar to rapid application development see below and can be inefficient in large organizations. Programmers, managers, and organizations accustomed to the waterfall method see below may have difficulty adjusting to an agile SDLC.
So a hybrid approach often works well for them.
0コメント