THIẾT KẾ VÀ TRIỂN KHAI PHẦN MỀM: TỔNG QUAN HỌC THUẬT VÀ PHÂN TÍCH NỘI DUNG CHƯƠNG TRÌNH
Tài liệu học thuật Thiết Kế và Triển Khai Phần Mềm: Hướng Dẫn Chi Tiết (nguyên bản: Software Engineering - CO3001, Chapter 7: Design and Implementation) là học phần trọng tâm trong chương trình đào tạo Kỹ thuật Phần mềm bậc đại học. Nội dung bài giảng hệ thống hóa toàn diện các nguyên lý, quy trình mô hình hóa hướng đối tượng bằng UML, mẫu thiết kế (Design Patterns), các vấn đề kỹ thuật trong quá trình hiện thực hóa mã nguồn và chính sách phát triển phần mềm mã nguồn mở.
Tổng quan về giáo trình
Bài giảng Chapter 7 – Design and Implementation thuộc cấu trúc môn học Software Engineering (CO3001), được bố trí giảng dạy trong khung thời gian 3 tuần (Tuần 10, 11 và 12). Trong tiến trình đào tạo kỹ sư công nghệ thông tin và kỹ thuật phần mềm, học phần này đóng vai trò cầu nối bản lề giữa giai đoạn phân tích yêu cầu phần mềm và giai đoạn kiểm thử, phát hành hệ thống.
Mục tiêu học tập (Learning Outcomes) của tài liệu bao gồm:
- Nắm vững định nghĩa và mối quan hệ tương hỗ giữa thiết kế phần mềm (xác định các thành phần phần mềm và mối quan hệ dựa trên yêu cầu khách hàng) và hiện thực hóa phần mềm (chuyển đổi bản thiết kế thành chương trình thực thi).
- Thành thạo quy trình thiết kế hướng đối tượng 5 bước sử dụng ngôn ngữ mô hình hóa thống nhất (UML).
- Hiểu rõ cấu trúc 4 phần tử cơ bản của mẫu thiết kế và cơ chế hoạt động của mẫu Observer cùng các mẫu phổ biến khác (Façade, Iterator, Decorator).
- Nhận diện các cấp độ tái sử dụng phần mềm, cấu trúc chi phí tái sử dụng và các tiêu chí lựa chọn nền tảng triển khai.
- Phân biệt các mô hình giấy phép phần mềm nguồn mở tiêu chuẩn (GPL, LGPL, BSD) và đánh giá tính khả thi khi ứng dụng vào môi trường phát triển thương mại.
Cấu trúc tài liệu tiếp cận vấn đề theo phương pháp thực chứng: lấy lý thuyết mô hình hóa làm khung tham chiếu, sau đó áp dụng trực tiếp vào một ca nghiên cứu cụ thể xuyên suốt (Hệ thống Trạm quan trắc thời tiết - Weather Station). Điểm đặc thù của tài liệu là không tách rời thiết kế trừu tượng khỏi thực tế lập trình, mà khẳng định thiết kế và lập trình là hai hoạt động đan xen liên tục (inter-leaved).
Nội dung kiến thức cốt lõi
Các chương/chủ đề chính
Nội dung tài liệu được cấu trúc thành 4 phần kiến thức chuyên đề:
-
Thiết kế hướng đối tượng sử dụng UML (Object-Oriented Design using the UML):
Trình bày tiến trình thiết kế hệ thống từ mức tổng quan đến chi tiết. Quy trình bao gồm 5 hoạt động tiêu chuẩn:
- Xác định ngữ cảnh và chế độ sử dụng: Xây dựng mô hình ngữ cảnh (Context Model) để thể hiện các hệ thống trong môi trường và thiết lập ranh giới hệ thống (system boundaries); xây dựng mô hình tương tác (Interaction Model) thông qua Use Case.
- Thiết kế kiến trúc hệ thống (Architectural Design): Tổ chức các hệ thống con theo mô hình kiến trúc phân lớp hoặc Client-Server.
- Định danh các lớp đối tượng chính (Object Class Identification): Áp dụng các phương pháp tiếp cận ngữ pháp, thực thể vật lý, hành vi hoặc kịch bản.
- Xây dựng các mô hình thiết kế (Design Models): Phân loại thành mô hình tĩnh (mô hình hệ thống con/package) và mô hình động (Sequence Diagram, State Machine Diagram).
- Đặc tả giao diện đối tượng (Interface Specification): Thiết lập các Interface (
«interface») phục vụ thiết kế song song, tách biệt phần hiện thực nội bộ.
-
Mẫu thiết kế (Design Patterns):
Khái niệm hóa việc tái sử dụng tri thức trừu tượng trong việc giải quyết vấn đề kỹ thuật. Tài liệu chuẩn hóa cấu trúc mô tả mẫu gồm 4 yếu tố: Tên mẫu (Name), Mô tả (Description), Đặt vấn đề (Problem description), Giải pháp (Solution description) và Hệ quả (Consequences). Trọng tâm phân tích là mẫu Observer, đi kèm các mẫu:
- Façade: Đơn giản hóa giao diện cho tập hợp nhiều đối tượng liên quan.
- Iterator: Cung cấp phương thức truy cập tuần tự các phần tử trong tập hợp mà không làm lộ cấu trúc lưu trữ.
- Decorator: Mở rộng chức năng của một lớp đối tượng tại thời điểm thực thi (run-time).
-
Các vấn đề trong triển khai phần mềm (Implementation Issues):
Tập trung vào 3 yếu tố kỹ thuật then chốt:
- Tái sử dụng phần mềm (Reuse): Phân tích sự chuyển dịch từ phát triển mới hoàn toàn (from scratch) sang tái sử dụng ở 4 cấp độ: Cấp độ trừu tượng (Abstraction level), Cấp độ đối tượng (Object level), Cấp độ thành phần (Component level), và Cấp độ hệ thống (System level). Đánh giá 4 loại chi phí phát sinh: tìm kiếm, mua bản quyền, thích ứng/cấu hình và tích hợp.
- Công cụ nền tảng phát triển (Development Platform Tools): Yêu cầu về môi trường IDE tích hợp trình biên dịch định hướng cú pháp, trình gỡ lỗi (debugger), công cụ biên tập đồ họa UML, công cụ kiểm thử tự động (JUnit) và công cụ hỗ trợ dự án.
- Yếu tố triển khai thành phần/hệ thống (Deployment Factors): Yêu cầu phần cứng/phần mềm, yêu cầu độ sẵn sàng cao (availability - triển khai đa nền tảng) và lưu lượng truyền thông giữa các thành phần.
-
Phát triển mã nguồn mở (Open Source Development):
Bản chất của phát triển mã nguồn mở, vai trò của Free Software Foundation (FSF), các hệ thống mã nguồn mở điển hình (Linux, Java, máy chủ web Apache, hệ quản trị cơ sở dữ liệu MySQL). Phân tích 3 mô hình giấy phép:
- GNU General Public License (GPL): Giấy phép có tính tương hỗ (reciprocal license), bắt buộc mã nguồn mở đối với mọi phần mềm phái sinh hoặc tích hợp mã GPL.
- GNU Lesser General Public License (LGPL): Cho phép liên kết thành phần phần mềm với mã nguồn mở mà không bắt buộc công khai mã nguồn của thành phần tự viết.
- Berkeley Standard Distribution (BSD) License: Giấy phép không tương hỗ (non-reciprocal license), cho phép đóng gói và tích hợp mã nguồn vào các hệ thống thương mại đóng gói độc quyền mà không bắt buộc công bố sửa đổi.
Kiến thức nền tảng được xây dựng
Tài liệu trang bị nền tảng lý thuyết kỹ thuật phần mềm chuẩn tắc:
- Nguyên lý phân chia trách nhiệm và giảm thiểu liên kết (Loose Coupling): Minh chứng qua cấu trúc mẫu Observer giữa
Subject (nắm giữ trạng thái) và Observer (hiển thị dữ liệu), giúp đối tượng phát tín hiệu không cần nắm chi tiết cài đặt của đối tượng nhận tín hiệu.
- Nguyên lý đóng gói thông tin (Information Hiding): Áp dụng trong thiết kế giao diện (
«interface»), ngăn chặn việc lộ cấu trúc biểu diễn dữ liệu nội bộ ra môi trường ngoài.
- Lý thuyết mô hình hóa đa góc nhìn: Phối hợp giữa góc nhìn cấu trúc tĩnh (Context Diagram, Class Diagram, Subsystem Package) và góc nhìn hành vi động (Sequence Diagram mô tả tiến trình tương tác theo trục thời gian, State Machine Diagram mô tả sự chuyển dịch trạng thái kích hoạt bởi sự kiện).
Kỹ năng phát triển
Sau khi hoàn thành học phần, người học phát triển các nhóm kỹ năng:
- Kỹ năng kỹ thuật (Technical Skills): Khả năng lập biểu đồ UML chuẩn hóa cho Use Case, Sequence Diagram, State Diagram và Class Diagram; cấu hình công cụ kiểm thử tự động JUnit; tích hợp môi trường IDE.
- Kỹ năng phân tích (Analytical Skills): Phân tích và lựa chọn phương pháp định danh đối tượng dựa trên ngữ cảnh thực tế; phân tích đánh giá đánh đổi (trade-offs) khi áp dụng mẫu thiết kế (ví dụ: độ trễ cập nhật chuỗi và khó khăn trong tối ưu hiệu năng hiển thị của mẫu Observer).
- Năng lực thực hành nghề nghiệp (Practical Competencies): Khả năng định toán chi phí tái sử dụng phần mềm; phân loại và lựa chọn mô hình giấy phép phần mềm nguồn mở phù hợp với mô hình kinh doanh của dự án.
Phương pháp giảng dạy và học tập
Phương pháp tiếp cận sư phạm
Tài liệu sử dụng phương pháp giảng dạy dựa trên nghiên cứu tình huống (Case-based Learning). Toàn bộ hệ thống lý thuyết về mô hình hóa hướng đối tượng và kiến trúc phần mềm được minh họa xuyên suốt thông qua hệ thống Trạm quan trắc thời tiết (Weather Station).
Hệ thống mẫu được phân tích qua các bước cụ thể:
- Mô tả ngữ cảnh: Xác định mối quan hệ lực lượng (cardinality) giữa 1 Hệ thống điều khiển (Control system), nhiều Trạm thời tiết (1..n Weather stations), 1 Vệ tinh liên lạc (Satellite) và 1 Hệ thống thông tin thời tiết tổng quát (Weather information system).
- Mô tả Use Case: Đặc tả chi tiết ca sử dụng
Report weather với các thuộc tính: Tác nhân (Actors), Mô tả (Description - gửi dữ liệu nhiệt độ không khí/mặt đất, áp suất, tốc độ gió, hướng gió theo chu kỳ lấy mẫu 5 phút), Kích hoạt (Stimulus) và Phản hồi (Response).
- Phân rã kiến trúc: Thiết lập 6 hệ thống con (
«subsystem»): Fault manager, Configuration manager, Power manager, Communications, Data collection, Instruments.
- Định danh lớp đối tượng: Xác định các thực thể phần cứng đo đạc gồm
Ground thermometer (chứa thuộc tính gt_Ident, temperature), Anemometer (an_Ident, windSpeed, windDirection), Barometer (bar_Ident, pressure, height), cùng các lớp xử lý trung tâm là WeatherStation và WeatherData.
- Mô hình hóa hành vi động:
- Biểu đồ tuần tự (Sequence Diagram) mô tả các bước gửi tín hiệu
request(report) từ Weather information system qua SatComms, kích hoạt phương thức reportWeather() tại WeatherStation, thu thập dữ liệu tổng hợp summarize() từ WeatherData và phản hồi báo cáo reply(report).
- Biểu đồ trạng thái (State Diagram) xác lập các chu kỳ chuyển dịch:
Shutdown, Running, Testing, Transmitting, Configuring, Summarizing, Collecting.
- Đặc tả giao diện: Thiết kế hai giao diện độc lập:
Remote Control (startInstrument, stopInstrument, collectData, provideData) và Reporting (weatherReport, statusReport).
Bài tập, kiểm tra và hướng dẫn tự học
- Thực hành thiết kế: Học viên thực hiện xác định đối tượng theo 4 phương pháp tiếp cận (dựa trên ngữ pháp của tài liệu mô tả, dựa trên thực thể vật lý, dựa trên hành vi hệ thống, và phân tích theo kịch bản tương tác).
- Phương pháp đánh giá: Đánh giá thông qua năng lực mô hình hóa biểu đồ UML đúng quy chuẩn (phân biệt rõ mũi tên tương tác, thanh kích hoạt lifeline, ký hiệu giao diện) và khả năng viết mã kiểm thử đơn vị với JUnit.
- Định hướng tự học: Người học cần nghiên cứu tài liệu kỹ thuật của FSF, đối chiếu cơ chế cấp phép giữa GPL, LGPL và BSD khi xây dựng phần mềm thương mại từ các thư viện nguồn mở.
Điểm nổi bật và cập nhật
Nội dung tài liệu phản ánh bước chuyển biến trong công nghệ phần mềm:
- Chuyển dịch mô hình phát triển: Làm rõ tính lỗi thời của phương pháp viết mã từ đầu (from scratch) trước những năm 1990 dưới áp lực chi phí và thời gian giao hàng, từ đó xác lập vị trí của kỹ thuật phần mềm dựa trên tái sử dụng (Reuse-based software engineering).
- Tích hợp các hệ thống nguồn mở chuẩn công nghiệp: Đưa các nền tảng thực tế vào nội dung giảng dạy bao gồm hệ điều hành Linux, ngôn ngữ/nền tảng Java, máy chủ web Apache và hệ quản trị cơ sở dữ liệu MySQL.
- Chuẩn hóa khía cạnh pháp lý và kinh doanh phần mềm: Đưa nội dung bản quyền mã nguồn mở vào quy trình kỹ thuật. Tài liệu giải quyết bài toán kinh doanh phần mềm thông qua việc so sánh ranh giới pháp lý giữa giấy phép tương hỗ (GPL/LGPL) và giấy phép tự do phi tương hỗ (BSD).
Đối tượng sử dụng giáo trình
- Sinh viên đại học: Sinh viên năm thứ 3 hoặc năm thứ 4 chuyên ngành Kỹ thuật Phần mềm, Khoa học Máy tính, Hệ thống Thông tin tham gia học phần Kỹ thuật phần mềm (CO3001).
- Điều kiện tiên quyết (Prerequisites): Người học cần hoàn thành khối kiến thức về Lập trình hướng đối tượng (OOP), Cấu trúc dữ liệu & Giải thuật, và các nguyên lý cơ bản về vòng đời phát triển phần mềm.
- Giảng viên: Sử dụng làm giáo trình giảng dạy chi tiết cho học phần Thiết kế và Hiện thực hóa phần mềm, làm căn cứ xây dựng đề cương bài tập lớn và đồ án môn học.
- Kỹ sư và lập trình viên: Dùng làm tài liệu tham khảo để chuẩn hóa phương pháp vẽ biểu đồ thiết kế hệ thống theo chuẩn UML, áp dụng mẫu thiết kế Observer, và rà soát rủi ro bản quyền khi tái sử dụng mã nguồn mở trong doanh nghiệp.
Câu hỏi thường gặp
1. Tài liệu này thuộc môn học nào và phân bổ thời lượng ra sao?
Tài liệu thuộc học phần Kỹ thuật Phần mềm (mã môn: CO3001), nội dung nằm ở Chapter 7: Design and Implementation, được thiết kế để giảng dạy trong thời lượng 3 tuần học (Tuần 10, 11 và 12).
2. Có quy tắc cố định nào cho việc xác định lớp đối tượng trong thiết kế phần mềm không?
Theo nội dung bài giảng, không có công thức ma thuật (magic formula) nào để định danh đối tượng. Quá trình này dựa vào 4 phương pháp tiếp cận: (1) Phân tích ngữ pháp bản mô tả ngôn ngữ tự nhiên, (2) Dựa trên các thực thể vật lý trong miền ứng dụng, (3) Phân tích hành vi tham gia của các thành phần, và (4) Phân tích dựa trên kịch bản tương tác (scenario-based analysis).
3. Mẫu thiết kế Observer giải quyết bài toán gì và có hệ quả kỹ thuật nào?
Mẫu Observer giải quyết bài toán tách biệt phần lưu trữ trạng thái của đối tượng (ConcreteSubject) khỏi phần hiển thị dữ liệu (ConcreteObserver), cho phép tự động thông báo và cập nhật đồng loạt nhiều giao diện hiển thị khi trạng thái thay đổi. Hệ quả kỹ thuật là do đối tượng Subject không nắm chi tiết về lớp Observer cụ thể nên việc tối ưu hóa hiệu năng hiển thị là không khả thi, đồng thời có thể phát sinh chuỗi cập nhật không cần thiết.
4. Sự khác biệt cốt lõi giữa giấy phép GNU GPL, LGPL và BSD là gì?
- GNU GPL: Giấy phép tương hỗ (reciprocal). Khi sử dụng hoặc liên kết mã nguồn GPL, toàn bộ phần mềm tạo thành bắt buộc phải phát hành dưới dạng mã nguồn mở.
- GNU LGPL: Biến thể của GPL, cho phép viết các thành phần phần mềm liên kết với mã nguồn mở LGPL mà không bắt buộc phải công khai mã nguồn của các thành phần này.
- BSD: Giấy phép không tương hỗ (non-reciprocal). Cho phép sửa đổi, đóng gói và tích hợp mã nguồn vào các phần mềm thương mại đóng gói độc quyền mà không có nghĩa vụ tái công bố mã nguồn.
5. Những công cụ phát triển phần mềm nào được giới thiệu trong tài liệu?
Tài liệu liệt kê các công cụ thuộc môi trường phát triển tích hợp (IDE) gồm: Trình biên dịch định hướng cú pháp, hệ thống gỡ lỗi (debugger), công cụ biên tập mô hình UML trực quan, công cụ kiểm thử tự động (tiêu biểu là JUnit) và công cụ hỗ trợ quản lý dự án.
Kết luận
Bài giảng CO3001 - Chapter 7: Design and Implementation cung cấp cấu trúc kiến thức nền tảng về giai đoạn thiết kế và triển khai trong quy trình kỹ thuật phần mềm. Giá trị học thuật cốt lõi của tài liệu nằm ở việc kết hợp chặt chẽ giữa mô hình hóa hướng đối tượng UML qua trường hợp nghiên cứu Trạm thời tiết, áp dụng mẫu thiết kế Observer, tối ưu hóa quá trình tái sử dụng và quản trị pháp lý phần mềm nguồn mở. Lộ trình học tập đề xuất là tiếp cận tuần tự từ phân tích ngữ cảnh, mô hình hóa kiến trúc, đặc tả giao diện đến kiểm thử tự động và xác lập giấy phép triển khai hệ thống.