Review slides, notes, and workshop materials. This is a comprehensive exam over the entire semester. Exam will be closed book. However, as a good study practice, it is suggested you prepare a one page summary of key definitions and terms in order to help you learn and practice the material.
- Implement software engineering practices in a team project.
- Identify practices related to software process.
- Decide how to test a system and measure coverage.
- Compare and contrast design techniques and architectural patterns.
- Measure the quality of software code.
- Build tools for supporting software engineering tasks.
- Evaluate evidence related to a software practice.
- Identify configuration management practices for improving maintanance of software
- Apply deployment practices and patterns.
- Describe why agile software development was created
- Explain why each of the core practices of Extreme Programming (XP) are effective
- Explain why each of the corollary practices of XP may be effective
- Analyze which XP practices are applicable you should use in your team
- Explain how to apply scrum and iteration planning to a project.
- Design notation
- Understand use cases, wireframes, storyboards
- Understand core concepts related Design Patterns
- Identify an architecture when you see it
- Pick an appropriate architecture for a problem
- Compare and contrast architectural choices
- Understand MVVM and databinding
- How to design an API
- Understand REST verbs
- Explain REST principles
- Explain difference between a framework and API
- Use and explain above concepts in designing a product.
- List and define different types of testing (e.g. acceptance testing vs integration testing)
- Compare and contrast black-box testing and white-box testing
- Generating test cases based on black-box testing.
- Generating test cases based on white-box testing.
- Define test harness, tear-down, setup, test cases, test suite, assertions
- Explain Test-driven testing (TDD)
- Implement unit tests and necessary assertions for testing a system. Design a detailed testing strategy for a product, with appropriate arguments for types of testing used, explanations of trade-offs, and concrete implementation plans.
- Define mocking.
- Explain mocking versus other approaches (e.g. dependency injection)
- Explain advantages and disadvantages of mocking.
- Implement mocking of RESTful services, database, or file system interfaces.
- Explain web testing with selenium
- Implement xpath expressions for asserting web page behavior
- Understand metrics, including complexity, OO, and other techniques.
- Understand and derive program graph from code snippet.
- Define line, branch, condition, branch-condition and MCDC coverage.
- Explain subsumption and why and when one type of coverage may subsume another.
- Calculate line, branch, condition coverage.
- Identify other kinds of coverage: path coverage, mutation testing, data-flow coverage.
- Explain benefits and disadvantages of using Visitor pattern in static analysis.
- Identify several uses cases for static analysis.
- Explain issues and benefits related to static analysis (e.g. versus dynamic analysis or verification.).
- Implement static analysis for measuring errors or code quality measures.
- Explain how to collect evidence about a software engineering practice.
- Explain issues related to interviews
- Identity possible interviews and strategies to improve interviews
- Understand core concepts related to Configuration Management
- Identity traditional and modern components and practices related to configuration management
- Explain issues related to (not using configuration management)
- Design and apply configuration management concepts to a project.
- Explain differences between continuous integration, deployment, and delivery
- Explain operations responsibility models and team values
- Identity Deployment Strategies
- 10 Adages Paper
- Identity components of cloud infrastructure
- Explain underlying issues related to infrastructure components
- Understand microservices
- Design and apply infrastructure concepts for the design of a scalable and resilence application.
- Explain concepts related to docker, vagrant, and ansible
- Describe common issues and strategies related to productivity
- Describe impact related to context switching
- List the problems that PSP solves.
- List the items that can be tracked (traditionally and modern sense).
- Explain how progress can monitored and measured.
- Explain benefits and issues related to using PSP.
- Design a PSP system to track your progress as a developer.
- List some examples of social software processes.
- Explain benefits related to social software processes.
- Explain issues that may arise with use of social software processes.
- Design a Social Software Process that can be used by a software company or community.