Công nghệ phần mềm và lập trình

Đề mẫu công nghệ phần mềm và lập trình

10 câu thuộc ngành công nghệ thông tin, phần công nghệ phần mềm và lập trình: mô hình phát triển, Scrum, yêu cầu, UML, kiểm thử, Git, hướng đối tượng, cấu trúc dữ liệu, độ phức tạp, biên dịch. Mỗi câu có đáp án, lời giải và trang riêng.

Xuất bản 29/08/2026 · Cập nhật lần cuối 18/10/2026

Câu 1. Mô hình Waterfall thực hiện các giai đoạn theo cách nào?

  1. A. Song song, mọi giai đoạn chạy cùng một lúc
  2. B. Tuần tự, xong giai đoạn trước mới sang giai đoạn sau
  3. C. Lặp nhiều vòng ngắn, mỗi vòng ra một phần sản phẩm
  4. D. Theo vòng xoắn ốc, mỗi vòng đều có bước phân tích rủi ro

Đáp án: B. Tuần tự, xong giai đoạn trước mới sang giai đoạn sau

Mô hình thác nước (Waterfall) chia dự án thành các giai đoạn nối tiếp: phân tích yêu cầu, thiết kế, lập trình, kiểm thử, triển khai và bảo trì. Giai đoạn trước hoàn thành mới chuyển sang giai đoạn sau, như nước chảy từ bậc trên xuống bậc dưới, nên các giai đoạn không chạy song song. Lặp nhiều vòng ngắn, mỗi vòng ra một phần sản phẩm là cách làm của mô hình lặp và các phương pháp Agile như Scrum. Mỗi vòng đều có bước phân tích rủi ro là đặc điểm của mô hình xoắn ốc (Spiral).

Xem trang câu hỏi: Mô hình Waterfall thực hiện các giai đoạn theo cách nào?

Câu 2. Trong Scrum, sprint là gì?

  1. A. Cuộc họp ngắn diễn ra hằng ngày để cả nhóm cập nhật tiến độ và vướng mắc
  2. B. Danh sách có thứ tự ưu tiên của mọi yêu cầu, tính năng dành cho sản phẩm
  3. C. Chu kỳ làm việc có độ dài cố định, tối đa một tháng, tạo ra phần sản phẩm dùng được
  4. D. Người trong nhóm chịu trách nhiệm sắp xếp thứ tự ưu tiên các yêu cầu

Đáp án: C. Chu kỳ làm việc có độ dài cố định, tối đa một tháng, tạo ra phần sản phẩm dùng được

Scrum chia việc phát triển thành các sprint nối tiếp nhau. Mỗi sprint có độ dài cố định, tối đa một tháng, nhiều nhóm chọn hai tuần; sprint mở đầu bằng buổi lập kế hoạch và kết thúc bằng buổi đánh giá sản phẩm cùng buổi rút kinh nghiệm, kết quả là một phần sản phẩm có thể dùng được. Cuộc họp ngắn mỗi ngày là Daily Scrum, diễn ra bên trong sprint. Danh sách mọi yêu cầu là Product Backlog. Người sắp thứ tự ưu tiên yêu cầu là Product Owner.

Xem trang câu hỏi: Sprint trong Scrum là gì?

Câu 3. Với một hệ thống thi trực tuyến, yêu cầu nào sau đây là yêu cầu phi chức năng?

  1. A. Học sinh có thể nộp bài sớm trước khi hết thời gian làm bài
  2. B. Giáo viên có thể xuất bảng điểm của cả lớp ra một tệp Excel
  3. C. Hệ thống tự gửi email cho học sinh khi có bài kiểm tra mới
  4. D. Trang kết quả tải xong trong 2 giây khi có 1.000 người dùng cùng lúc

Đáp án: D. Trang kết quả tải xong trong 2 giây khi có 1.000 người dùng cùng lúc

Yêu cầu chức năng mô tả hệ thống làm gì: cho nộp bài, xuất bảng điểm, gửi email thông báo đều là chức năng hệ thống cung cấp cho người dùng. Yêu cầu phi chức năng mô tả hệ thống phải làm tốt đến mức nào, như hiệu năng, bảo mật, độ tin cậy, khả năng mở rộng. Trang tải xong trong 2 giây khi có 1.000 người dùng cùng lúc là yêu cầu về hiệu năng, nên là yêu cầu phi chức năng. Ba phương án còn lại đều là yêu cầu chức năng.

Xem trang câu hỏi: Yêu cầu nào là yêu cầu phi chức năng?

Câu 4. Sơ đồ ca sử dụng (use case diagram) trong UML dùng để mô tả điều gì?

  1. A. Thứ tự các thông điệp trao đổi giữa các đối tượng theo thời gian
  2. B. Các tác nhân và những chức năng mà hệ thống cung cấp cho họ
  3. C. Các lớp cùng thuộc tính, phương thức và quan hệ giữa các lớp
  4. D. Cách các thành phần phần mềm được đặt lên máy chủ và thiết bị

Đáp án: B. Các tác nhân và những chức năng mà hệ thống cung cấp cho họ

Sơ đồ use case nhìn hệ thống từ phía người dùng: mỗi tác nhân (actor) là một người hoặc hệ thống bên ngoài, mỗi hình elip là một chức năng như Đăng nhập hay Nộp bài, và đường nối cho biết tác nhân nào dùng chức năng nào. Sơ đồ này hay dùng khi phân tích yêu cầu. Thứ tự thông điệp theo thời gian là sơ đồ tuần tự. Lớp, thuộc tính, phương thức là sơ đồ lớp. Cách đặt phần mềm lên máy chủ là sơ đồ triển khai.

Xem trang câu hỏi: Sơ đồ use case trong UML mô tả điều gì?

Câu 5. Kiểm thử đơn vị (unit testing) kiểm tra điều gì?

  1. A. Từng thành phần nhỏ nhất như một hàm hoặc một lớp, tách riêng khỏi phần còn lại
  2. B. Sự phối hợp giữa nhiều mô-đun khi chúng được ghép lại với nhau
  3. C. Toàn bộ hệ thống hoàn chỉnh chạy trong môi trường giống thực tế
  4. D. Việc khách hàng xác nhận phần mềm đáp ứng nhu cầu trước khi nhận

Đáp án: A. Từng thành phần nhỏ nhất như một hàm hoặc một lớp, tách riêng khỏi phần còn lại

Kiểm thử đơn vị kiểm tra phần nhỏ nhất có thể kiểm thử, thường là một hàm hoặc một lớp, tách khỏi các phần khác; lập trình viên tự viết và chạy tự động mỗi khi sửa mã. Kiểm tra các mô-đun phối hợp với nhau, ví dụ mã gọi cơ sở dữ liệu thật, là kiểm thử tích hợp. Chạy toàn bộ phần mềm hoàn chỉnh là kiểm thử hệ thống. Khách hàng hoặc người dùng thử để quyết định có nhận sản phẩm hay không là kiểm thử chấp nhận.

Xem trang câu hỏi: Kiểm thử đơn vị (unit testing) kiểm tra điều gì?

Câu 6. Trong Git, lệnh git commit làm gì?

  1. A. Đẩy các phiên bản đã lưu trên máy lên kho từ xa như GitHub
  2. B. Lưu các thay đổi đã đưa vào vùng chờ thành một phiên bản mới trong kho cục bộ
  3. C. Tạo một nhánh mới tách từ nhánh hiện tại để phát triển tính năng riêng
  4. D. Tải thay đổi mới nhất từ kho từ xa và gộp vào nhánh hiện tại

Đáp án: B. Lưu các thay đổi đã đưa vào vùng chờ thành một phiên bản mới trong kho cục bộ

Git lưu thay đổi theo hai bước: git add đưa thay đổi vào vùng chờ (staging area), rồi git commit ghi chúng thành một phiên bản kèm thông điệp mô tả, chỉ trong kho trên máy mình. Muốn người khác thấy, phải chạy git push để đẩy commit lên kho từ xa như GitHub. Lệnh git branch tạo hoặc liệt kê nhánh. Lệnh git pull tải thay đổi từ kho từ xa rồi gộp vào nhánh hiện tại.

Xem trang câu hỏi: Lệnh git commit làm gì?

Câu 7. Trong lập trình hướng đối tượng, tính đóng gói (encapsulation) là gì?

  1. A. Gom dữ liệu và phương thức vào lớp, chỉ cho bên ngoài truy cập qua phương thức công khai
  2. B. Cho lớp con dùng lại thuộc tính và phương thức của lớp cha
  3. C. Cho cùng một lời gọi phương thức chạy theo cách khác nhau tùy đối tượng
  4. D. Chia chương trình thành nhiều tệp mã nguồn để dễ quản lý

Đáp án: A. Gom dữ liệu và phương thức vào lớp, chỉ cho bên ngoài truy cập qua phương thức công khai

Đóng gói gom dữ liệu và các phương thức xử lý dữ liệu đó vào cùng một lớp, đồng thời giấu trạng thái bên trong: thuộc tính thường khai báo private và chỉ được đọc, ghi qua phương thức public có kiểm tra. Nhờ vậy dữ liệu không bị sửa tùy tiện từ bên ngoài. Lớp con dùng lại thuộc tính và phương thức của lớp cha là tính kế thừa. Một lời gọi chạy khác nhau tùy đối tượng là tính đa hình. Chia mã ra nhiều tệp chỉ là cách tổ chức mã nguồn.

Xem trang câu hỏi: Tính đóng gói (encapsulation) trong OOP là gì?

Câu 8. Ngăn xếp (stack) khác hàng đợi (queue) ở điểm nào?

  1. A. Ngăn xếp lấy phần tử vào trước ra trước, hàng đợi lấy phần tử vào sau ra trước
  2. B. Ngăn xếp chỉ lưu được số, còn hàng đợi lưu được mọi kiểu dữ liệu
  3. C. Ngăn xếp luôn giữ các phần tử theo thứ tự tăng dần, hàng đợi thì không
  4. D. Ngăn xếp lấy phần tử vào sau ra trước (LIFO), hàng đợi vào trước ra trước (FIFO)

Đáp án: D. Ngăn xếp lấy phần tử vào sau ra trước (LIFO), hàng đợi vào trước ra trước (FIFO)

Ngăn xếp giống chồng đĩa: phần tử thêm vào sau cùng được lấy ra đầu tiên, gọi là LIFO (vào sau ra trước), với hai thao tác chính push và pop. Hàng đợi giống hàng người xếp mua vé: ai đến trước được phục vụ trước, gọi là FIFO (vào trước ra trước). Phương án đảo ngược hai nguyên tắc này là sai. Cả hai cấu trúc lưu được mọi kiểu dữ liệu và không tự sắp xếp phần tử; thứ tự lấy ra chỉ phụ thuộc thứ tự thêm vào.

Xem trang câu hỏi: Ngăn xếp (stack) khác hàng đợi (queue) ở điểm nào?

Câu 9. Trong trường hợp xấu nhất, tìm kiếm nhị phân trên mảng đã sắp xếp gồm n phần tử có độ phức tạp thời gian là bao nhiêu?

  1. A. O(1)
  2. B. O(n)
  3. C. O(log n)
  4. D. O(n log n)

Đáp án: C. O(log n)

Mỗi bước, tìm kiếm nhị phân so sánh giá trị cần tìm với phần tử ở giữa rồi bỏ đi nửa mảng chắc chắn không chứa nó. Số phần tử còn phải xét giảm một nửa sau mỗi bước, nên cần khoảng log₂ n bước; với một triệu phần tử chỉ cần khoảng 20 lần so sánh. O(n) là độ phức tạp của tìm kiếm tuần tự. O(1) là truy cập trực tiếp một phần tử theo chỉ số. O(n log n) là độ phức tạp của các thuật toán sắp xếp tốt như sắp xếp trộn.

Xem trang câu hỏi: Độ phức tạp thời gian của tìm kiếm nhị phân

Câu 10. Trình biên dịch (compiler) khác trình thông dịch (interpreter) ở điểm nào?

  1. A. Trình biên dịch dịch cả chương trình trước khi chạy, trình thông dịch dịch và thực hiện lần lượt từng câu lệnh
  2. B. Trình biên dịch dịch và thực hiện lần lượt từng câu lệnh, trình thông dịch dịch cả chương trình trước khi chạy
  3. C. Chỉ trình thông dịch mới phát hiện được lỗi cú pháp trong chương trình
  4. D. Chương trình chạy bằng trình thông dịch luôn nhanh hơn chương trình đã biên dịch

Đáp án: A. Trình biên dịch dịch cả chương trình trước khi chạy, trình thông dịch dịch và thực hiện lần lượt từng câu lệnh

Trình biên dịch, như của C hay C++, dịch toàn bộ mã nguồn thành mã máy và tạo ra tệp chạy được; sau đó chương trình chạy mà không cần dịch lại. Trình thông dịch đọc, dịch và thực hiện lần lượt từng câu lệnh mỗi lần chạy, giống khi gõ từng lệnh vào chế độ tương tác của Python. Phương án đảo ngược hai cách làm là sai. Cả hai đều báo được lỗi cú pháp. Chương trình đã biên dịch thường chạy nhanh hơn vì không phải dịch lại mỗi lần chạy.

Xem trang câu hỏi: Trình biên dịch khác trình thông dịch ở điểm nào?