asd

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

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.

Project 1 and Project 2 are team projects. Expect to work on each of the projects in as a team of 3-5 persons.

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

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

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.

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.

  1. Newman, S. Building microservices. - O'Reilly Media, Inc. - 2021.
  2. Vernon, V. Implementing domain-driven design. - Addison-Wesley. - 2013.
  3. Freeman, E., & Robson, E. Head First Design Patterns. - O'Reilly Media. - 2020.
  4. Sommerville, I. Software Engineering 10th ed. - PEarson Higher Ed. - 2015.

Additional sources:

  1. Notation summary for UML 2 uml2-notation.zip
  2. Meyer B., Object-oriented software construction 2nd Ed. - Pearson. - 2005
  3. Microsoft. Azure application architecture fundamentals, [https://docs.microsoft.com/en-us/azure/architecture/guide/| at microsoft.com]]
  4. UML 2.5.1 Specification at OMG. (http://www.omg.org/spec/UML/)

Classical papers on software design:

  1. (discussion) P. Ralph, R. Mohanani. Is Requirements Engineering Inherently Counterproductive?
  2. N. Wirth. Program Development by Stepwise Refinement. (http://www.inf.ethz.ch/personal/wirth/Articles/StepwiseRefinement.pdf)
  3. D. Parnas. On the Criteria to be used in Decomposing System into Modules (http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf)
  4. D. Garlan, M. Shaw. An Introduction to Software Architecture (http://www.cs.cmu.edu/afs/cs/project/vit/ftp/pdf/intro_softarch.pdf)
  5. Kent Beck, Ward Cunningham. A Laboratory For Teaching Object-Oriented Thinking / OOPSLA89 (http://c2.com/doc/oopsla89/paper.html)
  6. Doug Rosenberg, Kendall Scott, The ICONIX Process, (http://www.informit.com/articles/printerfriendly.aspx?p=167902)
  7. B. Liskov. Programming with abstract data types
  8. Friedrich Steimann, Philip Mayer. Patterns of Interface-Based Programming
  9. Rebecca Wirfs-Brock, Object-oriented design. A responsibility-driven approach
  10. Robert C. Sharblet, Samuel S. Cohen. The object-oriented brewery. A comparison of two object-oriented development methods
  11. P. Krutchen. Architectural Blueprints—The “4+1” View Model of Software Architecture, (http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf)
  12. IEEE Recommended practice for architectural description of software intensive systems, (http://www.win.tue.nl/~wsinmak/Education/2II45/software-architecture-std1471-2000.pdf)
  13. Frank DeRemer, Hans Kron. PROGRAMMING-IN-THE LARGE VERSUS PROGRAMMING-IN-THE-SMALL (google it)
  14. The Agile Method and Other Fairy Tales (google it)
  15. A RATIONAL DESIGN PROCESS: HOW AND WHY TO FAKE IT (google it)
  16. Edward V. Berard. Be Careful With “Use Cases”
  17. (beware!)Chidamber Kemerer Metrics Suite. A Measurement Theory Perspective
  18. McCabe. A complexity measure

Design patterns:

  1. Microservices patterns, https://microservices.io
  2. GoF. Design Patterns: elements of reusable object-oriented software
  3. DoubleDispatch and DoubleDispatchExample, https://wiki.c2.com/?DoubleDispatch
  4. Jenifer Tidwell, Designing Interfaces
  5. Scott Ambler, Process Patterns
  6. Martin Fowler, Analysis Patterns
  7. Martin Fowler, Patterns of Enterprise Application Architecture
  8. G. Hohpe, Enterprise Integration Patterns
  9. Pattern-Oriented Software Architecture (несколько томов), http://www.cs.wustl.edu/~schmidt/POSA/
  10. Linda Rising - Patterns Almanac 2000, http://www.smallmemory.com/almanac/
  • asd.txt
  • Last modified: 2022/09/05 18:09
  • by user