Week 1- Introduction to Software Engineering Flashcards
What is software crisis?
The software crisis refers to the challenges in software development, such as complexity, requirement changes, cost overruns, skill shortages, and quality assurance failures.
What are the main causes of software crises?
Complexity & Scaling – Large projects are hard to manage.
Requirement Changes – Customers frequently change needs.
Cost & Time Overruns – Projects often exceed budgets and deadlines.
Skill Shortage – Lack of trained software engineers.
Quality Issues – Bugs, crashes, and unmet user expectations.
Why was software engineering introduced?
To provide structured principles and methodologies for developing software on time, within budget, and with high quality.
What is software engineering?
Ghezzi et al. (2008) – “A systematic, disciplined, and quantifiable approach to software development.”
Ian Sommerville (2011) – “An engineering discipline concerned with all aspects of software production.”
Rod Stephens (2015) – “An organized, analytical approach to the design, development, and maintenance of software.”
What are the four fundamental software process activities?
Software Specification – Defining system requirements.
Software Development – Designing and programming the system.
Software Validation – Ensuring the software meets customer needs.
Software Evolution – Modifying the software based on feedback and new requirements.
Is software engineering an art or a science?
Science: Uses structured techniques and methodologies.
Art: Requires creativity to solve complex problems.
What are the two types of software products?
Generic Software – Mass-market products (e.g., Microsoft Office).
Bespoke Software – Custom-built for a client (e.g., Banking Software).
Why is software engineering important?
Human Dependency – Businesses and society rely on software.
Cost Efficiency – Saves money in the long run.
Adaptability – Allows easy modifications and improvements.
What are the four essential attributes of a software product?
Maintainability – Easy to modify and update.
Dependability & Security – Reliable and secure.
Efficiency – Optimizes system resources.
Acceptability – Meets user needs and expectations.
What is modularity in software engineering?
Breaking a large system into smaller, manageable modules to simplify design, development, and maintenance.
What are the two modularity approaches?
Top-Down – Decomposing the system into smaller modules first, then designing each.
Bottom-Up – Designing individual modules first, then integrating them into a system.
What are the key software engineering principles?
Rigour & Formality – Applying precision in software development.
Separation of Concerns – Focusing on one aspect at a time.
Modularity – Dividing a system into smaller, manageable parts.
Abstraction – Ignoring irrelevant details to focus on essential aspects.
Anticipation of Change – Designing software to accommodate future modifications.
Generality – Creating reusable components for different projects.
Incrementality – Building the software step by step.
What is cohesion and coupling in modularity?
Cohesion: How closely related the elements of a module are (high cohesion is better).
Coupling: The degree of dependence between modules (low coupling is better).
How does software engineering differ from computer science?
Computer Science: Focuses on theoretical algorithms and data structures.
Software Engineering: Applies engineering principles to develop large-scale software systems.
How does software engineering differ from system engineering?
Software Engineering: Focuses only on software.
System Engineering: Involves both software and hardware components.
What are the key roles in software development teams?
Software Engineers – Write and maintain code.
Project Managers – Oversee scope, budget, and timeline.
Quality Assurance Engineers – Ensure software quality.
System Analysts – Analyze business requirements.
What is the software development process?
The sequence of activities that lead to a software product, including specification, development, validation, and evolution.
What is the importance of a systematic approach in software engineering?
Efficient resource management.
High-quality and maintainable software.
Cost and time predictability.