Chapter 1 - Introduction to Software Engineering.
# Quiz
What are the two fundamental types of software product?
There are no universal notations, methods, or techniques for software engineering because different types of software require different approaches.
Software engineering is an engineering discipline that is concerned with all aspects of software production from initial conception to operation and maintenance.
Good software should over-deliver the functionality outlined by the user, and should be difficult to maintain so competitors don't want to copy the product.
According to the ACM/IEEE-CS Joint Task Force on Software Engineering Ethics and Professional Practices, it is ethical to over-represent your competence and take on tasks that are outside of your competence.
Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency therefore includes responsiveness, processing time, resource utilization, etc.
Software has to be developed across a very wide range of scales, from very small embedded systems in portable or wearable devices through to Internet-scale, cloud-based systems that serve a global community.
As software is intertwined with all aspects of our lives, it is essential that we can trust that software.
What are areas of standard acceptable behaviour for software developers?
The fundamental ideas of software engineering are applicable to all types of software systems.
# Exercise
Explain why professional software that is developed for a customer is not simply the programs that have been developed and delivered.
Professional software is usually developed by teams rather than individuals, and used by users other than developers. If the software has other users, or needs to be modified by other programmers, you must provide additional information other than the program source code. Such as configuration files for these programs, documentation describing the system structure, explaining how to use the system, etc.
What is the most important difference between generic software product development and custom software development? What might this mean in practice for users of generic software products?
- The important difference is that in the development process of general-purpose software, the specification is developed by the product developer. In the process of custom software product development, the specification is set by the customer, and the developer must develop according to the customer's requirements.
- These mean that it is difficult for generic software to meet the special needs of generic software customers. Such as reliability, security, and speed.
Briefly discuss why it is usually cheaper in the long run to use software engineering methods and techniques for software systems.
Without software engineering methods and techniques, developers will tend to build software without any clear plan. In this case, the cost increases as they tend to spend more time on development and testing. Development costs account for about 60% of the entire software cost, and testing costs account for 40%. The software engineering technology can carry out the system software design more efficiently and scientifically, and carry out the system software architecture and function design according to the analysis of application requirements. Clearly, the decision to ignore software engineering methods and techniques may cost more in the long run and may not guarantee quality.
Software engineering is not only concerned with issues like system heterogeneity, business and social change, trust, and security, but also with ethical issues affecting the domain. Give some examples of ethical issues that have an impact on the software engineering domain.
Informed Consent: Software engineering researchers should generally obtain informed consent from their subjects and/or host institutions. Informed consent must contain at least some of the following elements: disclosure, understanding and ability, voluntary, actual consent or decision, and the right to withdraw from informed consent.
Confidentiality: Generally speaking, confidentiality has two components: anonymity and confidentiality of the data. Anonymity can be preserved if no one can identify the participants of the experiment. Ideal anonymity protection involves not collecting any data that could be used to identify the subject; not even a name.
Good for humanity: The concept of benefit requires a good balance between benefit and harm. This means that software engineering researchers must maximize the benefits to society and subjects, while minimizing the possible harms that the research can create, which is often referred to as the risk/benefit ratio.
Based on your own knowledge of some of the application types discussed in Section 1.1.2, explain, with examples, why different application types require specialized software engineering techniques to support their design and development.
Each application type must consider cost, schedule, reliability, and the needs of software customers and consumers. Different types of applications require specialized techniques because they have specific problems to solve.
Cost and frequency of changes. Some systems, such as embedded systems in consumer devices, are extremely expensive to change; others, must be changed frequently in response to changing needs (such as business systems). Systems that are very expensive to change require extensive up-front analysis to ensure that requirements are consistent and extensive validation to ensure the system meets its specifications. This is not cost-effective for systems that change very rapidly.
the most important "non-functional" requirements. Different systems have different priorities for non-functional requirements. For example, a real-time control system on an aircraft has safety as its top priority; an interactive game's priority is responsiveness and usability. Interactive games do not require technology to implement safety; safety-critical control systems do not require the extensive UI design that games require.
Software life cycle and delivery schedule. Some software systems have relatively short life cycles (many web-based systems), while others have life cycles of decades (large command and control systems). Some systems must be delivered quickly if they are to be useful. Techniques for developing short-lived, fast-delivery systems (such as using scripting languages, prototyping, etc.) are not suitable for long-lived systems that require techniques that allow for long-term support (such as design modeling).
Explain why the fundamental software engineering principles of process, dependability, requirements management, and reuse are relevant to all types of software systems.
A set of programmed instructions that perform specific tasks according to user requirements is called software. Every software has some basic principles to follow. These principles include user requirements management, platform reliability, development process definition, updating and maintenance.
These principles are the same for general purpose software and custom software. The main points explaining why are as follows:
- Both general purpose software and custom software require a process of gathering requirements.
- All types of software applications require documentation that defines the development process.
- Every type of software needs to be updated. To this end, new versions of each software are released.
- Maintenance is an important part of software development. It is required for every type of application development.
- The software has some minimum requirements for implementation. Therefore, platform reliability is considered in all software development.
Explain how electronic connectivity between various development teams can support software engineering activities.
Electronic connectivity provides wireless communication through the use of modern technologies such as smartphones and computer systems. A key enabler of teamwork is communication. Collaborating with others on a project is nearly impossible without an effective communication medium. In software development, it is crucial that team members keep track of their individual development process. Electronic connections make the process relatively stress-free. The availability of tools like GitHub makes it easy for team members to collaborate and contribute code to a single remote repository. Using electronic connectivity tools not only speeds up the development process, but also improves the quality of the final product or software.