Software Engineering Notes

Introduction to Software Engineering

  • Main Sources:
    • Sommerville, I. (2016) Software Engineering. 10th Edition.
    • Pressman, R.S. (2010) Software Engineering: A Practitioner’s Approach. 7th Edition.

Importance of Software Engineering

  • Economies of developed nations increasingly depend on software.
  • Software controls more systems than ever.
  • Software engineering encompasses methodologies for professional software development, including
    • Theories, methods, tools.
  • Significant software expenditures contribute to the Gross National Product (GNP) of developed countries.

Software Costs

  • Software costs frequently outstrip hardware costs in computer systems.
  • Maintenance costs often exceed development costs for long-lived systems, making cost-effective development crucial.

Types of Software Products

  • Generic Products:

    • Stand-alone systems marketed to any customer.
    • Examples: Graphics software, project management tools, CAD software.
  • Customized Products:

    • Developed for specific customer requirements.
    • Examples: Embedded control software, air traffic control systems, traffic monitoring.

Product Specification

  • Generic Products:

    • Developers own the specification and manage software changes.
  • Customized Products:

    • Customers own the specification and direct changes.

Frequently Asked Questions

  • What is software?

    • A collection of computer programs and associated documentation.
  • Good Software Attributes:

    • Required functionality, performance, maintainability, dependability, usability.
  • Differences in Engineering Domains:

    • Software Engineering focuses on practical aspects of software production.
    • Computer Science emphasizes theory and foundational concepts.

Key Challenges in Software Engineering

  • Increasing diversity of systems.
  • Demand for reduced delivery times.
  • Need for trustworthy systems.

Software Engineering Activities

  • Software Specification:

    • Define software requirements and operational constraints.
  • Software Development:

    • Design and programming phase.
  • Software Validation:

    • Ensure software meets customer requirements.
  • Software Evolution:

    • Modify software to adapt to changing needs.

Attributes of Good Software

  • Maintainability:

    • Software should evolve with customer needs.
  • Dependability and Security:

    • Includes reliability, safety, and protection against malicious access.
  • Efficiency:

    • Optimizes the use of system resources (memory, processing time).
  • Acceptability:

    • User-friendly, understandable, and compatible with existing systems.

Software Development Diversity

  • Different applications require varied techniques and methods depending on customer needs and team background.
  • Applications Types:
    • Stand-alone applications: self-contained on local PC.
    • Interactive transaction-based applications: remote access via terminals.
    • Embedded control systems: manage hardware devices.
    • Batch processing systems: operate on large batches of data.
    • Entertainment systems: focus on user entertainment.
    • Modeling and simulation systems: for scientific and engineering applications.
    • Data collection systems: gather data via sensors.

Professional Responsibility in Software Engineering

  • Ethical codes (ACM/IEEE) are essential to uphold professional standards.
  • Issues include confidentiality, competence, intellectual property rights, and prevention of computer misuse.

Ethical Principles

  1. Public Interest: Act consistently with public benefit.
  2. Client and Employer: Prioritize client and employer interests within ethical limits.
  3. Product Quality: Ensure adherence to professional standards.
  4. Integrity: Maintain independent judgment and integrity.
  5. Management: Promote ethical management practices.
  6. Professional Advancement: Uphold and enhance the reputation of the profession.
  7. Collegiality: Support fellow professionals.
  8. Continual Learning: Engage in lifelong learning to enhance professional skills.

Software Engineering and the Web

  • Shift towards web-based systems, with web services allowing software accessibility over the internet.
  • Cloud computing enables remote access to applications without ownership.

Key Takeaways

  • Engaging in software engineering is vital for creating reliable, efficient, and ethical software systems.
  • Understanding software engineering principles leads to better project outcomes and accountability in practice.