Chapter 1: Introduction
Understand and identify software engineering principles, life cycle phases, processes, and activities that form the foundation of professional software development.
Show comprehension of professional and ethical responsibilities in software engineering, including adherence to codes of conduct and ethical decision-making.
Software Engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use.
Critical Fact: The economies of ALL developed nations are dependent on software. More and more systems are software controlled, making software engineering a crucial discipline in modern society.
Expenditure on software represents a significant fraction of GNP (Gross National Products) in all developed countries.
Software costs often dominate computer system costs. The costs of software on a PC are often greater than the hardware cost.
Software costs more to maintain than it does to develop. For systems with a long life, maintenance costs may be several times development costs.
Software engineering is concerned with cost-effective software development using appropriate theories, methods, and tools.
As software engineering techniques improve, we can create larger and more advanced systems. This has changed expectations so systems now need to be developed faster, handle greater complexity, and have new capabilities that were previously thought impossible.
It is fairly easy to write computer programs without using software engineering methods. Many companies have drifted into software development as their products evolved. They do not use software engineering methods in their everyday work. Consequently, their software is often more expensive and less reliable than it should be.
| Question | Answer |
|---|---|
| What is software? | Computer programs and associated documentation. Software products may be developed for a particular customer or for a general market. |
| What are attributes of good software? | Good software should deliver the required functionality and performance to the user and should be maintainable, dependable and usable. |
| What is software engineering? | Software engineering is an engineering discipline that is concerned with all aspects of software production. |
| What are fundamental software engineering activities? | Software specification, software development, software validation and software evolution. |
| Difference between Computer Science and Software Engineering? | Computer Science focuses on theory and fundamentals (the science behind computers, algorithms and mathematics). Software Engineering is concerned with the practicalities of building/developing and delivering useful software. |
| Difference between System Engineering and Software Engineering? | System Engineering is concerned with all aspects of computer-based systems development including hardware, software and process engineering. Software Engineering is a specific part of this broader system engineering process. |
| Attribute | Description |
|---|---|
| Maintainability | Software should be written in a way that it can evolve/progress to meet the changing needs of customers. This is a critical attribute because software change is an unavoidable requirement of a changing business environment. |
| Dependability | Software dependability includes a range of characteristics including reliability, security and safety. Dependable software should not cause physical or economic damage in the event of system failure. Malicious users should not be able to access or damage the system. |
| Efficiency | Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency includes responsiveness, processing time, memory utilization, etc. |
| Acceptability | Software must be acceptable to the type of users for which it is designed. This means it must be understandable, usable and compatible with other systems that they use. |
Stand-alone systems that are marketed and sold to any customer who wishes to buy them.
Examples: PC software such as graphics programs, project management tools, CAD software, software for specific markets such as appointment systems for dentists.
Specification: Owned by the software developer and decisions on software changes are made by the developer.
Software that is commissioned by a specific customer to meet their own needs.
Examples: Embedded control systems, air traffic control software, traffic monitoring systems.
Specification: Owned by the customer for the software and they make decisions on software changes that are required.
Run on a local computer (e.g., PC). Include all necessary functionality and do not need network connection.
Example: Microsoft Word
Execute on a remote computer and are accessed by users from their own PCs or terminals.
Examples: Amazon, Online Banking Systems
Software control systems that control and manage hardware devices.
Example: Smart Thermostats for heating and cooling
Business systems designed to process data in large batches.
Example: Payroll systems
Systems primarily for personal use intended to entertain the user.
Examples: Netflix, Spotify
Developed by scientists and engineers to model physical processes or situations.
Example: Weather Simulation Models
Hover over each layer to explore
Any engineering approach must rest on an organizational commitment to quality. Total quality management, Six Sigma and similar philosophies foster a continuous process improvement culture.
Defines a framework that must be established for effective delivery of software engineering technology. Includes communication, planning, modeling, construction, and deployment.
Provides the technical how-to's for building software. Encompasses requirements analysis, design, program construction, testing, and support.
Provides automated or semi-automated support for the process and methods. Includes CASE tools, IDEs, testing frameworks, etc.
Also known as Software Life Cycles, it mandates a phased approach to software development. It provides guidance on what must be created and when, and guides how to create and evaluate artifacts.
These activities support the framework activities and are ongoing throughout the software process:
Track progress, manage resources, and ensure project goals are met
Identify, evaluate, and prevent risks related to activities
Ensure software meets defined or standardized quality specifications
Peer review examining the suitability of the software product
Ensure delivered results are accurate, objective and repeatable
Track and control changes in the software
Manage reusable components to increase productivity
Create models, documents and other software artifacts
The Web is now a platform for running applications, and organizations are increasingly developing web-based systems rather than local systems.
Software engineering involves wider responsibilities than simply the application of technical skills. Software engineers must behave in an honest and ethically responsible way if they are to be respected as professionals.
Ethical behavior is more than simply upholding the law but involves following a set of principles that are morally correct.
"Computers have a central and growing role in commerce, industry, government, medicine, education, entertainment and society at large. Software engineers are those who contribute by direct participation or by teaching, to the analysis, specification, design, development, certification, maintenance and testing of software systems."
Because of their roles in developing software systems, software engineers have significant opportunities to do good or cause harm, to enable others to do good or cause harm, or to influence others to do good or cause harm.
To ensure their efforts are used for good, software engineers must commit themselves to making software engineering a beneficial and respected profession.
Engineers should normally respect the confidentiality of their employers or clients irrespective of whether or not a formal confidentiality agreement has been signed.
Engineers should not misrepresent their level of competence. They should not take on work beyond their abilities or expertise.
Engineers should be aware of local laws governing intellectual property such as patents and copyright. They should protect the intellectual property of employers and clients.
Software engineers should not use their technical skills to misuse other people's computers, from trivial (game playing) to serious (dissemination of viruses).
ACM = Association for Computing Machinery
IEEE = Institute of Electrical and Electronics Engineers
Professional societies have cooperated to produce a code of ethical practice. Members sign up to the code when they join. The Code contains Eight Principles for professional software engineers.
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 ensure that their products and related modifications meet the highest professional standards possible.
Software engineers shall maintain integrity and independence in their professional judgment.
Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.
Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.
Software engineers shall be fair to and supportive of their colleagues.
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.
Software engineers may face difficult situations such as:
Type: Embedded Control System
Description: An insulin pump used by diabetics to maintain blood glucose control.
Function:
Safety-Critical Aspects:
Requirements:
Type: Information Management System
Description: A medical information system that maintains information about patients suffering from mental health problems and the treatments they have received.
Context:
System Architecture:
Goals:
Key Features:
System Concerns:
Software engineering is an engineering discipline concerned with all aspects of software production.
Essential software product attributes are maintainability, dependability and security, efficiency and acceptability.
The high-level activities of specification, development, validation and evolution are part of all software processes.
The fundamental notions of software engineering are universally applicable to all types of system development.
There are many different types of systems and each requires appropriate software engineering tools and techniques for development.
Software engineers have responsibilities to the engineering profession and society. They should not simply be concerned with technical issues.
Professional societies publish codes of conduct which set out the standards of behavior expected of their members.