UNC-CH COMP 723

What is Software Design?


  1. Software design is a conscious (and ideally systematic) effort to bridge the gap (conceptual and material) that exists between a software solution to a well defined problem and raw resources in the form of intellect and existing solutions. Here solutions can be any of algorithms, libraries, complete software projects, data structures, languages, or half baked theorems. Intellect in this context is defined as "the capacity for rational or intelligent thought especially when highly developed."
  2. Software Design is a multi-step process that helps engineer a meaningful solution to a set of requirements and is just one step within the software development process. The process can entail many considerations such as how a user should interact with a system (if required), the structure of the code itself, etc. Many of these considerations stem from the requirements document created before you reach the software design stage of software development.
    For solutions that require user interaction, an additional conderation must be made other than functionality, usability. While the goal is a UI that works, it also should be easy for the user to interact. To do this, you must consider what really needs to be exposed to the user, how is it exposed, and how the user will engage the system.
    In regard to the code that drives the solution, meaningful thought must be placed on maintainability, scalability, security, modularity, etc. While code is important, I do not believe language of implementation is factor in the design process. I believe that ideally the design and language should be separate so you do not limit your scope when it comes time to implementation. Unfortunately, I think this happens more frequently due to existing systems and domain knowledge of the developers. This can be extended further to include data storage and structure.
  3. Software design is a human creation process aiming at solving problems which are hard or time-consuming for human brains. It includes several aspects:
    1) Environment choice: This part is more related to decide the language 
       (such as C#, C++), the systems (Windows, Linux) and API (Qt, MFC, 
       .Net Framework).
    
    2) Architecture design: This part is related to design pattern, software 
       models (such as MVC, Cloud computation). 
    
    3) Algorithm design: the algorithm to solve specific problems (such as 
       motion planning).
    
    4) Development mode: How the programmers manage time and other resources 
       to achieve development task (such as programming in pair).
    
    5) Upgrade and Maintance:  How to update software( online/offline ; 
       automatic/manual) and how to maintaince.
    
  4. Once a software problem is specified with the desired inputs and outputs established, software design is the development of an approach that the final product will take to transform the input to the desired output. The centerpiece of the design process is figuring out what has to happen to get the desired outputs from the inputs and then how to make that happen. It is closely interwoven with software engineering, which is more concerned with the how to execute the design and building a product that is robust, maintainable and efficient. Making distinctions between software design and engineering is somewhat arbitrary, as there isn't a clear definition of what both areas do and don't encompass and such a distinction may be specious depending on one's view of those areas. Notwithstanding any such distinctions, the software design process is most importantly the design of software that robustly and correctly transforms its inputs to the desired outputs and that preferably is understandable, maintainable and efficient.
  5. Software design is a process of planning for a software solution to a problem. It requires analysis of the goals and the software requirements, and then coming up with a list of specifications of the requirements. The specifications may serve like a contract for software implementation and testing. It is not really a fixed contract because it can be redesigned after some prototyping. Although design and implementation are two different terms referring to different processes in the full process of software development, it seems implementation is often implied in software design process.
    There are a set of fundamental design concepts that evolve over time. These concepts are the topics that we will learn in software design classes. The modeling language, design considerations, and design patterns are also topics that are covered in software design classes.
  6. Software design is the process of changing an abstract idea into a concrete planning of a software system. It is an important step of the software development process that spawns software products. The input of software design can be feature requirements from clients, functional expectations from users, and so on. During the process, the input is well considered and the solution of achieving the target software is planned in order to create maximal satisfaction of the desired features. The output of the process includes specifications on all levels of the software structure; both data structures or algorithms in low level and the architectural view in high level are involved. Those specifications should be practical and feasible to put into implementations in the downstream of software development.
  7. Software design is a process wherein an architectural plan is made for a software system by considering all the requirements of the software. To give you an analogy, construction design gives a plan for the building even before any construction begins. Similarly, software design provides a plan of the software much before the development occurs. Construction plan shows the building blocks, plumbing lines, foorplans etc and also makes provisions for future extensions. Similarly, software design must identify different layers, components and modules of the system. It should identify platform agnostic parts, scalable parts, reusable parts, third-party parts, parts that should be closed, performance critical parts etc. Therefore, software design is a process to efficiently plan the software to minimize the maintenance cost and maximize the outcome under given constraints. Any process that contributes to the planning of the software becomes a part of the software designing process. For example, system architecture plan, module specification plan, system interfaces, API design, class, sequence and state diagrams, test automation plan etc are some of the software design processes. Thus the final outcome of the software design provides a guide to the software developers to build a robust software product that fulfills the requirements.
  8. Software design is the process by which we organize the components and internal interactions of software. This is akin to developing and designing a mechanical device. For example, an inclined plane is a simple example of a mechanical construct. It is easily understood, and is essentially one concept. The software example of this could be a ‘Hello, World!’ program. It is a basic example of programming, and can also be easily understood as it contains very simple concepts. However, these are just trivial examples. Consider a modern car or airplane. Each of these machines contain a multitude of components (both mechanical and electrical) that must precisely operate together in order to function as a whole. No single person could completely understand every single operation of every single component. Instead, each is constructed with certain parameters with the underlying details abstracted away before being added to the overall result. Software follows a similar course. An operating system contains an equally high number of components and modules that each must operate correctly. Just as in the airplane example, each part of the overall design serves a specific purpose, while its underlying complexity can be abstracted away. It is this process of planning the interaction and abstraction of components that defines software design.

    To further illustrate this definition, consider the alternative. What if all of the functionality of the resulting system were combined into one inseparable module? The result would be chaos. Perhaps, given enough luck, the resulting system might work. However, it would be virtually impossible to fix if any errors arose. There would be so much complexity, and everything would be so interrelated that any action would invariably cause other unforeseen side effects. In addition, it would be impossible to maintain. Additions and modifications to the construct would be equally as challenging as an innumerable number of items would be affected by any changes to the system. It is for these reasons that a concrete design must be put in place. A sound design not only allows a system to be built more rapidly, it causes any subsequent fixes or modifications to be made with the minimal amount of effort. Once again, this process of organization is characteristic of software design, and facilitates the maintainability and reduced complexity of the resulting code.
  9. Software Design, from my point of view, is a huge concept ranging from the macroscopic aspects of Software Engineering, such as the development cycle, the distribution of functionality into different modules, the design of module interfaces, to microscopic aspects of Software Engineering including the adoption of certain algorithms during module development. Basically, it incorporates everything that will determine how the final system will behavior, and is thus the most crucial part of Software Engineering.
  10. Software Design transforms the abstract ideas of a problem (or some problems) into a blueprint of software solution. This process involves several components, which includes the determination of the specifications, software architecture design, data structure design and algorithm implementation, and the documentation of these components. It is not a mechanical process but one with the art of combing different concepts while meeting multiple constraints.
  11. In my opinion, software design is a process to create the software architecture, design the data structure, construct the data flow and choose algorithms based on the software requirements. The software architecture and data flow are high level issues of the software related to the organization and framework. The data structure and algorithms are more detailed information directly connected to the software implementation. Software design is a prerequisite of software implementation which provide a guideline to the implementation.
  12. In my opinion, software design is a science or technology to create good software with good architecture that provides good properties to the users and developers. Good properties of software include understandability, completeness, conciseness, portability, consistency, maintainability, testability, usability, reliability, efficiency and security, which let the software be easy to use, easy to learn, easy to understand, easy to repair, easy to re-develop, easy to update, easy to test. All these good properties are based on good software design. Software design is according to the requirement of the software and is developed into a science and technology by practice and practice. Generations of software engineers and designers conclude a way to create software with good properties. In this way, people can design the architecture of the software, the components of the software, and the key features of the software. There are also many design patterns in software design. These design patterns tell the developers how to realize the requirements with good quality in an efficient way.
  13. Software design is a compilation of the decisions that go into the creation of software. It is a reduction of the complexity of software requirements into an abstract software system representation, created in line with the purpose of the software. It results in a plan, aimed at modelling the creation of the proposed software, that facilitates evaluation against the software objectives and serves as a guide to software assembly and creation.
  14. Software design is an iterative decision process of analyzing requirements and yielding a hierarchical representation for the system. Software designers decompose the requirement specification into subsystems and design components for each small problem. At the same time, designers will consider the relationships between components and their mutual communication mechanisms. Besides functionalities of the system, the design process should also consider compatibility, extensibility, fault-tolerance, maintainability, modularity, packaging, reliability, reusability, robustness, security, usability, etc. In summary, software design provides software developers a guide to follow.
  15. According to the definition from Merriam-Webster, "design" means "to plan and make decisions about something that is being built or created". So a simple literal understanding of "software design" would be a planning and decision-making process for developing software.
    Specifically, during the planning and decision-making process, we need to make sure about two things -- "what" and "how". "What" means the detailed definition and expectation of the software, which includes the technical definition of user requirement, GUI specification, developing resources and constraints of the system, time and space efficiency, as well as future reusability, robustness and security of the product, etc. "How" is finding the ways to fulfill those expectations. That is to say, we could use different kinds of approaches like design patterns to help decide the software architecture, data structure, algorithms of functions, the procedure of implementation and testing and so on. To my understanding, the process of determining those whats and hows is software design.