SWE201c · Introduction to Software Engineering

SWE201c

Chín mô hình phát triển phần mềm, tiêu chí chọn mô hình cho từng loại dự án, các mức kiểm thử, yêu cầu chức năng và phi chức năng — kèm hướng dẫn làm bài PE và FE.

Tác giả:
Min Thep
Cập nhật lần cuối:
5:00, ngày 30 tháng 3 năm 2025

Nếu thấy bài viết này hữu ích, hãy để lại 1 ⭐ trên GitHub của mình nhé! Cảm ơn mọi người ❤️

Mục lục:

1. Các phương pháp phát triển phần mềm

A. 6 Mô hình SDLC cơ bản

#1. Mô hình thác nước (Waterfall)

Định nghĩa

Mô hình thác nước là phương pháp phát triển tuần tự, trong đó quá trình phát triển được xem như dòng chảy liên tục qua các giai đoạn: Phân tích yêu cầu → Thiết kế → Triển khai → Kiểm thử → Bảo trì.

Sơ đồ mô hình thác nước: năm khối xếp bậc thang từ phân tích yêu cầu, thiết kế, triển khai, kiểm thử tới bảo trì
Waterfall — mỗi giai đoạn chỉ bắt đầu khi giai đoạn trước đã hoàn tất.
Các giai đoạn chính
1. Giai đoạn phân tích



2. Giai đoạn thiết kế



3. Giai đoạn lập trình (Implementation)



4. Giai đoạn kiểm thử



5. Giai đoạn triển khai và bảo trì (Deployment & Maintenance)



Đặc điểm nổi bật
Khi nào nên sử dụng
Ưu điểm
Nhược điểm

#2. Mô hình chữ V (V-Model)

Định nghĩa

V-Model là phiên bản mở rộng của mô hình thác nước, trong đó các hoạt động kiểm thử được thực hiện song song với từng giai đoạn phát triển tương ứng.

Sơ đồ chữ V với nhánh trái là các giai đoạn đặc tả và nhánh phải là các mức kiểm thử tương ứng
V-Model — mỗi giai đoạn đặc tả ở nhánh trái có một mức kiểm thử đối xứng ở nhánh phải.
Các giai đoạn
Verification Phases (Bên trái)
Validation Phases (Bên phải)
Cặp đối xứng — điểm cốt lõi của V-Model

Liệt kê hai cột như trên là chưa đủ, vì cái làm nên chữ V không phải là "có 8 giai đoạn" mà là từng giai đoạn bên trái được ghép với đúng một mức kiểm thử bên phải. Kế hoạch kiểm thử của mỗi mức được viết ngay khi làm giai đoạn tương ứng bên trái, chứ không đợi đến lúc code xong.

Giai đoạn (nhánh trái) Mức kiểm thử (nhánh phải) Câu hỏi mà mức đó trả lời
Phân tích yêu cầu Acceptance Testing Hệ thống có làm được việc mà khách hàng cần?
Thiết kế hệ thống System Testing Toàn hệ thống có chạy đúng như đặc tả?
Thiết kế kiến trúc Integration Testing Các module có nối với nhau đúng cách?
Thiết kế module Unit Testing Từng module có làm đúng phần việc của nó?

Để ý thứ tự ngược nhau: giai đoạn cao nhất bên trái (yêu cầu) ghép với mức kiểm thử cuối cùng bên phải (acceptance), còn giai đoạn thấp nhất bên trái (thiết kế module) ghép với mức kiểm thử đầu tiên (unit). Đó là lý do hình vẽ có dạng chữ V chứ không phải hai cột song song.

Khi nào sử dụng
Ưu điểm
Nhược điểm

#3. Mô hình Tăng dần & Lặp lại (Incremental & Iterative)

Định nghĩa

Mô hình phát triển tăng dần và lặp lại là phương pháp phát triển phần mềm đặc trưng bởi chu kỳ lặp đi lặp lại của việc phát hành cập nhật và dần dần tích hợp các tính năng mới.

Sơ đồ nhiều vòng lặp nối tiếp, mỗi vòng gồm phân tích, thiết kế, lập trình và kiểm thử, sản phẩm lớn dần qua từng vòng
Incremental và Iterative — sản phẩm lớn dần qua từng vòng lặp thay vì hoàn thiện một lần.
Incremental và Iterative khác nhau thế nào

Hai chữ này hay bị dùng lẫn, nhưng chúng trả lời hai câu hỏi khác nhau, và đề thi thích hỏi đúng chỗ khác nhau đó:

Incremental (tăng dần) Iterative (lặp lại)
Mỗi vòng cho ra Thêm tính năng mới, phần đã xong thì để nguyên Cải thiện cái đã có, làm cho nó tốt hơn
Ví dụ dễ hình dung Xây nhà: xong móng, rồi tường, rồi mái Vẽ tranh: phác toàn bộ bố cục, rồi tô đi tô lại cho rõ dần
Sau vòng 1 bạn có Một phần hệ thống, dùng được, nhưng thiếu tính năng Toàn bộ hệ thống, nhưng còn thô
Rủi ro nó xử lý "Không kịp deadline" — giao được phần quan trọng trước "Làm sai thứ khách cần" — có phản hồi sớm trên toàn cảnh

Thực tế các dự án dùng cả hai cùng lúc, và đó chính là lý do mô hình này được gọi bằng cả hai chữ: mỗi vòng vừa thêm tính năng mới (incremental) vừa tinh chỉnh những gì đã làm dựa trên phản hồi (iterative).

Các giai đoạn chính

Khác với Waterfall, mô hình này không có một dãy giai đoạn chạy một lần. Nó có một vòng lặp được chạy lại nhiều lần, mỗi vòng là một mini-project đầy đủ:

Điểm quan trọng: sau vòng lặp đầu tiên đã có một sản phẩm chạy được và giao được, dù còn thiếu tính năng. Đây là khác biệt lớn nhất so với Waterfall và V-Model, nơi không có gì chạy được cho đến gần cuối.

Khi nào nên sử dụng
Ưu điểm
Nhược điểm

#4. Mô hình Xoắn ốc (Spiral)

Định nghĩa

Mô hình Xoắn ốc là cách tiếp cận phát triển phần mềm trong đó các hoạt động được tổ chức theo mô hình xoắn ốc và thực hiện theo thứ tự được xác định thông qua phân tích rủi ro.

Sơ đồ xoắn ốc chia bốn góc phần tư: xác định mục tiêu, phân tích rủi ro, phát triển và lập kế hoạch
Spiral — mỗi vòng xoắn là một chu kỳ có bước phân tích rủi ro riêng.
Các giai đoạn chính

Bốn giai đoạn trên là bốn góc phần tư của hình xoắn ốc, và mỗi vòng xoắn đi qua đủ cả bốn. Vòng càng ra xa tâm thì càng tốn chi phí — trục bán kính trong hình chính là chi phí tích luỹ.

Khi nào nên sử dụng

Spiral được chọn vì một lý do và chỉ một lý do: rủi ro. Nếu đề thi không có dấu hiệu rủi ro nào thì gần như chắc chắn không phải Spiral.

Ưu điểm
Nhược điểm

#5. Mô hình RUP (Rational Unified Process)

Định nghĩa

RUP là phương pháp phát triển phần mềm được trang bị nhiều công cụ hỗ trợ việc tạo ra sản phẩm cuối cùng và các nhiệm vụ liên quan. Đây là phương pháp hướng đối tượng được sử dụng cho cả quản lý dự án và phát triển phần mềm chất lượng cao.

Biểu đồ RUP với bốn pha Inception, Elaboration, Construction, Transition trên trục ngang và các luồng công việc trên trục dọc
RUP — bốn pha trên trục ngang, các luồng công việc chồng lấn nhau trên trục dọc.
Các giai đoạn chính
Khi nào nên sử dụng

Ngược lại, RUP là lựa chọn sai khi dự án nhỏ, team dưới mười người, hoặc khi yêu cầu đổi quá nhanh đến mức làm tài liệu không kịp có giá trị — lúc đó Scrum phù hợp hơn.

Ưu điểm
Nhược điểm

#6. Mô hình Prototype

Định nghĩa

Mô hình Prototype là quá trình tạo ra một phiên bản thử nghiệm của sản phẩm để kiểm tra và đánh giá trước khi phát triển phiên bản cuối cùng. Đây là cách tiếp cận hiệu quả để thu thập phản hồi về yêu cầu, chức năng và khả năng sử dụng.

Sơ đồ vòng lặp tạo mẫu: thu thập yêu cầu, dựng mẫu nhanh, khách hàng đánh giá, tinh chỉnh rồi mới xây dựng sản phẩm
Prototype — dựng mẫu nhanh để chốt yêu cầu trước khi xây dựng thật.
Các giai đoạn chính
Hai loại prototype

Đề thi FE hay hỏi phân loại này, và nó cũng quyết định bạn viết code prototype cẩn thận đến đâu:

Rủi ro kinh điển của loại thứ hai: một prototype được dựng để "chỉ demo cho khách" rồi bị đẩy lên production vì trông đã chạy được — mang theo toàn bộ nợ kỹ thuật của một bản dựng tạm.

Khi nào nên sử dụng
Ưu điểm
Nhược điểm

B. 3 Mô hình thuộc nhóm Agile

#7. Scrum (Quan trọng - Cần học)

Định nghĩa

Scrum là framework phổ biến nhất trong Agile, tập trung vào việc quản lý dự án thông qua các sprint ngắn và các cuộc họp thường xuyên. Đây là phương pháp được sử dụng rộng rãi trong ngành công nghiệp phần mềm và là kiến thức bắt buộc cho mọi lập trình viên.

Sơ đồ Scrum: product backlog đi vào sprint planning, sprint backlog, sprint hai đến bốn tuần với daily scrum, kết thúc bằng increment
Scrum — product backlog, sprint backlog, sprint và increment cùng các sự kiện định kỳ.
Các yếu tố chính
Khi nào nên sử dụng
Khi nào không nên sử dụng
Lưu ý quan trọng

Scrum là framework phổ biến nhất trong phát triển phần mềm hiện đại và là kiến thức cốt lõi cho mọi lập trình viên. Việc hiểu và thực hành tốt Scrum sẽ giúp bạn:

#8. Kanban

Định nghĩa

Kanban là phương pháp quản lý công việc trực quan, bắt nguồn từ hệ thống sản xuất của Toyota. Phương pháp này tập trung vào việc cải thiện liên tục và tối ưu hóa luồng công việc thông qua việc trực quan hóa quy trình làm việc trên bảng Kanban.

Bảng Kanban với các cột To Do, In Progress, Review và Done cùng các thẻ công việc di chuyển từ trái sang phải
Kanban — dòng công việc chạy qua các cột, mỗi cột có giới hạn WIP.
Nguyên tắc cơ bản
Khi nào nên sử dụng
Ưu điểm
Nhược điểm

#9. Extreme Programming (XP)

Định nghĩa

XP là phương pháp phát triển phần mềm tập trung vào việc cải thiện chất lượng và khả năng đáp ứng với yêu cầu thay đổi của khách hàng thông qua 12 nguyên tắc thực hành cốt lõi.

12 Nguyên tắc thực hành cốt lõi
Khi nào nên sử dụng
Ưu điểm
Nhược điểm

2. Tiêu chí lựa chọn phương pháp

Bạn chỉ cần nắm vững Waterfall với Scrum thôi là đủ rồi nhé, còn nếu chuyên sâu hơn thì coi ở dưới nhé.

Đặc điểm dự án

Tiêu chí Waterfall V-Model Incremental Spiral RUP Prototype Scrum Kanban XP
Yêu cầu cần rõ tới mức nào
khi bắt đầu
Rõ và ổn định 100% Rõ và ổn định 100% Khung rõ, chi tiết bồi dần Có thể chưa rõ; làm rõ dần qua từng vòng Kiến trúc chốt sớm, chi tiết còn đổi được Chưa rõ — mục đích chính là làm cho rõ Đổi liên tục là chuyện bình thường Không cần biết trước; việc vào theo dòng Đổi liên tục, kể cả rất muộn
Quy mô dự án Nhỏ-Trung bình Trung bình Mọi quy mô Lớn Lớn Nhỏ-Trung bình Nhỏ-Trung bình Mọi quy mô Nhỏ
Độ phức tạp Thấp-Trung bình Cao Mọi mức độ Cao Cao Thấp-Trung bình Mọi mức độ Mọi mức độ Cao
Thời gian Dài hạn Dài hạn Trung hạn Dài hạn Dài hạn Ngắn hạn Ngắn-Trung hạn Linh hoạt Ngắn hạn

Đặc điểm đội ngũ

Tiêu chí Waterfall V-Model Incremental Spiral RUP Prototype Scrum Kanban XP
Kinh nghiệm Trung bình Cao Trung bình Cao Cao Thấp-Trung bình Cao Trung bình Rất cao
Kỹ năng giao tiếp Trung bình Cao Cao Cao Cao Cao Rất cao Cao Rất cao
Quy mô đội Linh hoạt Lớn Trung bình Lớn Lớn Nhỏ ≤ 10 người
(bản 2020; sách cũ ghi 5–9)
Linh hoạt Nhỏ

Sự tham gia của khách hàng

Tiêu chí Waterfall V-Model Incremental Spiral RUP Prototype Scrum Kanban XP
Mức độ tham gia Thấp Trung bình Cao Cao Trung bình Rất cao Cao Trung bình Rất cao
Tần suất feedback Thấp Trung bình Cao Cao Trung bình Rất cao Cao Liên tục Rất cao
Yêu cầu thay đổi Ít Ít Nhiều Trung bình Trung bình Nhiều Nhiều Linh hoạt Rất nhiều

3. Kiểm thử phần mềm (Software Testing - Môn SWT301)

Giới thiệu về kiểm thử

Kiểm thử là gì?

Kiểm thử phần mềm là quá trình đánh giá và xác minh xem một ứng dụng hoặc sản phẩm phần mềm có đáp ứng các yêu cầu kỹ thuật và nghiệp vụ đã đề ra hay không.

Tại sao cần kiểm thử?

7 Nguyên tắc cơ bản của Kiểm thử phần mềm

  1. Không thể kiểm thử toàn diện (Exhaustive testing is not possible): Không thể kiểm tra tất cả các trường hợp có thể xảy ra, cần tập trung vào các trường hợp quan trọng.
  2. Tập trung lỗi (Defect Clustering): Phần lớn các lỗi thường tập trung ở một số module nhất định của phần mềm.
  3. Nghịch lý thuốc trừ sâu (Pesticide Paradox): Việc lặp lại cùng một bộ test case sẽ không phát hiện được lỗi mới.
  4. Kiểm thử chỉ phát hiện lỗi (Testing shows presence of defects): Kiểm thử có thể chỉ ra sự tồn tại của lỗi nhưng không thể chứng minh phần mềm hoàn toàn không có lỗi.
  5. Ảo tưởng không có lỗi (Absence of Error – fallacy): Việc không tìm thấy lỗi không đồng nghĩa với việc phần mềm đã sẵn sàng để phát hành.
  6. Kiểm thử sớm (Early Testing): Việc kiểm thử nên được bắt đầu càng sớm càng tốt trong chu trình phát triển phần mềm.
  7. Kiểm thử phụ thuộc ngữ cảnh (Testing is context dependent): Cách thức kiểm thử phụ thuộc vào bối cảnh của ứng dụng.

Ba trục để phân loại kiểm thử

Chỗ hay mất điểm nhất của phần này là gộp ba câu hỏi khác nhau vào một danh sách. Trước khi học tên từng loại, hãy nắm ba trục độc lập sau — một phép kiểm thử luôn có vị trí trên cả ba trục cùng lúc.

Trục Câu hỏi nó trả lời Các giá trị
Mức (Level) Kiểm thử khối lớn cỡ nào, và ở giai đoạn nào của dự án? Unit → Integration → System → Acceptance
Loại (Type) Kiểm thử thuộc tính gì của hệ thống? Functional; Non-functional (performance, security, usability…); Regression; Smoke; Sanity
Kỹ thuật (Technique) Người kiểm thử có thấy code hay không? Black-box, White-box, Grey-box

Ví dụ: một test case "đăng nhập sai mật khẩu 5 lần thì bị khóa tài khoản" là mức System, loại Functional, kỹ thuật Black-box. Cùng chức năng đó, nếu người viết test đọc code để chọn đầu vào phủ hết các nhánh if thì nó thành White-box — mức và loại không đổi.

Black-box, White-box, Grey-box
Kỹ thuật Người test biết gì Dựa vào đâu để thiết kế test Thường dùng ở mức
Black-box Chỉ đầu vào và đầu ra mong đợi Đặc tả yêu cầu: phân vùng tương đương, giá trị biên, bảng quyết định System, Acceptance
White-box Thấy toàn bộ code và luồng điều khiển Độ phủ: phủ câu lệnh, phủ nhánh, phủ đường đi Unit, Integration
Grey-box Biết kiến trúc, schema database, API — nhưng không đọc từng dòng code Kết hợp: test qua giao diện nhưng kiểm tra cả dữ liệu trong DB Integration, System

1. Bốn mức kiểm thử (Test Levels)

Bốn mức dưới đây xếp theo kích thước của thứ đang được kiểm thử, từ một hàm đơn lẻ tới cả hệ thống trong tay người dùng. Đây là trục mức, không phải trục loại — vì vậy Regression không nằm trong bảng này (xem mục 3 bên dưới).

Loại kiểm thử Mô tả Khi nào thực hiện Ai thực hiện
Unit Testing - Kiểm thử từng đơn vị code riêng lẻ
- Ví dụ: Kiểm thử một hàm, một class
Trong quá trình viết code Lập trình viên
Integration Testing - Kiểm thử sự tương tác giữa các module
- Ví dụ: Kiểm tra luồng dữ liệu giữa các component
Sau khi hoàn thành các module Tester/Developer
System Testing - Kiểm thử toàn bộ hệ thống
- Kiểm tra tất cả tính năng của phần mềm
Sau khi tích hợp hoàn chỉnh QA Team
Acceptance Testing - Kiểm thử chấp nhận từ người dùng
- Đảm bảo đáp ứng yêu cầu nghiệp vụ
Trước khi bàn giao End Users/Client

Hai mức tích hợp hay bị hỏi thêm

2. Kiểm thử phi chức năng (Non-functional Testing)

Kiểm thử chức năng hỏi "hệ thống có làm đúng việc không". Kiểm thử phi chức năng hỏi "hệ thống làm việc đó tốt đến mức nào" — nhanh, an toàn, dễ dùng, chạy được ở đâu. Một hệ thống pass hết functional test vẫn có thể không dùng được nếu mỗi thao tác mất 30 giây.

Loại kiểm thử Mô tả Mục đích Công cụ phổ biến
Performance Testing
(nhóm bao gồm Load, Stress, Spike, Endurance)
Kiểm tra hiệu năng hệ thống - Đánh giá tốc độ phản hồi
- Kiểm tra thời gian xử lý
- Đánh giá khả năng mở rộng
JMeter, LoadRunner
Security Testing Kiểm tra tính bảo mật - Phát hiện lỗ hổng bảo mật
- Kiểm tra xác thực và phân quyền
- Bảo vệ dữ liệu
OWASP ZAP, Acunetix
Usability Testing Kiểm tra tính dễ sử dụng - Đánh giá giao diện người dùng
- Kiểm tra trải nghiệm người dùng
- Đảm bảo tính thân thiện
UserTesting, Lookback
Compatibility Testing Kiểm tra tính tương thích - Kiểm tra trên nhiều trình duyệt
- Kiểm tra trên nhiều thiết bị
- Kiểm tra với các phiên bản OS
BrowserStack, Sauce Labs
Load Testing
(một nhánh của Performance)
Kiểm tra khả năng chịu tải ở mức dự kiến - Đánh giá hiệu suất dưới tải bình thường và tải đỉnh đã dự tính
- Kiểm tra số lượng user đồng thời
- Trả lời: "hệ thống có đáp ứng được lượng user đã cam kết không?"
Apache JMeter, Gatling
Stress Testing
(một nhánh của Performance)
Đẩy vượt mức dự kiến cho tới khi hệ thống gãy - Tìm điểm gãy (breaking point)
- Xem hệ thống gãy có đẹp không: báo lỗi tử tế hay mất dữ liệu
- Đánh giá khả năng phục hồi sau khi hết tải
WebLoad, LoadUI Pro

3. Kiểm thử liên quan đến thay đổi (Change-related Testing)

Nhóm này không thuộc functional hay non-functional — nó được định nghĩa bởi lý do chạy: có một thay đổi vừa vào code. Bốn tên dưới đây bị lẫn nhau nhiều nhất trong đề thi.

Loại Chạy cái gì Trả lời câu hỏi Khi nào
Retest
(Confirmation Testing)
Đúng những test case đã fail lần trước, trên cùng dữ liệu đó Lỗi đã báo đã được sửa chưa? Ngay sau khi dev nói "fixed"
Regression Các test case đã pass từ trước, ở vùng có thể bị ảnh hưởng Bản sửa đó có làm vỡ chỗ khác không? Sau khi retest pass; và sau mọi thay đổi code
Smoke Một tập rất nhỏ, rộng-mà-nông, phủ các chức năng sống-còn Bản build này có đáng test tiếp không? Ngay khi nhận build mới, trước mọi việc khác
Sanity Hẹp-mà-sâu: chỉ đúng chức năng vừa sửa/vừa thêm Phần vừa đổi có hoạt động ở mức cơ bản không? Khi cần kết luận nhanh, không đủ thời gian regression đầy đủ

Liên hệ ngược lên 7 nguyên tắc ở đầu mục: bộ regression suite chạy y nguyên mãi mãi chính là ví dụ điển hình của nghịch lý thuốc trừ sâu — nó sẽ ngừng tìm ra lỗi mới. Vì vậy regression suite cần được rà và bổ sung test case định kỳ, không phải viết một lần rồi để đó.

Quy trình kiểm thử

  1. Lập kế hoạch kiểm thử: Xác định phạm vi, mục tiêu, và chiến lược
  2. Thiết kế test case: Xây dựng các kịch bản kiểm thử
  3. Chuẩn bị môi trường: Cài đặt và cấu hình môi trường test
  4. Thực thi kiểm thử: Chạy các test case đã thiết kế
  5. Báo cáo lỗi: Ghi nhận và theo dõi các lỗi phát hiện
  6. Retest và regression: Chạy lại đúng test đã fail để xác nhận lỗi đã hết (retest), rồi chạy lại các test đã pass để chắc bản sửa không phá chỗ khác (regression)
  7. Báo cáo kết quả: Tổng hợp và đánh giá kết quả kiểm thử

4. Yêu cầu chức năng và phi chức năng

Tổng quan về yêu cầu phần mềm

Yêu cầu phần mềm là những điều kiện hoặc khả năng mà hệ thống phải đáp ứng. Được chia thành hai loại chính:

1. Yêu cầu chức năng (Functional Requirements)

Phân loại Mô tả Ví dụ cụ thể
Quản lý người dùng Các chức năng liên quan đến tài khoản và phân quyền - Đăng ký/đăng nhập
- Quản lý profile
- Phân quyền người dùng
Xử lý nghiệp vụ Các quy trình xử lý chính của hệ thống - Tạo đơn hàng
- Xử lý thanh toán
- Quản lý kho hàng
Quản lý dữ liệu Các thao tác với dữ liệu - Thêm/sửa/xóa thông tin
- Tìm kiếm và lọc dữ liệu
- Đồng bộ hóa dữ liệu
Tương tác người dùng Giao diện và tương tác - Form nhập liệu
- Menu điều hướng
- Thông báo phản hồi
Báo cáo & Thống kê Chức năng tổng hợp và phân tích - Báo cáo doanh thu
- Thống kê người dùng
- Biểu đồ phân tích

2. Yêu cầu phi chức năng (Non-Functional Requirements)

Loại yêu cầu Mô tả Tiêu chí đánh giá Ví dụ cụ thể
Hiệu năng (Performance) Khả năng đáp ứng về tốc độ và tài nguyên - Thời gian phản hồi
- Throughput
- Sử dụng tài nguyên
- Load trang < 3 giây
- Xử lý 1000 request/giây
- CPU usage < 80%
Bảo mật (Security) Khả năng bảo vệ thông tin và hệ thống - Xác thực
- Mã hóa
- Kiểm soát truy cập
- Xác thực 2 lớp
- Mã hóa SSL/TLS
- Role-based access control
Độ tin cậy (Reliability) Khả năng hoạt động ổn định - Uptime
- MTBF
- Disaster recovery
- Uptime 99.9%
- Backup hàng ngày
- Recovery time < 1h
Khả năng sử dụng (Usability) Mức độ dễ sử dụng với người dùng - Dễ học
- Dễ nhớ
- Satisfaction rate
- Có hướng dẫn sử dụng
- UI/UX thân thiện
- Responsive design
Khả năng mở rộng (Scalability) Khả năng tăng trưởng và nâng cấp - Horizontal scaling
- Vertical scaling
- Load balancing
- Microservices
- Auto-scaling
- Distributed system
Khả năng bảo trì (Maintainability) Dễ dàng bảo trì và nâng cấp - Code quality
- Documentation
- Modularity
- Clean code
- API documentation
- Modular architecture

Lưu ý khi xác định yêu cầu

Hướng dẫn làm bài thi PE SWE201c - LƯU Ý MANG TÍNH CHẤT THAM KHẢO

Phân tích đề thi PE SWE201c

1. Cấu trúc đề thi điển hình

2. Kỹ thuật đọc hiểu đề

Bước 1: Đọc tổng quan
Bước 2: Đánh dấu từ khóa quan trọng

Đây là bảng đáng học nhất của cả phần PE: đề bao giờ cũng gài tín hiệu trong đoạn mô tả bối cảnh, và câu 1 chấm chủ yếu vào việc bạn có đọc ra được không. Dòng đầu tiên là dòng quan trọng nhất.

Loại từ khóa Ví dụ trong đề Gợi tới mô hình
Độ rõ của yêu cầu
(tín hiệu mạnh nhất)
"requirements are clear, complete and stable"
↔ "requirements are not fully known" / "may change"
Rõ và ổn định → Waterfall hoặc V-Model
Chưa rõ hoặc sẽ đổi → Scrum, Incremental, Prototype
Thời gian và phạm vi "must be completed within 12 months" Một mình deadline không quyết định gì. Phải xem phạm vi: deadline cố định + phạm vi cố định → Waterfall; deadline cố định + phạm vi thương lượng được → Incremental/Scrum (giao phần giá trị nhất trước hạn)
Rủi ro và tính an toàn "safety-critical", "failure could cause injury", "high technical risk" Spiral (nếu đề nhấn vào phân tích rủi ro từng vòng) hoặc V-Model (nếu đề nhấn vào kiểm thử và truy vết)
Giao hàng sớm và thường xuyên "deliver a working version every few weeks", "first release in 3 months" Incremental hoặc Scrum. Không phải Spiral — Spiral lặp để giảm rủi ro, không để phát hành
Khách hàng tham gia "customer is available throughout"
↔ "customer signs off once at the start"
Tham gia liên tục → Scrum, XP
Ký một lần rồi biến mất → Waterfall
Yêu cầu tài liệu và truy vết "must comply with regulations", "full documentation required", "audit" Waterfall, V-Model, hoặc RUP nếu đề đồng thời muốn lặp
Giao diện chưa ai hình dung được "users cannot describe what they want until they see it" Prototype
Quy mô và phân bố team "large distributed team", "specialised roles"
↔ "small co-located team"
Lớn và phân tán → RUP, Waterfall
Nhỏ và ngồi cùng chỗ → XP, Scrum
Loại công việc "continuous stream of support tickets", "maintenance work" Kanban — luồng liên tục, không chia sprint
Bước 3: Phân tích ràng buộc

Câu 1: Lựa chọn mô hình phát triển (2đ)

Cách chọn mô hình phát triển

Quy trình ra quyết định
Templates trả lời cho từng mô hình
Template cho Agile (Scrum)
Mẫu trả lời
Recommendation to use Agile:
I suggest using the Agile method for these reasons:

a) Requirements:
• Flexibility: Requirements not clearly defined, might change during development
• Adaptability: Need to adjust based on user feedback and market trends
• Thoroughness: Many requirements need early validation

b) Development Team:
• Team Structure: 4-6 experienced developers, perfect for Scrum
• Strong Collaboration: Good communication within team
• Role Expertise: Clear roles (PO, Scrum Master, Developers)
• Adaptability: Can quickly adjust to changes
• Time Constraints: Fits well with sprint cycles

Conclusion:
Scrum is best due to team structure, need for iteration, and ability to handle changing requirements.
                            
Template cho Waterfall
Mẫu trả lời
Recommendation to use Waterfall:
I recommend the Waterfall method for these reasons:

a) Requirements:
• Clear and Stable: Requirements well-defined from start
• Structured Approach: Step-by-step process needed
• Detailed Planning: Complex requirements need thorough documentation

b) Development Team:
• Team Structure: Works well in structured environment
• Specific Roles: Clear separation of responsibilities
• Documentation Focus: Strong documentation practices
• Predictability: Well-defined timeline and milestones

Conclusion:
Waterfall is best due to clear requirements, structured roles, and need for documentation.
                            
Tiêu chí chấm điểm

Đây là cách chia điểm ước lượng cho câu 2 điểm — dùng để biết nên dồn chữ vào đâu, không phải barem chính thức.

Tiêu chí Điểm Mô tả
Lựa chọn mô hình 0.25 Chọn mô hình phù hợp với context
Phân tích yêu cầu 0.5 Phân tích chi tiết các yêu cầu dự án
Đánh giá team 0.5 Phân tích khả năng và cấu trúc team
Lập luận 0.5 Giải thích rõ ràng lý do chọn mô hình
Kết luận 0.25 Tổng hợp và kết luận logic
Tổng 2.0 Khớp với số điểm của câu hỏi

Đọc bảng theo tỷ lệ thì rõ hơn đọc theo số: ba phần tư số điểm nằm ở phần phân tích và lập luận, chỉ một phần tám ở chỗ nêu tên mô hình. Viết "Chọn Waterfall" rồi hết là mất gần hết điểm, dù chọn đúng.

Câu 2: Testing Levels & Responsibilities (1đ)

Template trả lời mẫu (Nhớ paraphrase lại nhé và học thuộc hoặc học hiểu tùy vào bạn)

Mẫu trả lời
Based on the project requirements, the following testing levels are proposed:

1. Unit Testing
   Tester: Developers
   Focus:
   - Testing individual software components
   - Verifying correct functionality of each component
   - Code coverage and basic functionality checks

2. Integration Testing
   Tester: Developers or dedicated integration testing team
   Focus:
   - Component interactions and compatibility
   - Interface testing between modules
   - Data flow verification

3. System Testing
   Tester: Dedicated testing team
   Focus:
   - End-to-end system functionality
   - Requirements verification
   - Complete system behavior testing

4. User Acceptance Testing (UAT)
   Tester: End users
   Focus:
   - Real-world usage scenarios
   - Business requirement validation
   - User workflow verification

In addition to the four levels above, the following test types
will be applied across those levels:

- Regression Testing
  Tester: Testing team, supported by automated test suites
  Purpose: ensure that each change does not break features
  that already worked. Runs after every build, at unit,
  integration and system level.

- Performance Testing (including load and stress testing)
  Tester: Specialised performance engineers
  Purpose: verify response time and throughput at the
  expected user volume (load), and locate the breaking
  point beyond it (stress).
                                            

Từ khóa quan trọng cho mỗi level

Testing Level Keywords Responsible Team When to Use
Unit Testing - Individual components
- Component functionality
- Code verification
- Basic testing
Developers During development
Integration Testing - Component interaction
- Interface testing
- Module compatibility
- Data flow
Developers/Integration Team After unit testing
System Testing - Full system testing
- Requirements validation
- End-to-end testing
- System behavior
Testing Team After integration
UAT - User scenarios
- Business validation
- Real usage
- User workflows
End Users Before release

Các trường hợp đặc biệt

Regression Testing

Performance Testing

Tips quan trọng

  1. Phân công testing đúng người
    • Unit testing → Developers
    • Integration → Dev team/Testing team
    • System → Dedicated testers
    • UAT → End users
  2. Thứ tự testing
    • Start with Unit Testing
    • Move to Integration
    • Complete System Testing
    • Finish with UAT
  3. Focus areas
    • Component functionality
    • Integration points
    • System requirements
    • User acceptance

Tiêu chí chấm điểm

Tiêu chí Điểm Mô tả
Testing Levels 0.4 Xác định đúng các level testing cần thiết
Responsibilities 0.3 Phân công đúng người/team thực hiện
Explanation 0.3 Giải thích lý do cho mỗi level

Câu 3: Functional & Non-functional Requirements (2đ)

Bảng nhận diện chi tiết

Tiêu chí Functional (FR) Non-functional (NFR)
Cấu trúc câu - [Chủ thể] + [Động từ] + [Đối tượng]
- "Users can upload files"
- "System shall process payments"
- "System needs/should" + [Tính chất]
- Chứa chỉ số đo lường
- Mô tả chất lượng hệ thống
Từ khóa đặc trưng Động từ hành động:
- register, login
- create, read, update, delete
- manage, process, calculate
- upload, download
- search, filter, sort
Tính từ/Danh từ chỉ tính chất:
- secure, fast, reliable
- performance, security
- availability, usability
- response time, uptime
- concurrent users
Ví dụ thực tế - "Users can register new accounts"
- "Admin can manage user profiles"
- "System must calculate total price"
- "Users can upload documents"
- "System must respond within 3s"
- "System needs 99.9% uptime"
- "System should support 1000 users"
- "Data must be encrypted"

Template trả lời chuẩn

Mẫu trả lời
                            Functional Requirements:
                            • [Tên chức năng ngắn gọn]: The system shall [động từ] [mô tả chi tiết chức năng].
                            Source: "[trích dẫn từ case study]"

                            Ví dụ:
                            • User Registration: The system shall allow users to create new accounts with email and password.
                            • Order Processing: The system shall enable customers to place and track their orders.
                            • Report Generation: The system shall provide managers with daily sales reports.

                            Non-Functional Requirements:
                            • [Loại NFR]: The system shall [mô tả yêu cầu] [chỉ số cụ thể nếu có].
                            Source: "[trích dẫn từ case study]"

                            Ví dụ:
                            • Performance: The system shall respond to user requests within 3 seconds.
                            • Security: The system shall encrypt all user passwords using SHA-256.
                            • Reliability: The system shall maintain 99.9% uptime during business hours.
Quy tắc format:
Ví dụ đáp án hoàn chỉnh:
Mẫu trả lời
                            Functional Requirements:
                            • Data Entry: The system shall allow users to input customer information into the database.
                            Source: "Users need to input customer details into the system"

                            • Report Generation: The system shall generate monthly sales reports automatically.
                            Source: "System must provide monthly reports for management"

                            • User Management: The system shall enable administrators to create and modify user accounts.
                            Source: "Admin needs to manage system users"

                            Non-Functional Requirements:
                            • Performance: The system shall process all data entry operations within 1 second.
                            Source: "System must be fast and responsive"

                            • Security: The system shall require two-factor authentication for admin access.
                            Source: "System needs strong security measures"

                            • Reliability: The system shall maintain 99.9% uptime during working hours.
                            Source: "System must be highly available"

Tiêu chí chấm điểm

Tiêu chí Điểm Mô tả
Functional Requirements 1.0 Xác định đúng và đủ FR từ case study
Non-functional Requirements 0.5 Xác định đúng và đủ NFR từ case study
Phân loại 0.3 Phân loại chính xác FR/NFR
Trình bày 0.2 Rõ ràng, logic, có trích dẫn

Câu 4: User Stories dựa trên Requirements (1.5đ)

Cấu trúc chuẩn cho mỗi User Story

Mẫu trả lời
            As a [role]
            I want to [action/feature từ FR hoặc NFR]
            So that [benefit/value]

            Ví dụ từ FR "System shall allow users to register":
            As a new user
            I want to register an account
            So that I can access the system's features

Template trả lời

Mẫu trả lời
            User Story 1: [Từ FR/NFR 1]
            As a [role liên quan đến requirement]
            I want to [chức năng/yêu cầu từ requirement]
            So that [lợi ích mang lại]

            [Tiếp tục với 4 User Story còn lại...]

INVEST — sáu tiêu chí của một user story tốt

Viết đúng khuôn "As a / I want / So that" chỉ đảm bảo hình thức. INVEST là bộ sáu tiêu chí để kiểm tra nội dung. Đề bài không bắt liệt kê INVEST, nhưng người chấm dùng chính sáu tiêu chí này để trừ điểm — và câu 6 (story mapping) thì trừ điểm thẳng vào chữ Small.

Chữ Nghĩa Kiểm tra bằng câu hỏi
I — Independent Độc lập với story khác Có làm story này trước story kia được không? Nếu buộc phải theo thứ tự thì nên gộp hoặc chia lại.
N — Negotiable Còn thương lượng được Story nói cần gì hay đã chỉ định luôn làm thế nào? Nếu đã ghi rõ dùng dropdown hay radio button thì hết chỗ thương lượng.
V — Valuable Có giá trị cho người dùng Phần "So that" có nói được lợi ích thật không? "So that the data is saved to the database" là giá trị cho hệ thống, không phải cho người dùng.
E — Estimable Ước lượng được Team có đủ thông tin để đoán công sức chưa? Nếu chưa thì story còn thiếu chi tiết, hoặc cần một spike để tìm hiểu trước.
S — Small Nhỏ, vừa một sprint Làm xong trong một sprint được không? Nếu không thì đó là epic, phải chia nhỏ.
T — Testable Kiểm thử được Viết được acceptance criteria pass/fail rõ ràng chưa? "The system should be user-friendly" không kiểm thử được; "a new user completes registration in under 3 steps" thì được.

Tips làm bài

  1. Chọn requirement để viết story
    • Ưu tiên các FR rõ ràng, cụ thể
    • Có thể dùng cả FR và NFR
    • Chọn requirement có tác động lớn đến user
  2. Xác định role
    • Role phải phù hợp với requirement
    • Dùng role cụ thể (không dùng "user" chung chung)
    • Có thể dùng: admin, manager, customer, staff...
  3. Viết benefit
    • Benefit phải rõ ràng, cụ thể
    • Liên quan trực tiếp đến role
    • Thể hiện được giá trị thực tế

Thang điểm chi tiết (1.5đ) - Tham khảo chứ không hẳn là đúng

Tiêu chí Điểm Chi tiết
Số lượng 0.3 Đủ 5 user stories
Cấu trúc 0.3 Đúng format As a/I want/So that
Liên kết với Requirements 0.4 Story phải dựa trên requirements ở câu 3
Chất lượng nội dung 0.5 Role phù hợp, benefit rõ ràng, logic

Câu 5: Quality Metrics (1.0đ)

Template trả lời chuẩn

Mẫu trả lời
To measure code and design quality in this project, I propose these metrics:

1. LCOM (Lack of Cohesion of Methods) - Measuring Cohesion
   • Description: Measures how weakly the methods of a class are related to each other
   • Formula: LCOM = P - Q, where P = number of method pairs sharing
     no attribute, Q = number of method pairs sharing at least one
     attribute. If P - Q is negative, LCOM is taken as 0.
   • Good Value: 0 (lower is better; the value is a count, not a ratio)
   • Application in Project: Use to identify classes that may need to be split into smaller, more focused classes

2. CBO (Coupling Between Objects) - Measuring Coupling
   • Description: Counts number of other classes a class is coupled to
   • Formula: Count unique class dependencies (method calls, attributes, parameters, etc.)
   • Good Value: < 14 classes
   • Application in Project: Monitor dependencies between components to maintain loose coupling

3. Cyclomatic Complexity
   • Description: Measures complexity of code by counting decision points
   • Formula: E - N + 2P (E=edges, N=nodes, P=connected components)
   • Good Value: < 10 per method
   • Application in Project: Identify complex methods needing refactoring

4. Code Coverage
   • Description: Percentage of code executed by tests
   • Formula: (Lines executed / Total lines) * 100
   • Good Value: > 80% coverage
   • Application in Project: Ensure comprehensive test coverage of critical features

5. DIT (Depth of Inheritance Tree)
   • Description: Measures inheritance levels in class hierarchy
   • Formula: Count levels from class to root of inheritance tree
   • Good Value: < 6 levels
   • Application in Project: Keep inheritance hierarchies manageable and avoid deep nesting

Các Metrics phổ biến

Loại Tên Metric Mô tả Giá trị tốt
Cohesion LCOM (Lack of Cohesion of Methods) Đếm số cặp method không dùng chung attribute, trừ đi số cặp có dùng chung Càng thấp càng tốt, tốt nhất là 0
(ngưỡng < 0.5 là của LCOM* đã chuẩn hóa)
TCC (Tight Class Cohesion) Đo tỷ lệ methods truy cập chung attributes > 0.5
Coupling CBO (Coupling Between Objects) Đếm số lượng classes có liên kết < 14
RFC (Response For Class) Số lượng methods có thể được gọi < 50
Others Cyclomatic Complexity Độ phức tạp của code < 10
DIT (Depth of Inheritance Tree) Độ sâu của cây kế thừa < 6
LOC (Lines of Code) Số dòng code Tùy project

Tips làm bài

  1. Chọn metrics phù hợp
    • Metrics đo cohesion
    • Metrics đo coupling
    • Chọn thêm metrics đo các khía cạnh khác
  2. Mô tả chi tiết
    • Giải thích rõ metric đo gì
    • Nêu công thức/cách tính cụ thể
    • Chỉ ra giá trị tốt là bao nhiêu
  3. Liên hệ với dự án
    • Giải thích cách áp dụng vào dự án
    • Nêu lợi ích khi sử dụng metric
    • Đề xuất công cụ đo nếu có

Câu 6: Story Mapping (2.5đ)

Story Mapping là gì?

Story Mapping là một kỹ thuật trực quan để:

Cấu trúc của Story Map:
Bản đồ user story: trục ngang là các activity theo thời gian, trục dọc là task và story xếp theo độ ưu tiên
Story map — activity theo trục ngang, task và story xếp theo độ ưu tiên trên trục dọc.
Lợi ích của Story Mapping:

Cấu trúc trình bày Story Map trên EOS

Story Map được chia làm 2 phần chính:

  1. Phần A - Activities and User tasks:
    • Liệt kê các hoạt động chính (Activities)
    • Dưới mỗi Activity là các User tasks cụ thể
    • Đánh số theo cấp: 1, 1.1, 1.2, etc.
  2. Phần B - Releases:
    • Chia các User stories theo từng đợt release
    • Mỗi story phải map với task cụ thể
    • Đánh số 3 cấp: 1.1.1, 1.1.2, etc.

Ví dụ Story Map cho "Train Schedule Management"

Mẫu trả lời
A. Activities and User tasks
1. Create Train Schedule
   1.1 Input Basic Schedule Information
   1.2 Set Route Details
   1.3 Assign Resources
   1.4 Validate Schedule

2. Update Train Schedule
   2.1 Modify Existing Schedule
   2.2 Handle Schedule Conflicts
   2.3 Notify Affected Parties
   2.4 Update Related Systems

B. Releases
Release 1 (Core Functionality)
1.1.1 As a scheduler, I want to input train departure times
1.1.2 As a scheduler, I want to input train arrival times
1.2.1 As a scheduler, I want to define train stops
2.1.1 As a scheduler, I want to modify schedule times
2.1.2 As a scheduler, I want to update route information

Release 2 (Advanced Features)
1.3.1 As a scheduler, I want to assign train staff
1.4.1 As a scheduler, I want to check schedule conflicts
2.2.1 As a scheduler, I want to resolve timing conflicts
2.3.1 As a scheduler, I want to send update notifications
                    

Tips làm Story Map hiệu quả

1. Cách xác định Activities
2. Cách chia User Tasks
3. Cách phân chia Releases

Lỗi thường gặp

Tiêu chí chấm điểm

Tiêu chí Điểm Yêu cầu
Cấu trúc Story Map 0.5 Đúng format và đánh số
Activities & Tasks 0.7 Phân chia logic và đầy đủ
User Stories 0.8 Stories rõ ràng và đúng format
Releases 0.5 Phân chia releases hợp lý

Tổng kết và Tips chung

Quản lý thời gian

Chiến lược làm bài

Lưu ý quan trọng

Đề mẫu:

Đề PE kỳ FA24 dưới đây là đề mình đã làm. Bối cảnh: một Cruise Control System (CCS) cho xe hơi — hệ thống an toàn quan trọng, yêu cầu đã khá rõ, thời hạn 7 tháng cho bản đầu và 12 tháng cho bản cuối, team có kỹ năng kỹ thuật tốt và phân vai rõ. Sáu câu hỏi lần lượt là: chọn mô hình phát triển (2đ), testing levels và ai chịu trách nhiệm (1đ), yêu cầu chức năng và phi chức năng (2đ), viết user story (1.5đ), quality metrics (1đ), story mapping (2.5đ) — tổng 10đ.

Đề mỗi kỳ đổi bối cảnh (đổi hệ thống, đổi thời hạn, đổi đặc điểm team) nhưng giữ nguyên dạng câu hỏi. Vì vậy đừng học thuộc đáp án cho CCS — hãy học cách đọc bối cảnh rồi lắp vào template.

Xem đề thi
Ảnh chụp toàn bộ đề thi PE SWE201c kỳ FA24 gồm sáu câu hỏi
Đề thi PE SWE201c kỳ FA24 — ảnh gốc, mở ở tab mới để phóng to.

Đáp án tham khảo:

Câu 1: Lựa chọn mô hình phát triển phần mềm

I agree with the suggestion to use the Unified Process (UP) for this project for the following reasons:

a) Requirements:

b) Development Team:

Conclusion: The Unified Process is the most suitable model for this project because it is risk-driven, architecture-centric and use-case-driven, while its iterations still allow the detailed requirements to be refined as the team learns more about the system.

Câu 2: Các loại kiểm thử

  1. Unit Testing:
    • Role: Developers
    • Purpose: It makes sure that small pieces of code, like functions or methods, work as expected.
  2. Integration Testing:
    • Role: Developers
    • Purpose: It ensures that different parts of the system work well together.
  3. System Testing:
    • Role: QA Testers
    • Purpose: It tests the whole system to see if it works properly
  4. Acceptance Testing:
    • Role: QA Testers and End Users
    • Purpose: It checks if the system meets the customer's requirements and is ready for use.
  5. Regression Testing:
    • Role: QA Testers
    • Purpose: Checks that new changes haven't broken anything that was working before.
  6. Performance Testing:
    • Role: Performance testers
    • Purpose: Ensures the system performs under load conditions.

Câu 3: Yêu cầu chức năng và phi chức năng

Functional Requirements:
Performance Requirements:
Usability Requirements:

Câu 4: User Stories

Câu 5: Phân loại mô hình — Predictive và Adaptive

Predictive Models (kế hoạch cố định trước):
Adaptive Models (kế hoạch điều chỉnh theo phản hồi):

Câu 6: Phân tích và phân chia User Stories

A. Activities and User Tasks
  1. Set Speed
    1. Set Speed Range
    2. Adjust Speed
  2. Maintain Safe Distance
    1. Detect Vehicle in Front
    2. Adjust Distance
  3. Cancel Cruise Control
    1. Manual Cancel
    2. Automatic Cancel
Release 1
Release 2
Release 3

Hướng dẫn làm bài thi FE SWE201c

Từ vựng quan trọng

Thuật ngữ cơ bản

Thuật ngữ nâng cao

Tổng hợp lý thuyết quan trọng

Agile & Scrum

Kiểm thử & Bảo mật

Nguyên lý SOLID & Design Patterns

Từ vựng bổ sung

Thuật ngữ thêm

Lý thuyết bổ sung

Các loại lỗi

Chuỗi nhân quả đầy đủ có bốn mắt, và đề FE hay hỏi đúng mắt đầu tiên — cái thường bị bỏ sót:

Nhớ theo một câu: người gây error → error để lại fault trong code → fault khi bị chạy tới thì gây failure. Hệ quả trực tiếp: một fault có thể tồn tại nhiều năm mà không có failure nào, nên "chưa thấy lỗi" không đồng nghĩa "không có lỗi" — đúng nguyên tắc Absence of Error fallacymục 3.

Agile Manifesto

Bốn giá trị, mỗi giá trị có dạng "A hơn B":

Prototyping Methods

← Quay lại danh sách bài viết