The midterm exam will take place on Wednesday 11/01/2023, 11:00AM-12:20PM. The exam is worth 30% of your final grade.
Below is a list of the main topics covered in the midterm exam. Please note that this is not an exclusive list of all topics, just an outline of the main topics to guide through the process of studying for the midterm exam. You should always consult the textbook and lecture slides for the complete list of sub-topics.
Topics
- Introduction to software engineering (Chapter 1)
- What is software engineering and its relation to closely related fields?
- Why is Software Engineering important?
- What are some technical challenges surrounding software engineering?
- What are some ethical issues impacting software engineering?
- What are the costs developing and maintaining software?
- Why do software projects fail?
- Why is software engineering so hard?
- What are the core principles in software engineering? Specification -> Translation -> Iteration.
- Abstractions: breaking the problem into something that is understandable.
- Why is abstraction considered the primary tool in software engineering?
- What are the characteristics of good software?
- What makes a good software? issues and characteristics
- What makes a bad software? issues and characteristics.
- What are some best software engineering techniques and practices?
- Types of software applications and projects.
- The software process from specification -> development -> validation -> maintenance -> evolution.
- Fundamental engineering principles that also apply to software engineering.
- The cloud and software engineering
- Software reuse
- Agile development
- Example applications and case studies
- Software Processes (Chapter 2)
- Specification, Design, Implementation, Validation, and Evolution.
- What are the activities in these processes?
- Plan-driven processes vs Agile processes
- Software Life cycles and how they make software development predictable, repeatable, measurable, and efficient.
- Software Life cycle models
- Waterfall: plan-driven, linear, sequence of distinct phases
- Incremental: agile or plan driven
- Integration and configuration: agile or plan driven
- Software Life cycles:
- “Code and Fix” (The anti life cycle)
- Waterfall: What is it? Advantages and disadvantages? Who uses it?
- Rapid Prototyping: What is it? Advantages and disadvantages? Who uses it?
- Incremental: What is it? Advantages and disadvantages? Who uses it?
- Spiral Model
- Rational Unified Process:
- Code reuse (also called software reuse)
- Requirements engineering
- Software Specifications
- Software Design
- Software Implementation
- Software Validation
- Software Evolution
- How to deal with change? Why fear change? How to celebrate change?
- The benefits of software prototyping and how to develop them?
- How does the concept of incremental delivery work?
- Rapid development and incremental delivery.
- How to improve your software development process? measure, analyze, learn, and make a change.
- Agile Software Development (Chapter 3)
- What is agile in software project management?
- The agile manifesto.
- Plan-driven vs agile
- Agile frameworks:
- Scrum
- Roles of the Scrum team: product owner, Scrum master, and developers
- Backlog
- user stories
- scenarios
- Sprints
- Sprint planning
- Standups
- Velocity
- Ceremonies
- Retrospectives
- Benefits of Scrums
- Extreme Programming (XP)
- Similarities to Scrum and differences
- What is taken to the extreme level in XP?
- Collective code ownership
- Peer programming: What is it? Why is it important?
- Test-Driven-Development (TDD)
- Test automation
- Continuous integration (CI) and continuous delivery (CD)
- Small releases
- Code refactoring
- Benefits of XP
- Kanban
- Boards: To do, in progress, and done
- What is Kanban’s work in progress (WIP) limits? Why is it important?
- Scrum
- What is Test-Driven-Development, examples, and its importance?
- What is test automation and example frameworks?
- What is continuous integration (CI) and CI examples?
- What is code refactoring and its importance?
- What are “code smells”? Examples
- Agile maintenance: challenges and culture
- Issues related to people, teams, and culture
- Agile and scalability
- Architectural Design (Chapter 6)
- Architectural design decisions
- Agile and Architecture
- Refactoring Architecture
- What are architectural patterns?
- Generic application architectures.
- How to decompose the system into sub-components?
- How to document the system architecture?
- Well-architected systems for Performance, Security, and Maintainability
- Architecture selection
- Architectural diagrams
- Notations and models
- Advantages and examples
- Architectural views: logical, process, development, and physical views
- Architectural patterns
- Proven software architectural solutions to common applications.
- Pattern templates: Description, example, when to use, advantages and disadvantages.
- MVC (Model-View-Controller)
- Layered architecture
- Client-server architecture
- Three-tier architecture: Presentation tier, Logic tier, and Data tier.
- Pipe and filter architecture
- Application architectures
- architectural choices for common application types:
- Batch processing
- Transaction processing
- Event processing
- Language processing systems
- architectural choices for common application types:
- Architectural design decisions
- Design and Implementation (Chapter 7)
- Build vs Buy
- Object-oriented design process: identifying objects and classes, design models, and diagrams
- sequence and state diagrams
- Design patterns:
- proven solutions to common design problems
- Pattern elements: Name, problem description, solution description and consequences.
- OOP Design Patterns Example: Observer
- Implementation issues
- Code reuse
- Configuration management
- Version Management
- Version Control System (CVS)
- Bug reporting and tracking systems
- Software environment problems: host and target (production) environments
- Development tools: text editors, IDEs, testing frameworks (e.g., JUnit), and project management tools
- Continuous Integration (CI) tools
- Open source development
- Platforms
- Collaboration
- Licensing: How to choose a license?
Type of questions
The questions will be in the form of brief questions that require written answers of a few sentences.
Preparation
The questions are based on key concepts and test your understanding to these concepts as opposed to memorizing them. It’s about knowing the materials, so don’t just memorize. Understand. You may prepare for this exam by reviewing the textbook, lecture slides, lecture notes, and assigned readings.
You should be able to define terms and concepts as well as providing examples for each concept, so you can organize your ideas and articulate your answers. Try to distinguish between closely related methods or frameworks and understand the benefits and limitations of each one (e.g., when it’s the right time/stage of the software development cycle to use it?). You should also be able to provide answers that demonstrate the technical background you have gained to use a variety of tools as a Software Engineers to apply the key concepts in building software applications.