SE Lecture 1 Flashcards
What are the learning objectives of the first lecture?
Appreciate software complexity
Why is software development complex?
Large systems require planning
Give an example of a large codebase to illustrate software complexity.
Boeing 787 → 14M lines of code; Windows 10 → 15M lines of code.
Why can’t large systems be implemented bottom-up?
Too complex to implement line-by-line; requires significant upfront planning.
How does the application domain add to software complexity?
Problems can be inherently complicated
What is an example of software complexity due to the application domain?
Building a hospital management system requires learning the hospital domain.
How does communication contribute to software complexity?
Different vocabularies
What is an example of communication challenges in software development?
Clarifying whether to store integers or floating-point numbers when clients request “storing numbers.”
Why is project management challenging in large software development?
Requires dividing projects
How does coding contribute to software complexity?
Writing reliable
What are some software quality problems caused by complexity?
Unreliable
What happened in the Ariane 5 rocket failure?
A tiny bug caused the rocket to explode.
What happened to the London Ambulance System in 1992?
System failure caused fatalities due to delayed ambulance service.
What happened to the London Stock Exchange System?
Abandoned after 5 years of development due to reliability issues.
How can software complexity affect software development projects?
Projects may be over-schedule
What percentage of large software systems face company-threatening issues?
0.17
What percentage of large software systems go over budget?
0.45
What percentage of large software systems are overtime?
0.07
What percentage of large software systems deliver less value than expected?
0.56
What is the first step to reduce complexity in software engineering?
Choose appropriate design goals at the start of the project.
Why can’t all design goals be achieved simultaneously?
Conflicting goals due to time and budget constraints.
What does modularity mean in software development?
Dividing large systems into smaller
Define a module in software systems.
A part of the system that can be considered independently.
What is the purpose of interfaces in modular systems?
Facilitate communication and interaction between modules.
What is abstraction in software design?
Skipping internal module details and focusing only on the interface.
What is encapsulation in software design?
Changing a module without affecting other parts of the system.
Name three benefits of modularity and incremental development.
Increased productivity
What are the two main tasks of a software engineer?
Programming-in-the-small (coding) and programming-in-the-large (software engineering).
What do software engineers do besides coding?
Communicate with stakeholders
What distinguishes software engineering from small programming tasks?
Software engineering is a disciplined
What is the role of Software Configuration Management in software engineering?
It tracks different versions of software to support multi-version projects and ensure proper version control.
What are the two primary models used in software engineering?
The Requirements Model captures user needs
What does rationale management involve in software engineering?
Documenting decisions and assumptions to revisit and adapt them as the project evolves.
How does software engineering differ from computer science?
Computer science focuses on algorithms and computing theory
What is the primary activity in software engineering?
Building models
Why is team communication crucial in software engineering?
Effective communication with clients
How does software engineering handle changes in requirements?
By continuously assessing and adjusting based on the evolving understanding of user needs and technological changes.
What is modularity in software engineering?
Breaking down a large software system into smaller
What is the benefit of abstraction and encapsulation in modular design?
They allow developers to interact with modules through interfaces
What are the consequences of poor software engineering practices?
Unreliable
Why is training important for software engineers?
It equips them with the necessary knowledge and skills to design
How does incremental development help manage complexity?
By focusing on one small piece of the system at a time
What is the divide-and-conquer approach in software engineering?
Dividing a large system into smaller modules to tackle each part separately