1. Nguyên tắc SOLID nào khuyến khích việc một lớp (class) chỉ nên có một lý do duy nhất để thay đổi?
A. Nguyên tắc trách nhiệm đơn (Single Responsibility Principle - SRP)
B. Nguyên tắc đóng mở (Open∕Closed Principle - OCP)
C. Nguyên tắc thay thế Liskov (Liskov Substitution Principle - LSP)
D. Nguyên tắc phân tách giao diện (Interface Segregation Principle - ISP)
2. Đâu là định nghĩa chính xác nhất về `use case′ trong phân tích yêu cầu phần mềm?
A. Một sơ đồ mô tả các lớp và mối quan hệ giữa chúng.
B. Một mô tả chi tiết về một chức năng cụ thể mà người dùng có thể thực hiện với hệ thống.
C. Một tài liệu liệt kê tất cả các yêu cầu phi chức năng của hệ thống.
D. Một bản kế hoạch kiểm thử cho một chức năng cụ thể.
3. Trong kiểm thử phần mềm, kiểm thử hộp đen (black-box testing) tập trung vào yếu tố nào?
A. Cấu trúc mã nguồn bên trong của phần mềm.
B. Yêu cầu chức năng và hành vi bên ngoài của phần mềm.
C. Hiệu suất và khả năng mở rộng của phần mềm.
D. Mức độ bảo mật của phần mềm.
4. Công nghệ `containerization′ (ví dụ: Docker) giúp giải quyết vấn đề chính nào trong triển khai phần mềm?
A. Bảo mật dữ liệu trong quá trình truyền tải.
B. Khả năng mở rộng cơ sở dữ liệu.
C. Sự khác biệt về môi trường triển khai (deployment environment) giữa các máy chủ khác nhau.
D. Tối ưu hóa hiệu suất mã nguồn.
5. Phương pháp phát triển phần mềm nào chú trọng vào việc lập kế hoạch chi tiết và tuân thủ nghiêm ngặt theo kế hoạch đó?
A. Agile
B. Scrum
C. Waterfall
D. Kanban
6. Trong ngữ cảnh bảo mật phần mềm, `SQL injection′ là loại tấn công nào?
A. Tấn công từ chối dịch vụ (Denial of Service - DoS).
B. Tấn công giả mạo (Phishing).
C. Tấn công bằng cách chèn mã SQL độc hại vào truy vấn cơ sở dữ liệu.
D. Tấn công chiếm quyền điều khiển phiên làm việc (Session hijacking).
7. Trong quy trình Scrum, `Sprint′ là gì?
A. Một cuộc họp hàng ngày của nhóm phát triển.
B. Một khoảng thời gian cố định (thường từ 2-4 tuần) để nhóm phát triển hoàn thành một phần công việc.
C. Người chịu trách nhiệm đảm bảo quy trình Scrum được tuân thủ.
D. Danh sách các công việc cần thực hiện trong dự án.
8. Khái niệm `nợ kỹ thuật′ (technical debt) trong công nghệ phần mềm đề cập đến điều gì?
A. Chi phí bảo trì phần mềm sau khi triển khai.
B. Hậu quả của việc đưa ra các quyết định thiết kế hoặc mã hóa vội vàng, thiếu cân nhắc trong quá trình phát triển.
C. Số lượng lỗi (bugs) còn tồn tại trong phần mềm.
D. Thời gian cần thiết để hoàn thành dự án phần mềm.
9. 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. Sau khi phát hiện và sửa lỗi (bugs).
B. Trước khi phát hành phiên bản phần mềm mới.
C. Khi có yêu cầu thay đổi chức năng.
D. Tất cả các trường hợp trên.
10. Mục tiêu của giai đoạn `thiết kế` (design phase) trong quy trình phát triển phần mềm là gì?
A. Thu thập và phân tích yêu cầu của người dùng.
B. Viết mã nguồn chương trình.
C. Lập kế hoạch kiến trúc tổng thể và chi tiết cho phần mềm.
D. Kiểm thử và sửa lỗi phần mềm.
11. Trong kiểm thử hiệu năng (performance testing), `load testing′ nhằm mục đích gì?
A. Kiểm tra khả năng chịu tải của hệ thống khi số lượng người dùng đồng thời tăng cao.
B. Đánh giá thời gian phản hồi của hệ thống trong điều kiện tải bình thường.
C. Tìm ra điểm giới hạn mà hệ thống bắt đầu gặp sự cố.
D. Kiểm tra bảo mật của hệ thống dưới áp lực tải cao.
12. Trong mô hình Scrum, `Product Backlog′ là gì?
A. Danh sách các lỗi (bugs) đã được phát hiện trong Sprint.
B. Danh sách ưu tiên các công việc cần thực hiện để phát triển sản phẩm.
C. Bản kế hoạch chi tiết cho một Sprint cụ thể.
D. Báo cáo tiến độ của nhóm phát triển trong Sprint.
13. Trong kiểm thử API (Application Programming Interface), loại kiểm thử nào xác minh rằng API trả về đúng dữ liệu và định dạng như mong đợi?
A. Kiểm thử chức năng (Functional testing).
B. Kiểm thử hiệu năng (Performance testing).
C. Kiểm thử bảo mật (Security testing).
D. Kiểm thử khả năng sử dụng (Usability testing).
14. Chỉ số `Cyclomatic Complexity′ dùng để đo lường điều gì trong mã nguồn?
A. Số dòng lệnh trong mã nguồn.
B. Độ phức tạp của luồng điều khiển (control flow) trong mã nguồn.
C. Mức độ gắn kết giữa các module.
D. Hiệu suất thực thi của mã nguồn.
15. Phương pháp `pair programming′ trong Agile mang lại lợi ích chính nào?
A. Giảm thời gian phát triển phần mềm.
B. Tăng chất lượng mã nguồn và giảm lỗi.
C. Giảm chi phí phát triển phần mềm.
D. Tăng cường khả năng giao tiếp giữa các thành viên nhóm.
16. Đâu là mục tiêu chính của quy trình phát triển phần mềm?
A. Tạo ra phần mềm hoạt động ổn định và đáp ứng yêu cầu người dùng.
B. Tối đa hóa lợi nhuận cho công ty phát triển phần mềm.
C. Sử dụng công nghệ mới nhất trong quá trình phát triển.
D. Đảm bảo phần mềm được phát triển nhanh nhất có thể.
17. Trong mô hình MVC (Model-View-Controller), thành phần `View′ chịu trách nhiệm chính về điều gì?
A. Xử lý logic nghiệp vụ và thao tác dữ liệu.
B. Hiển thị dữ liệu và giao diện người dùng.
C. Điều phối tương tác giữa Model và View.
D. Quản lý kết nối cơ sở dữ liệu.
18. Công cụ quản lý phiên bản (version control) nào phổ biến nhất hiện nay?
A. Subversion (SVN)
B. CVS
C. Git
D. Mercurial
19. Đâu là thách thức chính của việc phát triển phần mềm hướng dịch vụ (Service-Oriented Architecture - SOA)?
A. Khó khăn trong việc phát triển các dịch vụ riêng lẻ.
B. Đảm bảo tính nhất quán dữ liệu giữa các dịch vụ phân tán.
C. Giảm hiệu suất của hệ thống do giao tiếp mạng.
D. Hạn chế khả năng tái sử dụng mã nguồn.
20. Trong thiết kế hướng đối tượng (Object-Oriented Design), `inheritance′ (kế thừa) mang lại lợi ích gì?
A. Tăng tính bảo mật của dữ liệu.
B. Giảm sự phức tạp của mã nguồn bằng cách chia nhỏ thành các module.
C. Tái sử dụng mã nguồn và thiết lập mối quan hệ `is-a′ giữa các lớp.
D. Cải thiện hiệu suất thực thi của chương trình.
21. Trong kiểm thử hộp trắng (white-box testing), phương pháp `coverage testing′ (kiểm thử độ bao phủ) nhằm mục đích gì?
A. Kiểm tra chức năng của phần mềm từ góc độ người dùng.
B. Đo lường tỷ lệ mã nguồn đã được thực thi trong quá trình kiểm thử.
C. Tìm kiếm các lỗ hổng bảo mật trong mã nguồn.
D. Đánh giá hiệu suất của mã nguồn.
22. Loại kiểm thử nào sau đây thường được thực hiện đầu tiên trong quy trình kiểm thử phần mềm?
A. Kiểm thử tích hợp (Integration testing)
B. Kiểm thử hệ thống (System testing)
C. Kiểm thử đơn vị (Unit testing)
D. Kiểm thử chấp nhận (Acceptance testing)
23. Kỹ thuật `refactoring′ trong phát triển phần mềm nhằm mục đích gì?
A. Thêm chức năng mới vào phần mềm.
B. Sửa lỗi (bugs) trong phần mềm.
C. Cải thiện cấu trúc mã nguồn mà không thay đổi chức năng bên ngoài.
D. Tối ưu hóa hiệu suất của phần mềm.
24. Phương pháp phát triển phần mềm nào tập trung vào việc chia nhỏ dự án thành các giai đoạn ngắn, lặp đi lặp lại?
A. Mô hình thác nước (Waterfall)
B. Mô hình xoắn ốc (Spiral)
C. Mô hình Agile
D. Mô hình chữ V (V-model)
25. Phương pháp đo lường kích thước phần mềm nào dựa trên việc đếm số lượng điểm chức năng (function points)?
A. Đếm dòng lệnh (Lines of Code - LOC)
B. Điểm chức năng (Function Point Analysis - FPA)
C. Độ phức tạp Cyclomatic (Cyclomatic Complexity)
D. Độ gắn kết (Coupling) và tính liên kết (Cohesion)
26. Thuật ngữ `DevOps′ là sự kết hợp của hai lĩnh vực nào?
A. Development (Phát triển) và Database Operations (Vận hành Cơ sở dữ liệu).
B. Development (Phát triển) và Testing (Kiểm thử).
C. Development (Phát triển) và Operations (Vận hành).
D. Design (Thiết kế) và Operations (Vận hành).
27. Khái niệm `technical debt′ (nợ kỹ thuật) thường phát sinh do nguyên nhân nào sau đây?
A. Sự thay đổi yêu cầu liên tục từ phía khách hàng.
B. Áp lực về thời gian để phát hành sản phẩm nhanh chóng.
C. Thiếu kinh nghiệm của đội ngũ phát triển.
D. Tất cả các nguyên nhân trên.
28. Yếu tố nào sau đây KHÔNG phải là một phần của `Tam giác dự án′ (Project Management Triangle)?
A. Phạm vi (Scope)
B. Thời gian (Time)
C. Chi phí (Cost)
D. Chất lượng (Quality)
29. Đâu là ưu điểm chính của việc sử dụng kiến trúc microservices?
A. Đơn giản hóa việc triển khai và quản lý toàn bộ ứng dụng.
B. Tăng cường khả năng mở rộng và linh hoạt của ứng dụng.
C. Giảm độ phức tạp trong phát triển và bảo trì.
D. Đảm bảo tính nhất quán dữ liệu trên toàn hệ thống.
30. Quy trình `Continuous Integration′ (CI) trong DevOps tập trung vào hoạt động nào?
A. Triển khai phần mềm lên môi trường sản xuất một cách tự động.
B. Tự động hóa quá trình kiểm thử phần mềm.
C. Tích hợp mã nguồn từ nhiều nhà phát triển một cách thường xuyên và tự động.
D. Theo dõi và giám sát hiệu suất của ứng dụng sau khi triển khai.