1. Trong 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).
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 trung gian (Man-in-the-middle).
2. Trong kiểm thử phần mềm, `mutation testing′ (kiểm thử đột biến) dùng để đánh giá điều gì?
A. Hiệu suất của phần mềm.
B. Độ bao phủ code của các test case.
C. Hiệu quả của bộ test case trong việc phát hiện lỗi.
D. Tính bảo mật của phần mềm.
3. Khái niệm `design pattern′ (mẫu thiết kế) trong công nghệ phần mềm là gì?
A. Một thuật toán cụ thể để giải quyết một vấn đề lập trình.
B. Một bản thiết kế giao diện người dùng tiêu chuẩn.
C. Một giải pháp đã được kiểm chứng và tái sử dụng cho các vấn đề thiết kế phần mềm thường gặp.
D. Một ngôn ngữ lập trình mới.
4. Khái niệm `containerization′ (ví dụ: Docker) mang lại lợi ích chính nào trong triển khai ứng dụng?
A. Tăng tốc độ phát triển code.
B. Đảm bảo tính nhất quán của môi trường chạy ứng dụng giữa các giai đoạn phát triển, kiểm thử và sản xuất.
C. Giảm chi phí lưu trữ dữ liệu.
D. Cải thiện bảo mật mạng.
5. Trong ngữ cảnh `DevOps′, `Infrastructure as Code′ (IaC) nghĩa là gì?
A. Viết code để phát triển cơ sở hạ tầng phần mềm.
B. Quản lý và cung cấp cơ sở hạ tầng (máy chủ, mạng,…) thông qua code và các công cụ tự động hóa, thay vì cấu hình thủ công.
C. Kiểm thử cơ sở hạ tầng bằng code.
D. Tài liệu hóa cơ sở hạ tầng bằng code.
6. Phương pháp đo lường `Function Point′ (điểm chức năng) được sử dụng để ước tính yếu tố nào trong dự án phần mềm?
A. Thời gian phát triển dự án.
B. Chi phí dự án.
C. Quy mô chức năng của phần mềm.
D. Số lượng dòng code.
7. Công cụ `Version control system′ (VCS) được sử dụng để làm gì trong phát triển phần mềm?
A. Tự động hóa quy trình kiểm thử.
B. Quản lý và theo dõi các thay đổi của mã nguồn theo thời gian.
C. Phân tích hiệu suất của ứng dụng.
D. Thiết kế giao diện người dùng.
8. Đâu là lợi ích chính của việc sử dụng `kiến trúc microservices′?
A. Giảm độ phức tạp của việc triển khai và bảo trì.
B. Tăng tính gắn kết (coupling) giữa các thành phần.
C. Dễ dàng mở rộng (scale) từng phần của ứng dụng một cách độc lập.
D. Giảm chi phí phát triển ban đầu.
9. Trong mô hình Agile, `Sprint′ là gì?
A. Một cuộc họp hàng ngày để cập nhật tiến độ dự án.
B. Một giai đoạn phát triển ngắn, lặp đi lặp lại, thường kéo dài từ 1 đến 4 tuần.
C. Một phương pháp kiểm thử tự động.
D. Một công cụ quản lý dự án trực tuyến.
10. 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 code bên trong của phần mềm.
B. Luồng dữ liệu và thuật toán của chương trình.
C. Chức năng và hành vi bên ngoài của phần mềm.
D. Hiệu suất và khả năng mở rộng của hệ thống.
11. 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. Khi phát triển một tính năng mới.
B. Khi phát hiện lỗi trong quá trình kiểm thử ban đầu.
C. Sau khi có thay đổi code (sửa lỗi, thêm tính năng) để đảm bảo các chức năng cũ không bị ảnh hưởng tiêu cực.
D. Trước khi triển khai phần mềm lên môi trường sản xuất.
12. Thuật ngữ `refactoring′ trong lập trình nghĩa là gì?
A. Viết lại toàn bộ code của một module.
B. Thay đổi chức năng của phần mềm.
C. Cấu trúc lại code hiện có mà không thay đổi chức năng bên ngoài, nhằm cải thiện chất lượng code và khả năng bảo trì.
D. Thêm tính năng mới vào phần mềm.
13. Trong quản lý cấu hình phần mềm, `baseline′ (đường cơ sở) là gì?
A. Một bộ tiêu chuẩn để đánh giá chất lượng code.
B. Một phiên bản đã được phê duyệt chính thức của một cấu hình, được sử dụng làm cơ sở để phát triển và kiểm soát các thay đổi tiếp theo.
C. Một công cụ để theo dõi lỗi (bug tracking).
D. Một phương pháp kiểm thử tự động.
14. Trong mô hình `Client-Server′, client và server giao tiếp với nhau thông qua giao thức nào phổ biến nhất cho ứng dụng web?
A. FTP
B. SMTP
C. HTTP∕HTTPS
D. TCP∕IP
15. Đâu là một thách thức chính khi phát triển phần mềm cho hệ thống nhúng (embedded systems)?
A. Sự đa dạng của ngôn ngữ lập trình.
B. Giới hạn về tài nguyên phần cứng (bộ nhớ, bộ xử lý).
C. Thiếu công cụ phát triển.
D. Khó khăn trong việc kiểm thử.
16. Khái niệm `technical debt′ (nợ kỹ thuật) trong công nghệ phần mềm là gì?
A. Chi phí đầu tư vào cơ sở hạ tầng kỹ thuật.
B. Hậu quả của việc đưa ra các quyết định thiết kế hoặc code không tối ưu trong ngắn hạn để đạt được tiến độ nhanh hơ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.
17. Phương pháp `Agile′ trong phát triển phần mềm nhấn mạnh vào điều gì?
A. Tuân thủ nghiêm ngặt theo kế hoạch đã định trước.
B. Tài liệu hóa chi tiết mọi giai đoạn phát triển.
C. Sự linh hoạt, thích ứng và phản hồi nhanh chóng với thay đổi.
D. Phân chia công việc rõ ràng và chuyên môn hóa cao.
18. Trong lập trình hướng đối tượng (OOP), `tính đa hình′ (polymorphism) nghĩa là gì?
A. Khả năng che giấu thông tin và trạng thái bên trong đối tượng.
B. Khả năng một đối tượng thuộc nhiều lớp khác nhau.
C. Khả năng một đối tượng có thể thể hiện nhiều hình thức khác nhau, hoặc các đối tượng khác nhau có thể phản ứng khác nhau với cùng một thông điệp.
D. Khả năng một lớp kế thừa các thuộc tính và phương thức từ lớp khác.
19. Mục tiêu chính của quy trình `Xác định yêu cầu′ trong công nghệ phần mềm là gì?
A. Viết mã chương trình.
B. Kiểm thử phần mềm.
C. Thu thập và làm rõ nhu cầu của người dùng và các bên liên quan.
D. Triển khai phần mềm lên môi trường sản xuất.
20. 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) trong quản lý dự án phần mềm?
A. Phạm vi (Scope)
B. Thời gian (Time)
C. Chi phí (Cost)
D. Chất lượng (Quality)
21. Trong thiết kế cơ sở dữ liệu, `chuẩn hóa dữ liệu′ (database normalization) nhằm mục đích gì?
A. Tăng tốc độ truy vấn dữ liệu.
B. Giảm thiểu dữ liệu dư thừa và cải thiện tính toàn vẹn dữ liệu.
C. Bảo mật dữ liệu tốt hơn.
D. Đơn giản hóa cấu trúc bảng.
22. Nguyên tắc `SOLID′ trong thiết kế hướng đối tượng hướng đến mục tiêu chính nào?
A. Tăng hiệu suất thực thi của chương trình.
B. Giảm thiểu số lượng dòng code.
C. Thiết kế phần mềm dễ bảo trì, mở rộng và tái sử dụng.
D. Tối ưu hóa việc sử dụng bộ nhớ.
23. Khái niệm `coupling′ (kết nối) trong thiết kế phần mềm đề cập đến điều gì?
A. Mức độ độc lập giữa các module phần mềm.
B. Mức độ liên kết và phụ thuộc lẫn nhau giữa các module phần mềm.
C. Mức độ dễ dàng bảo trì và nâng cấp phần mềm.
D. Mức độ hiệu quả của thuật toán được sử dụng.
24. Mô hình phát triển phần mềm `Thác nước′ (Waterfall) phù hợp nhất với loại dự án nào?
A. Dự án có yêu cầu thay đổi liên tục và không rõ ràng.
B. Dự án có thời gian phát triển ngắn và cần linh hoạt.
C. Dự án có yêu cầu rõ ràng, ổn định và ít thay đổi.
D. Dự án cần sự tham gia liên tục và chặt chẽ của khách hàng.
25. Nguyên tắc `DRY′ (Don′t Repeat Yourself) trong lập trình khuyến khích điều gì?
A. Viết code dài dòng và chi tiết.
B. Tái sử dụng code và tránh lặp lại code giống nhau ở nhiều nơi.
C. Tối ưu hóa hiệu suất code bằng mọi giá.
D. Viết code nhanh chóng, bỏ qua việc tái sử dụng.
26. Phương pháp `TDD′ (Test-Driven Development) là gì?
A. Phát triển phần mềm dựa trên tài liệu đặc tả yêu cầu.
B. Phát triển phần mềm dựa trên kiểm thử, trong đó viết kiểm thử trước khi viết code.
C. Phát triển phần mềm theo mô hình thác nước.
D. Phát triển phần mềm dựa trên sự hợp tác chặt chẽ với khách hàng.
27. Công cụ `CI∕CD′ (Continuous Integration∕Continuous Delivery) giúp tự động hóa quy trình nào trong phát triển phần mềm?
A. Thiết kế cơ sở dữ liệu.
B. Viết mã nguồn.
C. Tích hợp mã nguồn, kiểm thử và triển khai phần mềm.
D. Quản lý yêu cầu dự án.
28. Trong kiểm thử hiệu năng (performance testing), `stress testing′ nhằm mục đích gì?
A. Đo lường thời gian phản hồi của hệ thống dưới tải thông thường.
B. Xác định điểm tới hạn (break point) của hệ thống bằng cách tăng tải đến mức vượt quá khả năng chịu đựng.
C. Kiểm tra tính bảo mật của hệ thống.
D. Đảm bảo hệ thống hoạt động đúng chức năng.
29. Phương pháp `Scrum′ trong Agile tập trung vào việc quản lý dự án như thế nào?
A. Quản lý dự án theo kế hoạch chi tiết và cố định từ đầu.
B. Quản lý dự án theo từng giai đoạn lớn và kéo dài.
C. Quản lý dự án theo các vòng lặp ngắn (sprints) và liên tục điều chỉnh dựa trên phản hồi.
D. Quản lý dự án bằng cách tập trung vào tài liệu hóa chi tiết mọi quy trình.
30. Đâu là mục tiêu chính của `kiểm thử chấp nhận người dùng′ (User Acceptance Testing - UAT)?
A. Kiểm tra hiệu suất của hệ thống.
B. Xác minh rằng phần mềm đáp ứng yêu cầu kỹ thuật.
C. Đảm bảo rằng phần mềm đáp ứng nhu cầu và mong đợi của người dùng cuối.
D. Kiểm tra tính bảo mật của phần mềm.