Chapter 1 Review Questions 1. List two definitions for software engineering. - software engineering is the application of a disciplined approach for the development and maintenance of computer software. - software engineering deals with the establishment and use of sound engineering principles to economically obtain software that is reliable and works efficiently on real machines. 2. List the difference between software engineering and software development. Software engineering encompasses the use of tools, techniques, and methods that are useful during the execution of the steps needed for the development of the software and its future maintenance. In other words, Development and maintenance are phases during which software engineering tools, techniques and methods are used. 3. List five types of productivity software tools. Productivity tools for the office worker: office package For the engineer: AUTOCAD, Debugging tools, Software development tools like Rational Rose, Data management tools, human resource management tools, …. 4. List the stages of software development and maintenance and their respective phases. Definition stage: requirements and specification phases Implementation stage: design, coding and testing phases Maintenance stage 5. What is involved in the maintenance stage? Maintenance activities for the adaptation, enhancement and correction in the software product. All the phases of the software development stages may occur at one level or the other during maintenance also. 6. List the names of three software pioneers and their main contributions to software engineering. Alan Kay is known for his pioneering work on window-based graphical user interfaces. He is also known for coining the term object-oriented programming in 1966. Barry Boehm contributed to software engineering economics and software metrics. He also introduced the spiral model for software development. David Parnas introduced the concepts of information hiding, software interfaces, and software modularity. He also contributed to software engineering education and the ethical responsibilities of a software engineer. Donald Knuth is known for the design of many well-known computer algorithms and the use of rigorous mathematical techniques for the formal analysis of the complexity of algorithms. 1 Erich Gamma with Richard Helm, Ralph Johnson, and John Vlissides introduced the concept of object-oriented design patterns to facilitate software design reuse. Grady Booch is known for his method for object-oriented analysis and design and his co-development of the unified modeling language (UML). 7. List the principles of the code of ethics that deal with the need to be up to date in the software field. Software engineers shall ensure that their products and related modifications meet the highest professional standards possible. Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession. 8. Define three of the software capabilities that are more relevant to the software users. Usability, user-friendliness, correctness, availability 9. List the possible stakeholders in chemical factory control software. Software developers, testers, maintenance Users, engineers Government regulations on safety Standards for chemical factories Chemical engineering professional society 10. Discuss why architectural considerations are important in software products. Architectural considerations deal with the future use of the software, expandibility, robustness, and scalability. Developers should not only be concerned with the current load on the system but also with future load and future adaptation and additions of functionalities. Exercises 1. Which of the principles of the code of ethics deals with user’s privacy concerns? How? Software engineers shall act consistently with the public interest. Software engineers shall act in a manner that is in the best interests of their client and employer, consistent with the public interest. Software engineers shall advance the integrity and reputation of the profession consistent with the public interest. 2. Search on the internet for software faults that led to the loss of human lives. Discuss the problem and how it could have been prevented. 3. Is a software fault the responsibility of one developer? Why? Discuss your arguments. Software development is an extensive group exercise. A fault may originate by one developer oversight but the fact that it remains in the software product is a group 2 responsibility. Reviews and testing should have detected this fault before it goes into an operational software system. 4. List the categories of software security errors. 5. Provide an analogy between software behavior, structure and architecture, and bridge behavior, structure, and architecture. Behavior: Software – reaction to different inputs from internal or external sources Bridge – reaction to different environmental factors like wind, heat, flood/water, … Structure: Software – the static code in the software program Bridge – the beams, columns, … that make the bridge Architecture: Software – multithreading, multiprocessing, resilience of the software to deal with load Bridge – number of beams/columns, amount of steel and cement to make the bridge resilient 6. List the areas of the CSDP certification. Business Practices and Engineering Economics Software Requirements Software Design Software Construction Software Testing Software Maintenance Software Configuration Management Software Engineering Management Software Engineering Process Software Engineering Tools and Methods Software Quality 7. List the main areas of the software engineering body of knowledge. Software Requirements Software design Software Construction Software testing Software maintenance Software configuration management Software Engineering management Software Engineering Process Software Engineering Tools and Methods Software Processes and Product Quality 3