Software Engineering Principles and the Software Crisis and Professional Ethics

Definition and Scope of Software

  • Software is a comprehensive term used to describe the various types of programs employed to operate computers and associated electronic devices.

  • It comprises two main components:

    • Instructions (Computer Programs): These are executed to provide specifically desired functions and performance levels.
    • Supporting Documents: These materials are essential to ensure the programs operate correctly. Examples include user manuals, installation files, and configuration files.
  • Software products are classified into two primary categories:

    • Generic Software: These are developed to be sold to a broad range of customers rather than a specific entity. Examples include word processors or spreadsheets. In this model, the software specifications are owned and controlled by the developer.
    • Bespoke (Custom) Software: These are developed for a single, specific customer by a software contractor according to that customer's unique requirements. An example is a system designed to support a specific business process internal to an organization.

The Software Crisis

  • The software crisis was a term coined in the early days of computing science to describe the intense difficulty encountered in writing useful and efficient computer programs within required timeframes.
  • The crisis was primarily caused by the rapid increase in computer processing power and the resulting complexity of the problems that machines were expected to solve.
  • The term was first expressed by attendees at the initial NATO Software Engineering Conference in 19681968.

Critical Failures and Case Studies of the Software Crisis

  • The Internal Revenue Service (IRS): The IRS contracted Sperry Corporation to build an automated federal income tax form processing system. The system proved inadequate and inhibited the IRS from returning tax refunds by the legal deadline. Consequently, the IRS was forced to pay 40 million40 \text{ million} dollars in interest.
  • Therac 25: This radiation therapy and X-ray machine malfunctioned, resulting in the deaths of several patients. The cause was traced to software that was improperly designed and programmed.
  • Columbia Launching Schedule: A launch was cancelled due to a synchronization problem among five on-board computers. The launch eventually took place three years later, costing millions of dollars in additional expenses.
  • AT&T Network Breakdown (January 1990): The AT&T long-distance telephone network failed, interrupting nationwide services in the United States for over 88 hours. The root cause was an ill-placed break statement in the switching software, which was written in the C language.
  • Ariane 5 Flight 501 (June 1996): The maiden flight of the new Ariane communication satellite launcher, developed by the European Space Agency, exploded only 3737 seconds after liftoff. The disaster resulted from an incorrectly handled software exception during the conversion of a 6464-bit floating-point value to a 1616-bit signed integer.
  • General Project Failures: Numerous large-scale projects have failed due to violating constraints regarding budget, time, and quality. Common outcomes include being overdue, over budget, and under quality. Examples include the London Ambulance Service and Ariane 5.

Software Issues in Mauritius

  • MCB Online Banking: The system crashed on its launch day, and it required one month of work to resolve the resulting issues.
  • MRA E-tax System: This system, developed on an Oracle platform, did not function correctly upon its initial launch. The authority had to revert to manual returns and hire an additional software company to fix the issues, a process that took approximately 22 years.

Impacts of Poor Software Design

  • Faults and failures can prove extremely expensive for businesses and can endanger human lives.
  • Violations of deadlines and the delivery of unreliable products.
  • Increased costs associated with fixing bugs late in the development cycle.
  • High costs for ongoing software maintenance.

Fundamentals of Engineering and Software Engineering

  • Engineering: This is the application of science and machines to solve problems. Engineers are responsible for designing, evaluating, developing, testing, modifying, installing, inspecting, and maintaining systems and products. They bridges the gap between scientific discovery and practical application.
  • Software Engineering: This is an engineering discipline concerned with every aspect of software production, ranging from the early stages of system specification to the maintenance of the system after it has entered use.
  • It is characterized as a systematic, disciplined, and quantified approach to developing, operating, and maintaining high-quality software under specific constraints.
  • The purpose of software engineering is to address the issues of low-quality software, budget overruns, and timeline delays. It ensures applications are built consistently and correctly while meeting all requirements.

The Role and Responsibilities of Software Engineers

  • Professionals in this field must apply analytical techniques to understand complex problems.
  • They must utilize knowledge, experience, and creativity to devise solutions.
  • They employ concepts, principles, techniques, and tools to enhance the quality of the solution.
  • They are required to deliver products in a cost-effective manner using finite resources and within a predicted schedule.

Drivers for the Software Engineering Approach

  • Complexity: Modern systems are massive and complex. Methodologies used for small systems by individuals do not scale to large systems developed by teams. Engineering approaches allow systems to be broken down into manageable parts for collaborative development.
  • High User Expectations: Historically, computer users were scientists or engineers who were technical enough to handle system problems. Today, users are non-technical people across all walks of life who expect dependable, glitch-free software for work and pleasure.
  • Longevity and Evolution: Many systems remain in service for decades. They must evolve to accommodate changes in user needs and environments. An engineering perspective ensures that this evolution is done at the lowest cost and in the shortest time.

Fundamental Principles of Software Development

  • Systems should be developed using a managed and well-understood development process.
  • Dependability and performance are critical priorities for all system types.
  • Understanding and managing software specifications and requirements (defining what the software should do) is paramount.
  • Existing software should be reused whenever appropriate rather than writing new code from scratch.

The Ten Knowledge Areas of Software Engineering

  1. Software Requirements
  2. Software Design
  3. Software Construction
  4. Software Testing
  5. Software Maintenance
  6. Software Configuration Management
  7. Software Engineering Management
  8. Software Engineering Process
  9. Software Engineering Tools and Methods
  10. Software Quality/Reliability

Professional Ethics and Standards

  • Software engineers must uphold standards of honesty and integrity to be respected as professionals. They must navigate areas not always bounded by local or international laws:
    • Intellectual Property Rights: Engineers must be aware of laws regarding patents and copyrights, ensuring the intellectual property of employers and clients is protected.
    • Computer Misuse: Technical skills should never be used to misuse others' computers. Misuse ranges from trivial acts like playing games on an employer's machine to serious crimes like the dissemination of viruses.
    • Confidentiality: Engineers must respect the confidentiality of clients and employers regardless of whether a formal non-disclosure agreement is signed.
    • Competence: Engineers must not misrepresent their skill levels or knowingly accept work that falls outside their area of expertise.