Learning Outcomes
Software Engineering
π Can explain pros and cons of software engineering 
Requirements
Requirements
π Can explain requirements 
π Can explain non-functional requirements 
π Can explain prioritizing requirements 
π Can explain quality of requirements 
Gathering
π Can explain brainstorming 
π Can explain user surveys 
π Can explain observation 
π Can explain interviews 
π Can explain focus groups 
π Can explain prototyping 
π Can explain product surveys 
Specifying
π Can explain prose 
π Can explain feature list 
π Can write simple user stories 
π Can write more detailed user stories 
π Can use user stories to manage requirements of project 
π Can explain use cases 
π Can use use cases to list functional requirements of a simple system 
π Can specify details of a use case in a structured format 
π Can optimize the use of use cases 
π Can explain glossary 
π Can explain supplementary requirements 
Design
Software Design
π Can explain what is software design 
π Can explain multi-level design 
π Can explain top-down and bottom-up design 
π Can explain agile design 
Design Principles
π Can explain abstraction 
π Can explain coupling 
π Can reduce coupling 
π Can identify types of coupling 
π Can increase cohesion 
π Can explain cohesion 
π Can explain dependency inversion principle (DIP) 
π Can explain open-closed principle (OCP) 
Object Oriented Programming
π Can describe OOP at a higher level 
π Can describe how OOP relates to the real world 
π Can explain the abstraction aspect of OOP 
π Can explain the encapsulation aspect of OOP 
π Can explain the relationship between classes and objects 
π Can explain class-level members 
π Can explain the meaning of enumerations 
π Can explain associations 
π Can explain the meaning of navigability 
π Can explain the meaning of multiplicity 
π Can explain dependencies among classes 
π Can explain the meaning of composition 
π Can explain the meaning of aggregations 
π Can explain the meaning of association classes 
π Can explain the meaning of inheritance 
π Can explain method overriding 
π Can explain method overloading 
π Can explain interfaces 
π Can implement abstract classes 
π Can explain dynamic and static binding 
π Can explain substitutability 
π Can explain OOP polymorphism 
π Can explain how substitutability operation overriding, and dynamic binding relates to polymorphism 
π Can explain how modelling can be used before implementation 
π Can use simple class diagrams and sequence diagrams to model an OO solution 
π Can use intermediate class diagram and sequence diagram concepts to model an OO design 
π Can answer frequently asked OOP questions 
π Can combine some OOP concepts 
Modeling
π Can explain models 
π Can explain how models are used 
π Can identify UML models 
π Can use basic-level class diagrams 
π Can use intermediate-level class diagrams 
π Can use advanced class diagrams 
π Can explain object diagrams 
π Can explain object oriented domain models 
π Can explain deployment diagrams 
π Can explain component diagrams 
π Can explain package diagrams 
π Can explain composite structure diagrams 
π Can explain activity diagrams 
π Can draw basic sequence diagrams 
π Can draw intermediate-level sequence diagrams 
π Can interpret advanced sequence diagrams 
π Can explain use case diagrams 
π Can explain timing diagrams 
π Can explain interaction overview diagrams 
π Can explain communication diagrams 
π Can explain state machine diagrams 
π Can combine some modeling concepts 
Architecture
π Can explain Software Architecture 
π Can interpret an architecture diagram 
π Can draw an architecture diagram 
π Can explain architectural styles 
π Can identify n-tier architectural style 
π Can identify client-server architectural style 
π Can identify transaction processing architectural style 
π Can identify service-oriented architectural style 
π Can identify event-driven architectural style 
π Can name several other architecture styles 
π Can explain how architectural styles are combined 
Design Patterns
π Can explain design patterns 
π Can explain design patterns format 
π Can explain the Singleton design pattern 
π Can apply the Singleton design pattern 
π Can decide when to apply Singleton design pattern 
π Can explain the Abstraction Occurrence design pattern 
π Can explain the Facade design pattern 
π Can explain the Command design pattern 
π Can explain the Model View Controller (MVC) design pattern 
π Can explain the Observer design pattern 
π Can combine multiple patterns to fit a context 
π Can recognize some of the GoF design patterns 
π Can explain pros and cons of design patterns 
π Can explain how patterns exist beyond software design domain 
π Can differentiate between design patterns and principles 
Implementation
IDEs
π Can explain IDEs 
π Can explain debugging 
Code Quality
π Can explain the importance of code quality 
π Can explain the importance of readability 
π Can follow basic guidelines for improving readability 
π Can follow intermediate guidelines for improving readability 
π Can follow advanced guidelines for improving readability 
π Can explain the need for following a standard 
π Can follow simple mechanical style rules 
π Can follow intermediate style rules 
π Can explain the need for good names in code 
π Can follow basic guidelines for naming 
π Can follow intermediate guidelines for naming 
π Can explain the need for avoiding error-prone shortcuts 
π Can follow basic guidelines for avoiding unsafe shortcuts 
π Can follow intermediate guidelines for avoiding unsafe shortcuts 
π Can explain the need for commenting minimally but sufficiently 
π Can follow basic guidelines for writing code comments 
π Can follow intermediate guidelines for writing code comments 
Refactoring
π Can explain refactoring 
π Can apply some basic refactoring 
π Can decide when to apply a given refactoring 
Documentation
π Can explain the two types of developer docs 
π Can distinguish between top-down and bottom up documentation 
π Can explain the advantages of top-down documentation 
π Can write documentation in a top-down manner 
π Can explain the need for comprehensibility in documents 
π Can write reasonably comprehensible developer documents 
π Can write minimal yet sufficient documentation 
π Can explain documentation should be minimal yet sufficient 
π Can write Javadoc comments 
π Can explain JavaDoc 
π Can explain Markdown 
π Can write documents in Markdown format 
π Can explain AsciiDoc 
Error Handling
π Can explain error handling 
π Can explain exceptions 
π Can do exception handling in code 
π Can avoid using exceptions to control normal workflow 
π Can explain assertions 
π Can use assertions 
π Can use assertions optimally 
π Can explain logging 
π Can use logging 
π Can explain defensive programming 
π Can use defensive coding to enforce compulsory associations 
π Can use defensive coding to enforce 1-to-1 associations 
π Can use defensive coding to enforce referential integrity of bi-directional associations 
π Can explain when to use defensive programming 
π Can explain the Design-by-Contract approach 
Integration
π Can explain integration 
π Can explain how integration approaches vary based on timing and frequency 
π Can explain how integration approaches vary based on amount merged at a time 
π Can explain how integration approaches vary based on the order of integration 
π Can explain build automation tools 
π Can explain continuous integration and continuous deployment 
π Can combine some integration concepts 
OOP Implementation
π Can implement classes 
π Can implement class-level members 
π Can implement associations 
π Can implement dependencies 
π Can implement composition 
π Can implement aggregation 
π Can implement association classes 
π Can implement basic inheritance 
π Can implement operation overriding 
π Can implement overloading 
π Can implement interfaces 
π Can implement abstract classes 
π Can implement polymorphism 
Reuse
π Can explain software reuse 
π Can explain the costs and benefits of reuse 
π Can explain APIs 
π Can design reasonable quality APIs 
π Can explain libraries 
π Can make use of a library 
π Can explain frameworks 
π Can differentiate between frameworks and libraries 
π Can explain platforms 
π Can explain cloud computing 
π Can distinguish between IaaS, PaaS, and SaaS 
Quality Assurance
Quality Assurance
π Can explain software quality assurance 
π Can explain validation and verification 
π Can explain code reviews 
π Can explain static analysis 
π Can explain formal verification 
Testing
π Can explain testing 
π Can explain testability 
π Can explain unit testing 
π Can use stubs to isolate an SUT from its dependencies 
π Can explain integration testing 
π Can explain system testing 
π Can explain alpha and beta testing 
π Can explain dogfooding 
π Can explain developer testing 
π Can explain the need for early developer testing 
π Can explain exploratory testing and scripted testing 
π Can explain the choice between exploratory testing and scripted testing 
π Can explain acceptance testing 
π Can explain the differences between system testing and acceptance testing 
π Can explain regression testing 
π Can explain test automation 
π Can semi-automate testing of CLIs 
π Can explain test drivers 
π Can explain test automation tools 
π Can explain automated GUI testing 
π Can explain test coverage 
π Can explain how test coverage works 
π Can explain dependency injection 
π Can use dependency injection 
π Can explain TDD 
π Can follow TDD 
Test Case Design
π Can explain the need for deliberate test case design 
π Can explain positive and negative test cases 
π Can explain black box and glass box test case design 
π Can explain equivalence partitions 
π Can apply EP for pure functions 
π Can apply EP for OOP methods 
π Can explain boundary value analysis 
π Can apply boundary value analysis 
π Can explain the need for strategies to combine test inputs 
π Can explain some basic test input combination strategies 
π Can apply heuristic βeach valid input at least once in a positive test caseβ 
π Can apply heuristic βno more than one invalid input in a test caseβ 
π Can apply multiple test input combination techniques together 
π Can explain test case design for use case based testing 
π Can explain test case design techniques at a higher level 
π Can combine test case design techniques 
Project Management
Revision Control
π Can explain revision control 
π Can explain repositories 
π Can explain saving history 
π Can explain using history 
π Can explain remote repositories 
π Can explain branching 
π Can explain DRCS vs CRCS 
π Can explain forking workflow 
π Can explain feature branch flow 
π Can explain centralized flow 
Project Planning
π Can explain work breakdown structures 
π Can explain milestones 
π Can explain buffers 
π Can explain issue trackers 
π Can explain GANTT charts 
π Can explain PERT charts 
Teamwork
π Can explain common team structures 
Process Models
π Can explain SDLC process models 
π Can explain sequential process models 
π Can explain iterative process models 
π Can explain agile process models 
π Can explain XP 
π Can explain scrum 
π Can explain the Unified Process 
π Can explain CMMI 
π Can explain process models at a higher level 
UML
π Can explain/identify class diagrams 
π Can draw UML classes 
π Can interpret simple associations in a class diagram 
π Can interpret association navigabilities in class diagrams 
π Can explain/use association roles in class diagrams 
π Can explain/use association labels in class diagrams 
π Can explain what is the multiplicity of an association 
π Can use dependencies in a class diagram 
π Can show an association as an attribute 
π Can interpret enumerations in class diagrams 
π Can interpret class-level members in class diagrams 
π Can interpret association classes in class diagrams 
π Can interpret composition in class diagrams 
π Can interpret aggregation in class diagrams 
π Can interpret class inheritance in class diagrams 
π Can interpret abstract classes in class diagrams 
π Can interpret interfaces in class diagrams 
π Can explain/identify sequence diagrams 
π Can interpret sequence diagrams with basic notation 
π Can interpret sequence diagrams with object creation 
π Can interpret sequence diagrams with object deletion 
π Can interpret sequence diagrams with loops 
π Can interpret sequence diagrams with self invocation 
π Can interpret sequence diagrams with alternative paths 
π Can interpret sequence diagrams with optional paths 
π Can interpret sequence diagrams with parallel paths 
π Can interpret sequence diagrams with reference frames 
π Can interpret sequence diagrams with minimal notation 
π Can explain/identify object diagrams 
π Can draw UML objects 
π Can interpret object diagrams 
π Can explain activity diagrams 
π Can interpret linear paths in activity diagrams 
π Can interpret alternate paths in activity diagrams 
π Can interpret parallel paths in activity diagrams 
π Can use rakes in activity diagrams 
π Can explain swimlanes in activity diagrams 
π Can use basic activity diagram notations 
π Can use UML notes 
π Can specify constraints in UML diagrams 
π Can distinguish between class diagrams and object diagrams 
Intellij IDEA
π Can setup a project in an IDE 
π Can navigate code effectively using IDE features 
π Can use some useful IDE productivity shortcuts 
π Can step through a program using a debugger 
π Can use automated refactoring features of the IDE 
Git and GitHub
π Can create a local Git repo 
π Can commit using Git 
π Can set Git to ignore files 
π Can tag commits using Git 
π Can load a specific version of a Git repo 
π Can use Git to stash files 
π Can clone a remote repo 
π Can pull changes from a repo 
π Can push to a remote repo 
π Can use Git branching 
π Can use Git to resolve merge conflicts 
π Can create PRs on GitHub 
π Can review and merge PRs on GitHub 
π Can follow Forking Workflow 
Java
π Can use Java Collections 
π Can use Java enumerations 
π Can use Java varargs feature 
π Can use JavaFX to build a simple GUI 
π Can use Java8 streams 
JUnit
π Can use simple JUnit tests 
π Can use intermediate features of JUnit 
Supplementary
SE Principles
π Can explain single responsibility principle 
π Can explain interface segregation principle 
π Can explain Liskov Substitution Principle 
π Can explain dependency inversion principle 
π Can explain SOLID Principles 
π Can explain separation of concerns principle 
π Can explain the Law of Demeter 
π Can explain Brooks' law 
π Can explain YAGNI principle 
π Can explain DRY principle 
π Can combine some principles concepts 
Review
π Can combine software engineering concepts 