Course Advanced Software Design (Fall 2022 - HSE University)
The course learning objective is to understand modern software design and practice design and modeling methods in a team project
Official course page https://www.hse.ru/en/ma/se/courses/646474885.html
Contents
Course topics
Module 1
# | Week | Section | Topic | Practice |
---|---|---|---|---|
1. | Sep 6th | INTRO | Course introduction. Software quality and requirements. Why do we need good architecture? | Define project and form teams |
2. | Sep 13th | REQ | Software requirements primer. Functional/non-functional. Elicitation and specification. Methods: structured text, scenarios, features/jobs in JTBD. Overview of testing approaches | Requirements checklist. Jobs-to-be-done. Identification of jobs and features |
3. | Sep 20th | UML2 | Object oriented design. Type systems. Abstract data types. UML2 basic class models. Reminder: data modeling and database design. ER diagrams (crow-foot) vs. UML2 data modeling. | Develop scenarios, use cases and job stories |
4. | Sep 27th | DDD | Introducing Domain Driven Design (DDD). How to find classes? Checklists, noun phrases, language concepts. Domain modeling: ubiquitous lang, bounded context. Elements: entities, value objs, aggregates, services | TBD |
5. | Oct 4th | DDD | DDD and Responsibility Driven Design (RDD) as a method to decompose behavior among objects. Collaborations, roles and interfaces. Interface implementation. Reminder: Interaction modeling in UML2. | TBD |
6. | Oct 11th | UML2 | DDD. Behavior modeling 2. Algorithms. UML2 behavior modeling. Basic activities. Statecharts. Describe UML2 Big Picture for logical modeling | TBD |
7. | Oct 18th | UML2 | Consistency and semantics of UML2 models. Big picture UML2. Agile modeling | Project 1 report |
8. | Oct 25th | EXAM | Final exam Module 1. | Project 1 report |
Module 2
# | Week | Section | Topic | Practice |
---|---|---|---|---|
9. | Nov 1st | ARCH | General structured design approach (contrast with e.g. tuning). Decomposition principles. Modularization. Cohesion and coupling. Structure charts and dataflow modeling. Define software architecture, reference architecture, 4+1 views or C4 model and basic styles | Define project 2. Task statement. Practice structured methods (e.g. Stepwise refinement) |
10. | Nov 8th | MSA | Definition of resources and microservices. Microservices identification in bounded contexts. Conway's Law. Domain integrations in DDD. Sync/async APIs | TBD |
11. | Nov 15th | MSA | Hexagonal and microservices architecture (MSA). API patterns: BFF, API GW, Client Integration. Implementation of RESTful HTTP service. Basic internet tech: DNS, TCP/IP, HTTP/1.1, WebSockets. How to select and evaluate COTS. Licensing. | TBD |
12. | Nov 22th | MSA | How to implement a microservice using frameworks OO languages. SOLID principles. Frameworks. Define design patterns. Classification of patterns. | TBD |
13. | Nov 29th | MSA | Data storage in applications and MSA. Reminder: relational and NoSQL DBMSs. Transactions and state management. ACID and BASE. Data access patterns. | TBD |
14. | Dec 6th | MSA | Detailed design for microservices and MSA. Applications and alternatives of object-oriented patterns (GoF). Microservices patterns. | TBD |
15. | Dec 13th | ARCH | What is good/bad design? Coherence/coupling metrics. OOP metrics Chidamber/Kemerer. MSA metrics | TBD |
16. | Dec 20th | EXAM | Course overview and design recap. Preliminary exam | Project 2 report. |
17. | Dev 27th | EXAM | Exam module 2. Final exam | Project 2 report. |
Team project
Project 1 and Project 2 are team projects. Expect to work on each of the projects in as a team of 3-5 persons.
Project 1
First project is about developing software requirements and requirements modeling using DDD. Main activities are product requirements analysis, feature and use case decomposition, define project scope. As a result for the project, expect to detail 3-4 use cases or 5-6 user or job stories in 2-3 features for a medium sized project.
What you will learn:
- requirements analysis: use cases, job/user stories, data flow models, functional decomposition
- DDD: ubiquitous language, domain contexts, concept/noun phrase extraction, domain modeling, responsibility analysis, class design: service, entity, aggregate, value object, and others
- UML2: class diagrams, use cases, activities and interaction design
- ERD: data design, Entity-Relationship modeling
Project 2
In this project you decompose an analysis model of the system into services (microservices), develop APIs and architect an application along microservices architecture (MSA). You apply architectural patterns, RDBMS and NoSQL data design and data access patterns, SOLID and OOD design patterns to microservices. As a result you will have a design model of a microservices application, that implements requirements developed in Project 1. Expect to design 3-5 communicating microservices.ачи первого задания.
What you will learn:
- DDD: decompose and integrate bounded context, develop a design model for services and resources
- MSA: OpenAPI for RESTful web services, hexagonal architecture, SOLID, GoF design patterns, Backend-for-Frontend and other patterns
- Data: ER data design, schema-on-read method, Hub-and-Spoke data architecture, NoSql data models
- UML2: component diagram, data-flow modeling and others
Course practice
Students analyse and design a microservices or monolithic application in teams of 3-4 persons. This includes elaboration of the initial problem, requirements specification, architectural and detailed design using modeling languages.
Students may switch teams once during each Module. Teams may switch project topics before Module 2 starts.
In companion to the team projects, students solve software design problems and study design of existing open source systems.
Individual assignments also include writing a short essay on a research topic in software design from a list provided by instructors.
Course grading
Module grade = 0.1 * Attendance + 0.45 * Team Project + 0.1 * Essay + 0.35 * Practice
Module grade cannot exceed 10. The final grade is an average of Module 1 and Module 2 grades rounded up.
Attendance is 0..10 and covers lectures and practice sessions, 10 is all but one week of absence.
Team Project is 0..12 is proportional to project score achieved by the team, score includes completed project assignments during the practice and the final project report in each Module. Score 9 is given for a project well-done, a greater score may be achieved for larger projects, more detailed solutions or more complex project topics.
Essay is {0, 5, 10}.
Practice is 0..10 is proportional to individual activity during the practice sessions, including reporting for the team, reports at the blackboard etc.
Books
- Newman, S. Building microservices. - O'Reilly Media, Inc. - 2021.
- Vernon, V. Implementing domain-driven design. - Addison-Wesley. - 2013.
- Freeman, E., & Robson, E. Head First Design Patterns. - O'Reilly Media. - 2020.
- Sommerville, I. Software Engineering 10th ed. - PEarson Higher Ed. - 2015.
Resources
Additional sources:
- Notation summary for UML 2 uml2-notation.zip
- Meyer B., Object-oriented software construction 2nd Ed. - Pearson. - 2005
- Microsoft. Azure application architecture fundamentals, [https://docs.microsoft.com/en-us/azure/architecture/guide/| at microsoft.com]]
- UML 2.5.1 Specification at OMG. (http://www.omg.org/spec/UML/)
Classical papers on software design:
- (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive?
- N. Wirth. Program Development by Stepwise Refinement. (http://www.inf.ethz.ch/personal/wirth/Articles/StepwiseRefinement.pdf)
- D. Parnas. On the Criteria to be used in Decomposing System into Modules (http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf)
- D. Garlan, M. Shaw. An Introduction to Software Architecture (http://www.cs.cmu.edu/afs/cs/project/vit/ftp/pdf/intro_softarch.pdf)
- Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 (http://c2.com/doc/oopsla89/paper.html)
- Doug Rosenberg, Kendall Scott, The ICONIX Process, (http://www.informit.com/articles/printerfriendly.aspx?p=167902)
- B. Liskov. Programming with abstract data types
- Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming
- Rebecca Wirfs-Brock, Object-oriented design. A responsibility-driven approach
- Robert C. Sharblet, Samuel S. Cohen. The object-oriented brewery. A comparison of two object-oriented development methods
- P. Krutchen. Architectural Blueprints—The “4+1” View Model of Software Architecture, (http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf)
- IEEE Recommended practice for architectural description of software intensive systems, (http://www.win.tue.nl/~wsinmak/Education/2II45/software-architecture-std1471-2000.pdf)
- M. Fowler. Who need an Achitect?, http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
- D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/
- Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL (google it)
- The Agile Method and Other Fairy Tales (google it)
- A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it)
- Edward V. Berard. Be Careful With “Use Cases”
- (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective
- McCabe. A complexity measure
Design patterns:
- Antipatterns Wiki, http://c2.com/cgi/wiki?AntiPatternsCatalog
- Error handling patterns, http://c2.com/cgi/wiki?ExceptionPatterns
- Microservices patterns, https://microservices.io
- GoF. Design Patterns: elements of reusable object-oriented software
- DoubleDispatch and DoubleDispatchExample, https://wiki.c2.com/?DoubleDispatch
- Jenifer Tidwell, Designing Interfaces
- Scott Ambler, Process Patterns
- Martin Fowler, Analysis Patterns
- Martin Fowler, Patterns of Enterprise Application Architecture
- G. Hohpe, Enterprise Integration Patterns
- D. Greer, Interactive Application Architecture, http://aspiringcraftsman.com/2007/08/25/interactive-application-architecture/
- Pattern-Oriented Software Architecture (несколько томов), http://www.cs.wustl.edu/~schmidt/POSA/
- C++ Idioms, http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms
- Linda Rising - Patterns Almanac 2000, http://www.smallmemory.com/almanac/