Các chủ đề thuyết trình theo hướng hệ thống doanh nghiệp
Tài liệu mô tả các chủ đề thuyết trình theo hướng hệ thống doanh nghiệp của môn học Software Engineering Capstone.
1. Quy định chung
- Điểm thuyết trình được chia đều cho các thành viên cho nhóm.
- Nếu nhóm có mong muốn tự chia điểm thuyết trình theo tỷ lệ riêng, thì cần ghi rõ mong muốn tự chia điểm, thông tin từng thành viên và tỷ lệ điểm từng thành viên sẽ được nhận, ví dụ 50%, 120%, 150%, trong trang 2 của Slides. Tổng số % của nhóm = Số thành viên x 100%. Nếu thành viên nào có % x Tổng điểm lớn hơn 10, thì điểm của thành viên cũng chỉ được tính là 10.
- Bài thuyết trình được đánh giá theo số thành viên thực sự hoạt động của nhóm. Do vậy, nếu nhóm có thành viên bỏ nhóm, hoặc không tham gia vào bài thuyết trình, trưởng nhóm cần thông báo trực tiếp cho giảng viên vào buổi thuyết trình, để các nhóm được đánh giá công bằng với nhau.
2. Quy định về bài thuyết trình
- Các nhóm phải có Slides khi thuyết trình, kể cả khi nội dung thuyết trình tập trung vào demo công cụ sử dụng và sản phẩm tạo ra.
- Trong Slides, phải có trang 2, liệt kê các thành viên trong nhóm tham gia chuẩn bị và trình bày bài thuyết trình.
- Trong Slides, phải có trang 3, liệt kê các nội dung trình bày.
- Trong Slides, phải có trang 4, liệt kê danh mục các tài liệu tham khảo mà nhóm đã dùng để soạn Slides. Các Slides lấy nội dung lấy từ các nguồn khác mà không có trích dẫn ở trang này sẽ nhận điểm 0 thuyết trình.
- Thời gian trình bày tối đa: 20 phút.
- Thời gian trả lời các câu hỏi (có thể đan xen trong thời gian trình bày): 60 phút.
- Tổng thời gian tối đa cho 1 nhóm thuyết trình: 80 phút.
3. Quy định về việc chọn nhóm thuyết trình
- Việc thuyết trình sẽ bắt đầu sau buổi học về mô hình Kanban.
- Mỗi nhóm sẽ thuyết trình 2 lần, cho 2 chủ đề khác nhau.
- Các nhóm sẽ được gọi thuyết trình trực tiếp tại lớp theo thứ tự sau:
- Nhóm xung phong thuyết trình.
- Nhóm chưa thuyết trình đủ 2 chủ đề, theo số thứ tự nhóm.
- Nhóm muốn cải thiện điểm thuyết trình.
- Nhóm đã thuyết trình đủ 2 chủ đề muốn lấy điểm cộng môn học.
- Các nhóm được gọi mà không có Slides hoặc không chuẩn bị để thuyết trình sẽ nhận điểm 0 cho bài thuyết trình được gọi.
4. Quy định về việc nộp Slides sau khi thuyết trình
- Sau khi thuyết trình, nhóm cần chỉnh sửa lại Slides theo những gì được giảng viên yêu cầu bổ sung trên lớp, nộp lên Moodle, trong Diễn đàn chung, trước 21h00, chủ nhật trong tuần nhóm thuyết trình.
- Tập tin đặt theo mẫu Nhom_X_Chu De.pptx (không dấu).
- Quá thời hạn quy định, các nhóm quên không nộp Slides, điểm thuyết trình sẽ không được công nhận.
5. Danh sách các chủ đề
5.1. Chủ đề 1: Làm sao để tăng tốc độ phát triển và đảm bảo chất lượng giao diện hệ thống?
- Số nhóm thuyết trình dự kiến: 2 nhóm (ưu tiên 1 nhóm web, 1 nhóm mobile).
- Nội dung cần trình bày:
- Demo bằng đồ án của nhóm các công cụ nhóm sử dụng để đảm bảo coding standards.
- Demo bằng đồ án của nhóm các UI frameworks, libraries và components nhóm sử dụng để tăng tốc độ phát triển và đảm bảo chất lượng giao diện hệ thống.
- Demo bằng đồ án của nhóm các công cụ nhóm sử dụng để kiểm tra chất lượng giao diện hệ thống.
- Demo các khái niệm: functional programming, modularity và concurrency, nếu có, của các thư viện, hoặc khung ứng dụng, hoặc ngôn ngữ lập trình nhóm dùng để phát triển giao diện hệ thống.
- Các câu hỏi thường gặp:
- Demo việc lấy mã nguồn của nhóm từ source control và build không lỗi.
- Demo việc hiển thị lỗi coding standards trên editor.
- Demo việc cấu hình công cụ để chỉ hiển thị một số lỗi coding standards nhất định.
- Demo việc hiện thực hóa app nagivation (menu).
- Demo việc tạo module, nhận dữ liệu từ các thành phần giao diện (UI elements), đưa dữ liệu vào các thành phần giao diện của module.
- Demo việc kiểm tra đầu vào không hợp lệ và xuất các loại thông điệp ở phía client.
- Demo việc phân trang cho 5000 bản ghi.
- Demo sự tương tác giữa module cha và module con, giữa module con và module con.
- Demo việc tương tác giữa một cửa sổ con (dialog) và cửa sổ cha.
- Demo việc chờ xử lý đối với một tác vụ tốn thời gian hơn 10 giây.
- Demo việc hiển thị một biểu đồ bar chart cho báo cáo.
- Demo khả năng drag and drop (ví dụ cho file upload, hoặc sắp xếp lại thứ tự các items).
- Demo việc hiển thị giao diện linh hoạt (dynamic loading of modules, ví dụ hiển thị dashboard theo cấu hình của người dùng, hiển thị layouts khác nhau giữa người dùng thông thường và người dùng ưu tiên).
- Demo việc khởi tạo module linh hoạt (dynamic import/lazy loading of modules).
- Demo việc chuyển đổi giữa light theme và dark theme.
- Demo việc chuyển đổi ngôn ngữ của giao diện (ví dụ từ tiếng Anh sang tiếng Việt).
- Demo việc kiểm thử Accessibility của một giao diện.
- Demo việc kiểm thử Learnability của một giao diện.
- Demo việc đánh giá một giao diện dựa trên các nguyên lý.
- Tài liệu tham khảo:
5.2. Chủ đề 2: Làm sao để tăng tốc độ phát triển và đảm bảo chất lượng các API của hệ thống?
- Số nhóm thuyết trình dự kiến: 2 nhóm (ưu tiên 1 nhóm RESTful và gRPC, 1 nhóm GraphQL).
- Nội dung cần trình bày:
- Demo 3 APIs của hệ thống: một sử dụng RESTful, một sử dụng gRPC, và một sử dụng GraphQL.
- Giải thích các công cụ đã dùng và các bước để hoàn thành 3 APIs ở trên.
- Giải thích giao thức HTTP 1.1.
- Giải thích các khái niệm: Binary Encoding, Text Encoding, Serialization, Deserialization, Text Protocol, Binary Protocol.
- Giải thích định dạng Protocol Buffers, giao thức HTTP/2.
- Các câu hỏi thường gặp:
- Demo việc lấy mã nguồn của nhóm từ source control và build không lỗi.
- Demo việc cài đặt công cụ và viết API cho một tính năng của đồ án bằng RESTful (không bắt buộc cần có kết nối với cơ sở dữ liệu).
- Demo việc triển khai thực tế RESTful API trên 1 máy chủ (hoặc container).
- Demo việc kiểm thử RESTful API bằng cách gọi trực tiếp (ví dụ dùng Postman).
- Demo việc kết nối RESTful API với giao diện hệ thống.
- Demo việc cài đặt công cụ và viết API cho một tính năng của đồ án bằng gRPC (không bắt buộc cần có kết nối với cơ sở dữ liệu).
- Demo việc triển khai thực tế gRPC API trên 1 máy chủ (hoặc container).
- Demo việc kiểm thử gRPC API sau khi đã triển khai.
- Demo việc kết nối gRPC API với giao diện hệ thống.
- Demo việc cài đặt công cụ và viết API cho một tính năng của đồ án bằng GraphQL (không bắt buộc cần có kết nối với cơ sở dữ liệu).
- Demo việc triển khai thực tế GraphQL API trên 1 máy chủ (hoặc container).
- Demo việc kiểm thử GraphQL API sau khi đã triển khai.
- Demo việc kết nối GraphQL API với giao diện hệ thống.
- Tài liệu tham khảo:
- Thomas Hunter II (2021). Distributed Systems with Node.js. O’Reilly Media. (Chapter 2. Protocols.)
- Leonard Richardson and Mike Amundsen (2013). RESTful Web APIs. O’Reilly Media.
- Kasun Indrasiri and Danesh Kuruppu (2020). gRPC - Up & Running - Building Cloud Native Applications with Go and Java for Docker and Kubernetes. O’Reilly Media.
- Barry Pollard (2019). HTTP/2 in Action. Manning Publications.
- Adam D. Scott (2020). JavaScript Everywhere - Building Cross-Platform Applications with GraphQL, React, React Native, and Electron. O’Reilly Media.
5.3. Chủ đề 3: Phần identity and access management của hệ thống nên được thiết kế và xây dựng như thế nào?
- Số nhóm thuyết trình dự kiến: 2 nhóm (ưu tiên 1 nhóm web, 1 nhóm mobile).
- Nội dung cần trình bày:
- Giải thích sơ đồ dữ liệu của một hệ thống quản lý định danh và quyền truy cập.
- Giải thích quá trình hoạt động của giao thức OAuth 2.
- Giải thích cấu trúc của JSON Web Token Authentication.
- Giải thích quá trình hoạt động của giao thức Proof Key for Code Exchange.
- Giải thích quá trình hoạt động của giao thức OpenID Connect (OIDC).
- Giải thích lý do ứng dụng mẫu thiết kế Backend for Frontend trong đăng nhập và phân quyền hệ thống.
- Demo một tính năng của hệ thống đã được tích hợp với phần identity and access management.
- Giải thích các công cụ đã dùng và các bước để thực hiện tính năng trên.
- Các câu hỏi thường gặp:
- Demo việc lấy mã nguồn của nhóm từ source control và build không lỗi.
- Demo việc cài đặt hệ thống hỗ trợ identity and access management.
- Demo và giải thích dữ liệu raw (database) của hệ thống hỗ trợ identity and access management, nếu được phép truy cập.
- Demo việc cài đặt các thư viện để kết nối với hệ thống hỗ trợ identity and access management.
- Demo việc tích hợp hệ thống hỗ trợ identity and access management vào một chức năng của hệ thống.
- Demo việc kiểm tra tính bảo mật của chức năng vừa cài đặt.
- Tài liệu tham khảo:
- Justin Richer and Antonio Sanso (2017). OAuth 2 in Action. Manning Publications.
- Neil Madden (2020). API Security in Action. Manning Publications.
- Prabath Siriwardena and Nuwan Dias (2020). Microservices Security in Action. Manning Publications.
- Keycloak
- Okta
- Microsoft Entra ID
- Cloud Identity
- ASP.NET Core Identity
- Duende IdentityServer
5.4. Chủ đề 4: Thiết kế và xây dựng hệ thống như thế nào để giảm sự phụ thuộc vào các công nghệ và tăng khả năng quản lý sự phức tạp của hệ thống?
- Số nhóm thuyết trình dự kiến: 1 nhóm.
- Nội dung cần trình bày:
- Giải thích các bước tuần tự nhóm đã thực hiện để xây dựng một tính năng của hệ thống.
- Giải thích phương pháp thiết kế từ nghiệp vụ (Domain-Driven Design).
- Demo một chức năng của hệ thống được xây dựng bằng phương pháp thiết kế từ nghiệp vụ.
- Các câu hỏi thường gặp:
- Demo việc lấy mã nguồn của nhóm từ source control và build không lỗi.
- Demo quá trình chạy chi tiết qua từng thành phần của Domain-Driven Design của một tính năng đã được xây dựng.
- Giải thích mục đích của các thành phần tham gia vào quá trình chạy của tính năng.
- Tài liệu tham khảo:
- Eric Evans (2003). Domain-Driven Design - Tackling Complexity in the Heart of Software. Addison Wesley.
- Vaughn Vernon (2013). Implementing Domain-Driven Design. Addison-Wesley Professional.
- Dino Esposito and Andrea Saltarello (2014). Microsoft .NET - Architecting Applications for the Enterprise. Second Edition. Microsoft Press.
- Vlad Khononov (2021). Learning Domain-Driven Design. O’Reilly Media.
5.5. Chủ đề 5: Thiết kế và xây dựng khả năng mở rộng hệ thống theo chiều ngang như thế nào?
- Số nhóm thuyết trình dự kiến: Tất cả các nhóm chưa đủ 2 bài thuyết trình.
- Nội dung cần trình bày:
- Giải thích về mở rộng hệ thống theo chiều ngang (horizontal scaling).
- Demo việc cài đặt và cấu hình các công cụ hỗ trợ.
- Demo khả năng mở rộng của hệ thống nhóm đã xây dựng theo chiều ngang.
- Các câu hỏi thường gặp:
- Demo phần xử lý của một API của hệ thống, được chia tải (load balancing) trên 3 máy chủ web (hoặc 3 containers).
- Demo phần dữ liệu lưu trữ từ một API của hệ thống, được chia tải và sharding trên 3 máy chủ cơ sở dữ liệu.
- Demo phương pháp và kết quả kiểm thử khả năng chịu tải (load testing) của toàn hệ thống với số lượng bản ghi dữ liệu tối thiểu là 50,000 cho mỗi đối tượng hoặc bảng.
- Demo phương pháp và kết quả kiểm thử ngưỡng chịu tải (stress testing) của toàn hệ thống với số lượng bản ghi dữ liệu tối thiểu là 50,000 cho mỗi đối tượng hoặc bảng.
- Demo phần bộ nhớ đệm của hệ thống, được chia tải và sharding trên 3 máy chủ.
- Demo phần lưu trữ tập tin của hệ thống, được chia tải và sharding trên 3 máy chủ (nếu có).
- Tài liệu tham khảo:
- Derek DeJonghe (2022). NGINX Cookbook. O’Reilly Media. (CHAPTER 1. High-Performance Load Balancing.)
- Thomas Hunter II (2021). Distributed Systems with Node.js. O’Reilly Media. (Chapter 3. Scaling.)
- Baron Schwartz, Peter Zaitsev, Vadim Tkachenko (2012). High Performance MySQL - Optimization, Backups, and Replication. O’Reilly Media. (CHAPTER 2. Benchmarking MySQL, CHAPTER 10. Replication, CHAPTER 11. Scaling MySQL, CHAPTER 12. High Availability.)
- Vinicius M. Grippa and Sergey Kuzmichev (2021). Learning MySQL. O’Reilly Media. (Chapter 13. High Availability, Chapter 15. Load Balancing MySQL.)
- Bradshaw Shannon, Eoin Brazil and Kristina Chodorow (2019). MongoDB - The Definitive Guide. 3rd Edition. O’Reilly Media. (Part III. Replication, Part IV. Sharding.)
5.6. Chủ đề 6: Làm sao để đảm bảo chất lượng cho các chức năng của hệ thống?
- Số nhóm thuyết trình dự kiến: Tất cả các nhóm chưa đủ 2 bài thuyết trình.
- Nội dung cần trình bày:
- Giải thích test automation.
- Demo các unit tests của hệ thống.
- Các câu hỏi thường gặp:
- Demo việc cài đặt và cấu hình các công cụ hỗ trợ viết và chạy các unit tests (ví dụ Jest, Selenium).
- Giải thích các bước để tạo và thực thi một unit test.
- Giải thích mã nguồn và thực thi các unit test đã viết cho một hàm back-end của hệ thống.
- Giải thích mã nguồn và thực thi các unit test đã viết để tự động hóa việc kiểm thử từ đầu đến cuối (end-to-end workflow) cho một tính năng của hệ thống.
- Demo việc cài đặt các công cụ để thực hiện việc triển khai/chuyển giao liên tục hệ thống (ví dụ Jenkins).
- Demo việc đăng ký các dịch vụ đã dùng và các bước để thực hiện việc triển khai/chuyển giao liên tục hệ thống (ví dụ CircleCI, AWS CodeDeploy, Azure DevOps Services, GCP).
- Demo việc chạy các unit tests trong quá trình triển khai/chuyển giao liên tục hệ thống của nhóm.
- Tài liệu tham khảo:
- Roy Osherove (2022). The Art of Unit Testing with Examples in JavaScript. Manning Publications.
- Vladimir Khorikov (2019). Unit Testing Principles, Practices, and Patterns. Manning Publications.
- Chaminda Chandrasekara and Pushpa Herath (2019). Hands-On Functional Test Automation: With Visual Studio 2017 and Selenium. Apress.
- Koushik Das (2022). Create an Enterprise-Level Test Automation Framework with Appium. Apress.
- Justin Domingus and John Arundel (2022). Cloud Native DevOps with Kubernetes. O’Reilly Media.
- Ashley Davis (2021). Bootstrapping Microservices with Docker, Kubernetes, and Terraform. Manning Publications.
5.7. Chủ đề 7: Thiết kế và xây dựng hệ thống như thế nào để lưu trữ tất cả các trạng thái của ứng dụng nhằm mục đích tăng tốc độ xử lý, dễ dàng tích hợp các hệ thống con, truy vết (Audit Log), gỡ rối (Debugging), sửa chữa, hoặc khôi phục hệ thống?
- Số nhóm thuyết trình dự kiến: Tất cả các nhóm chưa đủ 2 bài thuyết trình.
- Nội dung cần trình bày:
- Giải thích mô hình CQRS và Event Sourcing.
- Demo 2 tính năng của hệ thống được hiện thực hóa bằng cách áp dụng CQRS và Event Sourcing.
- Các câu hỏi thường gặp:
- Demo việc cài đặt và cấu hình các công cụ hỗ trợ (ví dụ EventStoreDB).
- Demo quá trình viết và chạy một tính năng ghi dữ liệu vào hệ thống (Command) và một tính năng một tính năng báo cáo từ dữ liệu của hệ thống (Query) của hệ thống bằng cách áp dụng CQRS và Event Sourcing.
- Giải thích cách để thực hiện 2 tính năng trên từng bước một.
- Giải thích mã nguồn của 2 tính năng trên.
- Tài liệu tham khảo:
- Martin Kleppmann (2016). Making Sense of Stream Processing. O’Reilly Media.
- Chris Richardson (2019). Microservices Patterns - With Examples in Java. Manning Publications.
- Binildas Christudas (2019). Practical Microservices Architectural Patterns - Event-Based Java Microservices with Spring Boot and Spring Cloud. Apress.
- Alexander Dean and Valentin Crettaz (2019). Event Streams in Action - Real-Time Event Systems with Kafka and Kinesis.
- Dino Esposito and Andrea Saltarello (2014). Microsoft .NET - Architecting Applications for the Enterprise. Second Edition. Microsoft Press.
- Kevin Hoffman (2017). Building Microservices with ASP.NET Core - Develop, Test, and Deploy Cross-Platform Services in the Cloud. O’Reilly.