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
- Public Interest: Act consistently with public benefit.
- Client and Employer: Prioritize client and employer interests within ethical limits.
- Product Quality: Ensure adherence to professional standards.
- Integrity: Maintain independent judgment and integrity.
- Management: Promote ethical management practices.
- Professional Advancement: Uphold and enhance the reputation of the profession.
- Collegiality: Support fellow professionals.
- 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.