CPSC 310 Software Engineering # UBC CPSC - Software Engineering Resources These are the resources used for CPSC 310 at the University of British Columbia. This course is a comprehensive introduction to how modern software systems are designed, constructed, and evolved. It is intended to be paired with a development-heavy project to better reenforce the core concepts from lecture materials and to enable concepts to be applied in practice. The materials have been adapted over several years of use, although each section of the course may use different subsets of the readings and videos. This is a high-level overview of what the course will be about. Expect this list to change, although we will commit to freezing the schedule and videos for each upcoming week by the end of the previous Thursday so you will be able to watch the correct videos and complete the survey for that week. The materials roughly break down into 6 high-level modules that are spread across the 13 week of standard academic semester at UBC. Readings and videos are available for most course concepts. ## 0: Introduction * Readings: * [Introduction](readings/Introduction.md) * [Teamwork](readings/Teamwork.md) * [Languages](readings/Languages.md) * [Async](readings/Async.md) * [Async Cookbook](readings/cookbooks/async.md) * [Git Cookbook](readings/cookbooks/git.md) * Videos: * [Course Introduction](http://www.youtube.com/watch?v=3tXzYUVQlrM) * [Capstone Project Overview](http://www.youtube.com/watch?v=NQCyiD-Fh9Q) * [Running Example Introduction](http://www.youtube.com/watch?v=S4GEa6JMo4I) * [Programming Language Introduction](http://www.youtube.com/watch?v=U-ihh6bsDz4) * [Introduction to Concurrency and Asynchronous Development: Part 1](http://www.youtube.com/watch?v=T__CJfXswbA) * [Introduction to Concurrency and Asynchronous Development: Part 2](http://www.youtube.com/watch?v=ZyiLFip7nqk) * [Introduction to Concurrency and Asynchronous Development: Part 3](http://www.youtube.com/watch?v=xwSUBY2tIm4) ## 1: Testing * Readings: * [Testing](readings/Testing.md) * [Testability & Assertions](readings/TestabilityAssertions.md) * [Glass Box Testing](readings/GlassBoxTesting.md) * [Black Box Testing](readings/BlackBoxTesting.md) * [Fuzz & Mutation Testing](readings/AdvancedTesting.md) * Videos: * Testing overview: * [Why Test?](http://www.youtube.com/watch?v=Uamo4Ej0tWk) * [Terminology](http://www.youtube.com/watch?v=WKrvx7qCUDI) * [Properties of Tests](http://www.youtube.com/watch?v=ll1k3Pks3ZA) * [Kinds of Tests](http://www.youtube.com/watch?v=_Th3f9vks_w) * [Unit and System Properties](http://www.youtube.com/watch?v=x2DWjxDiOQo) * [Red Green Refactor](http://www.youtube.com/watch?v=v0q1MKhSQVM) * Testability: * [Introduction to Testability](http://www.youtube.com/watch?v=jwL1vkl-CoY) * [Controllability](http://www.youtube.com/watch?v=y0zrTdDuYv0) * [Observability](http://www.youtube.com/watch?v=CJhJibMCTUM) * [Isolateability: Part 1](http://www.youtube.com/watch?v=Z93-c4ngxGw) * [Isolateability: Part 2](http://www.youtube.com/watch?v=NMuhE-XnFe8) * [Automatability](http://www.youtube.com/watch?v=Q83W5zH8LUY) * [Testability Wrap-Up](http://www.youtube.com/watch?v=d2WjviF50HA) * [Assertions](http://www.youtube.com/watch?v=DCAFxgUXM4I) * [Assertions Example](http://www.youtube.com/watch?v=Y0GEftJ5MB0) * White box testing: * [Introduction to Coverage](http://www.youtube.com/watch?v=iujQEm9oono) * [Line and Statement Coverage](http://www.youtube.com/watch?v=SC7R-QixRaU) * [Branch and Path Coverage](http://www.youtube.com/watch?v=YBiHn5vgKnM) * [Coverage Wrap-Up](http://www.youtube.com/watch?v=2EBi66DYF5w) * Black Box Testing: * [Equivalence Class Partitioning](http://www.youtube.com/watch?v=ttAAsNSPiXw) * [Input Partitioning](http://www.youtube.com/watch?v=5PtxXnwyU3Y) * [Output Partitioning](http://www.youtube.com/watch?v=0yvHDKI-DSA) * [Boundary Value Analysis](http://www.youtube.com/watch?v=IRQU_fHKUa0) ## 2: Process * Readings: * [Process & Agile](readings/Process.md) * [Specifications](readings/Specifications.md) * [User Stories](readings/SpecificationsUserStories.md) * Videos: * Process: * [Why Process?](http://www.youtube.com/watch?v=dtK561i_wX4) * [Waterfall](http://www.youtube.com/watch?v=1pQ9-BNTvgs) * [Spiral](http://www.youtube.com/watch?v=Zq6EXTSzf84) * [Extreme Programming](http://www.youtube.com/watch?v=axcRa3YoCQ0) * [Test Driven Development](http://www.youtube.com/watch?v=Ux9QMfEK9Eg) * [Scrum](http://www.youtube.com/watch?v=mjphDWlRQ2c) * Specifications: * [Introduction to Specifications](http://www.youtube.com/watch?v=1rqWeAQ8onI) * [Requirements Process](http://www.youtube.com/watch?v=7r9vXTSSTVc) * [Requirements Properties](http://www.youtube.com/watch?v=9z9T0dxMLJU) * [Requirements Elicitation](http://www.youtube.com/watch?v=PGuPVkNeqJQ) * [Additional Requirements](http://www.youtube.com/watch?v=mUQOuglR6ss) * [Validating Requirements](http://www.youtube.com/watch?v=H4V_lwuznVY) * User Stories: * [Introduction to User Stories](http://www.youtube.com/watch?v=Y7E56dD7Jxw) * [INVEST Guidelines](http://www.youtube.com/watch?v=fqknLz6rdGE) * [User Story and INVEST Example](http://www.youtube.com/watch?v=3b63NxSCxPw) * [Decomposing User Stories: Part 1](http://www.youtube.com/watch?v=qDpfRXGwbG0) * [Decomposing User Stories: Part 2](http://www.youtube.com/watch?v=mKAPOzwK_wM) * [Decomposing User Stories: Part 3](http://www.youtube.com/watch?v=1E-9qzKi1Fc) * [Decomposing User Stories: Part 4](http://www.youtube.com/watch?v=d8zp_-RZNOo) * [Decomposing User Stories: Part 5](http://www.youtube.com/watch?v=1ZPPmmXE_wM) ## 3: High Level Design * Readings: * [High Level Design](readings/HighLevelDesign.md) * [Technical Representations](readings/Representations.md) * [APIs](readings/API.md) * [Design Principles](readings/DesignPrinciples.md) * Videos: * Design overview: * [Introduction to Abstraction](http://www.youtube.com/watch?v=HW_b8S2rD4o) * [Structured Programming](http://www.youtube.com/watch?v=lfzQcwWAh18) * [Decomposition](http://www.youtube.com/watch?v=R3qWYSa2OyU) * [Encapsulation](http://www.youtube.com/watch?v=aPTqsdbyhcQ) * [Information Hiding](http://www.youtube.com/watch?v=f6H2w874TKc) * [Constant Change](http://www.youtube.com/watch?v=a-vT-01x4TI) * Coupling & Cohesion: * [Coupling: Part 1](http://www.youtube.com/watch?v=I9rEvxiWF9I) * [Coupling: Part 2](http://www.youtube.com/watch?v=QZAacpnjVVg) * [Cohesion: Part 1](http://www.youtube.com/watch?v=oMJNS6mvhQU) * [Cohesion: Part 2](http://www.youtube.com/watch?v=gkCIOUbu81o) * Design Principles: * [Design Guidance and Symptoms](http://www.youtube.com/watch?v=_Eb5bAgpgQg) * [Single Responsibility Principle](http://www.youtube.com/watch?v=QQ26-dkzEdM) * [Open/Closed Principle](http://www.youtube.com/watch?v=815hXPR_kHo) * [Liskov Substitution Principle](http://www.youtube.com/watch?v=8UG6P1a8rKg) * [Interface Segregation Principle](http://www.youtube.com/watch?v=x_9QJ83oj2k) * [Dependency Inversion Principle](http://www.youtube.com/watch?v=BJr2yG-Hn7g) * Design Representations: * [Technical Representations](http://www.youtube.com/watch?v=6LoW1iu05z4) * [Diagrams](http://www.youtube.com/watch?v=Y4oyXMt1cAw) * [Views](http://www.youtube.com/watch?v=2v3IBQr5Yvw) * [Static Vs. Dynamic](http://www.youtube.com/watch?v=0jes604qWfE) * [Deployment Diagrams](http://www.youtube.com/watch?v=MX7XzEUVc4Y) * [State Machine Diagrams](http://www.youtube.com/watch?v=XaacVyfZ3ds) * API Design: * [Introduction to APIs](http://www.youtube.com/watch?v=HxevR6dZfH8) * [High Level API Design](http://www.youtube.com/watch?v=c7yYrjt6Db4) * [Low Level API Design](http://www.youtube.com/watch?v=OqXw62LWEos) * [API Design Process](http://www.youtube.com/watch?v=mdiP6xO51w0) * [API Usability](http://www.youtube.com/watch?v=2rSTWAZxTns) * [API Platforms and Summary](http://www.youtube.com/watch?v=1nQyHE1uMXE) ## 4: Low Level Design * Readings: * [Low Level Design](readings/LowLevelDesign.md) * [Design Patterns](readings/DesignPatterns.md) * [MV*](readings/MVStar.md) * Videos: * Design Patterns: * [Introduction to Low Level Design](http://www.youtube.com/watch?v=wJ-xnK9O-nU) * [Design Patterns Overview](http://www.youtube.com/watch?v=BHFk5yt_DEs) * [Singleton](http://www.youtube.com/watch?v=V_WbZClazDw) * [Strategy](http://www.youtube.com/watch?v=1MJ_Lj8mebU) * [State](http://www.youtube.com/watch?v=uB4OQ4Am3Rw) * [State and Strategy](http://www.youtube.com/watch?v=Ccpg656MUxE) * [Facade](http://www.youtube.com/watch?v=MdMaHrKQBsU) * [Decorator](http://www.youtube.com/watch?v=la2Jzb8jmqo) * [MVC](http://www.youtube.com/watch?v=regs2s8HMi4) * [MVP](http://www.youtube.com/watch?v=3ULFKSXeLM8) * [MVC and MVP](http://www.youtube.com/watch?v=O-__G6CKICk) ## 5: Construction * Readings: * [Automation](readings/Automation.md) * [Refactoring](readings/Refactoring.md) * [REST](readings/REST.md) * Videos: * Construction: * [Introduction to Construction](http://www.youtube.com/watch?v=z-Q2CIfshcw) * [Non-Structural Properties: Readability](http://www.youtube.com/watch?v=TZ7mfKJa7Sw) * [Static Analysis and Linters](http://www.youtube.com/watch?v=QKK9XAdleFg) * [Automation](http://www.youtube.com/watch?v=HMtyshK3LNU) * [Code Smells](http://www.youtube.com/watch?v=oqqaDaQ3m24) * [Refactoring](http://www.youtube.com/watch?v=bHKyMxvZFXY) * REST: * [REST Development: Part 1](http://www.youtube.com/watch?v=Y8AYxFgwmJk) * [REST Development: Part 2](http://www.youtube.com/watch?v=Aoms-MrqW3g) * [REST Development: Part 3](http://www.youtube.com/watch?v=JiojH8HfUps) ## 6: Information Security, IP, & Ethics * Readings: * [InfoSec](readings/Security.md) * [Ethics](readings/Ethics.md) * [Intellectual Property (IP)](readings/IP.md) * Videos: * Information Security: * [Information Security Introduction](http://www.youtube.com/watch?v=PprrpG7S3gc) * [Information Security: Understanding](http://www.youtube.com/watch?v=PmpkftNf5IA) * [Information Security: Analysis](http://www.youtube.com/watch?v=r0Hb_cqd5Dw) * [Information Security: Mitigation Part 1](http://www.youtube.com/watch?v=TbqJfiFUM2g) * [Information Security: Mitigation Part 2](http://www.youtube.com/watch?v=mZ3_8wjqxFI) * [Information Security: Validation](http://www.youtube.com/watch?v=97pHO22Frpc) * [Information Security Summary](http://www.youtube.com/watch?v=E2ybKiecj2I) * Ethics: * [Ethics Introduction](http://www.youtube.com/watch?v=ZuQm5GJfADY) * [Ethics: Privacy](http://www.youtube.com/watch?v=2QblEuD_M-c) * [Ethics Summary](http://www.youtube.com/watch?v=hgYVHXpwmpk) * Intellectual Property: * [Intellectual Property Introduction](http://www.youtube.com/watch?v=DtEqlRIJpuU) * [Intellectual Property: Trade Secrets](http://www.youtube.com/watch?v=1W-DN4hJcWw) * [Intellectual Property: Trademarks](http://www.youtube.com/watch?v=Rawb58IY4pw) * [Intellectual Property: Copyright](http://www.youtube.com/watch?v=4lTI_Uk0zUs) * [Intellectual Property: Patents](http://www.youtube.com/watch?v=hBclvEPWXjo) * [Intellectual Property: Licenses](http://www.youtube.com/watch?v=3uW9_AGtRVg) * [Intellectual Property Summary](http://www.youtube.com/watch?v=7bcDEDn9CeM) ### License The readings for this course are licensed using [CC-by-SA](https://creativecommons.org/licenses/by-sa/3.0/). However, it is important to note that the deliverable descriptions, code implementing the deliverables, exams, and exam solutions are considered private materials. We go to considerable lengths to make the project an interesting and useful learning experience for this course. This is a great deal of work, and while future students may be tempted by your solutions, posting them does not do them any real favours. Please be considerate with these private materials and not pass them along to others, make your repos public, or post them to other sites online.