1. Trong kiểm thử phần mềm, `mutation testing` (kiểm thử đột biến) là gì?
A. Kiểm thử khả năng chịu tải của hệ thống.
B. Kiểm thử giao diện người dùng.
C. Một phương pháp kiểm thử bằng cách tạo ra các phiên bản bị lỗi (đột biến) của code và kiểm tra xem các unit test có phát hiện ra chúng không.
D. Kiểm thử bảo mật của hệ thống.
2. Đâu là yếu tố quan trọng nhất để đảm bảo chất lượng code trong một dự án phần mềm?
A. Sử dụng công nghệ mới nhất.
B. Viết code nhanh chóng.
C. Tuân thủ coding standards, thực hiện code review thường xuyên và viết unit test.
D. Sử dụng nhiều comment trong code.
3. Công cụ nào sau đây thường được sử dụng để tự động hóa quá trình build, test và triển khai phần mềm (CI/CD)?
A. Microsoft Word.
B. Adobe Photoshop.
C. Jenkins.
D. Zoom.
4. Đâu là một trong những lợi ích chính của việc sử dụng `infrastructure as code` (IaC)?
A. Giảm chi phí phần cứng.
B. Tăng tốc độ viết code.
C. Tự động hóa việc quản lý và cung cấp hạ tầng, giúp triển khai nhanh chóng và nhất quán.
D. Giảm kích thước ứng dụng.
5. Đâu là một trong những lợi ích chính của việc sử dụng `containerization` (ví dụ: Docker) trong triển khai phần mềm?
A. Giảm kích thước code.
B. Đảm bảo tính nhất quán của môi trường chạy ứng dụng trên các nền tảng khác nhau.
C. Tăng tốc độ viết code.
D. Giảm chi phí phần cứng.
6. Trong phát triển phần mềm, `feature flag` (cờ tính năng) được sử dụng để làm gì?
A. Báo hiệu lỗi trong code.
B. Cho phép bật/tắt các tính năng mới mà không cần triển khai lại code.
C. Tăng tốc độ biên dịch code.
D. Giảm kích thước ứng dụng.
7. Đâu là nhược điểm chính của mô hình phát triển phần mềm Waterfall?
A. Khó thích ứng với các thay đổi yêu cầu sau khi giai đoạn phân tích đã hoàn thành.
B. Đòi hỏi chi phí thấp.
C. Dễ dàng quản lý.
D. Thời gian phát triển ngắn.
8. Trong ngữ cảnh phát triển phần mềm, thuật ngữ `observability` (khả năng quan sát) ám chỉ điều gì?
A. Khả năng nhìn thấy code của người khác.
B. Khả năng theo dõi và hiểu được trạng thái và hành vi bên trong của hệ thống dựa trên dữ liệu bên ngoài (ví dụ: logs, metrics, traces).
C. Khả năng dự đoán lỗi trong tương lai.
D. Khả năng tối ưu hóa hiệu suất hệ thống.
9. Trong phát triển phần mềm, `SOLID` là viết tắt của những nguyên tắc thiết kế hướng đối tượng nào?
A. Single responsibility, Open-closed, Liskov substitution, Interface segregation, Dependency inversion.
B. Simple, Obvious, Logical, Intuitive, Detailed.
C. Stable, Optimized, Lightweight, Integrated, Documented.
D. Scalable, Observable, Logical, Intelligent, Dynamic.
10. Trong phát triển phần mềm, `refactoring` (tái cấu trúc) là gì?
A. Viết lại toàn bộ code.
B. Thay đổi chức năng của phần mềm.
C. Cải thiện cấu trúc code mà không thay đổi chức năng bên ngoài.
D. Tối ưu hóa hiệu suất phần cứng.
11. Trong phát triển phần mềm, `test-driven development` (TDD) là gì?
A. Viết code trước, sau đó viết test.
B. Viết test trước, sau đó viết code để pass test.
C. Chỉ viết test khi có lỗi.
D. Không cần viết test.
12. Đâu là một trong những mục tiêu chính của việc sử dụng `domain-driven design` (DDD)?
A. Tối ưu hóa hiệu suất cơ sở dữ liệu.
B. Tạo ra một mô hình phần mềm phản ánh chính xác nghiệp vụ (domain) mà nó phục vụ.
C. Giảm chi phí phát triển.
D. Tăng tốc độ viết code.
13. Đâu là một trong những lý do chính để sử dụng `message queue` (hàng đợi tin nhắn) trong kiến trúc phần mềm?
A. Tăng tốc độ xử lý dữ liệu.
B. Đảm bảo tính toàn vẹn dữ liệu.
C. Tách rời các thành phần của hệ thống, cho phép chúng giao tiếp một cách không đồng bộ và tăng tính linh hoạt.
D. Giảm chi phí lưu trữ dữ liệu.
14. Đâu là một trong những lợi ích chính của việc sử dụng `serverless computing` (ví dụ: AWS Lambda)?
A. Giảm chi phí phần cứng.
B. Tăng tốc độ viết code.
C. Không cần quản lý server, chỉ tập trung vào code, và trả tiền cho thời gian sử dụng thực tế.
D. Giảm kích thước ứng dụng.
15. Đâu là mục tiêu chính của việc sử dụng Design Patterns trong phát triển phần mềm?
A. Tăng tốc độ viết code.
B. Cung cấp các giải pháp đã được chứng minh cho các vấn đề thiết kế thường gặp.
C. Giảm số lượng dòng code.
D. Tối ưu hóa hiệu suất phần cứng.
16. Trong phát triển phần mềm, thuật ngữ `spike` thường được dùng để chỉ điều gì?
A. Một lỗi nghiêm trọng trong code.
B. Một giai đoạn phát triển kéo dài.
C. Một nghiên cứu ngắn hạn để khám phá và đánh giá một công nghệ hoặc giải pháp mới.
D. Một cuộc họp khẩn cấp để giải quyết vấn đề.
17. Trong ngữ cảnh phát triển phần mềm, thuật ngữ `technical debt` (nợ kỹ thuật) ám chỉ điều gì?
A. Số tiền nợ các nhà cung cấp phần mềm.
B. Chi phí bảo trì phần mềm trong tương lai.
C. Hậu quả của việc đưa ra các quyết định thiết kế không tối ưu trong quá khứ, cần được khắc phục trong tương lai.
D. Thời gian phát triển phần mềm bị kéo dài.
18. SOLID là một tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ `L` trong SOLID đại diện cho nguyên tắc nào?
A. Liskov Substitution Principle.
B. Law of Demeter.
C. Least Astonishment.
D. Layered Architecture.
19. Trong kiểm thử phần mềm, `unit testing` (kiểm thử đơn vị) là gì?
A. Kiểm thử toàn bộ hệ thống.
B. Kiểm thử từng module riêng lẻ.
C. Kiểm thử giao diện người dùng.
D. Kiểm thử hiệu năng của hệ thống.
20. Phương pháp kiểm thử hộp đen (black-box testing) tập trung vào yếu tố nào?
A. Cấu trúc code bên trong của phần mềm.
B. Luồng dữ liệu và thuật toán.
C. Chức năng và hành vi của phần mềm từ góc độ người dùng.
D. Độ phức tạp của code.
21. Đâu là mục tiêu chính của việc thực hiện `code review` (đánh giá code)?
A. Tìm và sửa lỗi code, cải thiện chất lượng code và chia sẻ kiến thức giữa các thành viên.
B. Đánh giá hiệu suất của lập trình viên.
C. Tăng tốc độ viết code.
D. Giảm số lượng dòng code.
22. Trong kiểm thử phần mềm, `regression testing` (kiểm thử hồi quy) được thực hiện khi nào?
A. Chỉ khi phát hiện lỗi nghiêm trọng.
B. Sau khi thực hiện thay đổi code để đảm bảo các chức năng cũ vẫn hoạt động đúng.
C. Trước khi viết code mới.
D. Chỉ trong giai đoạn kiểm thử cuối cùng.
23. Trong mô hình thác nước (Waterfall), giai đoạn nào diễn ra sau giai đoạn thiết kế?
A. Bảo trì.
B. Triển khai.
C. Kiểm thử.
D. Phân tích yêu cầu.
24. Trong kiểm thử phần mềm, `acceptance testing` (kiểm thử chấp nhận) được thực hiện bởi ai?
A. Lập trình viên.
B. Nhà kiểm thử (tester).
C. Khách hàng hoặc người dùng cuối.
D. Quản lý dự án.
25. Đâu là đặc điểm chính của kiến trúc Microservices?
A. Ứng dụng được xây dựng như một khối thống nhất duy nhất.
B. Các thành phần được liên kết chặt chẽ và phụ thuộc lẫn nhau.
C. Ứng dụng được chia thành các dịch vụ nhỏ, độc lập, giao tiếp qua API.
D. Sử dụng một cơ sở dữ liệu duy nhất cho toàn bộ ứng dụng.
26. Đâu là một trong những nguyên tắc chính của Agile Manifesto?
A. Ưu tiên quy trình và công cụ hơn cá nhân và tương tác.
B. Ưu tiên tài liệu đầy đủ hơn phần mềm chạy tốt.
C. Ưu tiên hợp tác với khách hàng hơn đàm phán hợp đồng.
D. Ưu tiên tuân thủ kế hoạch hơn phản hồi với thay đổi.
27. Đâu là một trong những mục tiêu chính của việc sử dụng `microfrontends` trong phát triển web?
A. Giảm kích thước trang web.
B. Tăng tốc độ tải trang.
C. Cho phép các nhóm phát triển khác nhau làm việc độc lập trên các phần khác nhau của giao diện người dùng.
D. Giảm chi phí phát triển.
28. Đâu là lợi ích chính của việc sử dụng hệ thống quản lý phiên bản (Version Control System) như Git?
A. Tăng tốc độ biên dịch code.
B. Giúp quản lý và theo dõi thay đổi của code, hỗ trợ làm việc nhóm hiệu quả.
C. Tự động tối ưu hóa code.
D. Giảm dung lượng file code.
29. Đâu là lợi ích của việc sử dụng kiến trúc hướng sự kiện (Event-Driven Architecture)?
A. Giảm độ phức tạp của hệ thống.
B. Tăng tính liên kết giữa các thành phần.
C. Tăng tính linh hoạt và khả năng mở rộng của hệ thống.
D. Giảm chi phí phát triển.
30. Đâu là mục tiêu chính của việc sử dụng Agile trong phát triển phần mềm?
A. Giảm thiểu tối đa chi phí phát triển ban đầu.
B. Tăng cường khả năng thích ứng với thay đổi và cung cấp giá trị liên tục cho khách hàng.
C. Đảm bảo tuân thủ tuyệt đối theo kế hoạch ban đầu.
D. Tối ưu hóa hiệu suất của lập trình viên.