1. Đâu là mục tiêu chính của việc sử dụng DevOps?
A. Giảm chi phí phát triển phần mềm.
B. Tăng tốc độ và tần suất triển khai phần mềm, cải thiện sự hợp tác giữa các nhóm phát triển và vận hành.
C. Tăng tính bảo mật cho phần mềm.
D. Tự động tạo tài liệu hướng dẫn sử dụng phần mềm.
2. Đâu là lợi ích chính của việc sử dụng Cloud Computing trong phát triển và triển khai phần mềm?
A. Tăng tốc độ viết code.
B. Cung cấp khả năng mở rộng linh hoạt, giảm chi phí đầu tư phần cứng và quản lý cơ sở hạ tầng.
C. Tự động phát hiện và sửa lỗi trong code.
D. Tăng tính bảo mật cho phần mềm.
3. Trong phát triển phần mềm, Domain-Driven Design (DDD) là gì?
A. Một phương pháp thiết kế cơ sở dữ liệu.
B. Một phương pháp thiết kế phần mềm tập trung vào việc xây dựng phần mềm dựa trên mô hình nghiệp vụ (domain model) của vấn đề cần giải quyết.
C. Một công cụ để kiểm tra tính tuân thủ của code với các tiêu chuẩn.
D. Một kỹ thuật để tối ưu hóa hiệu năng của code.
4. Đâu là lợi ích chính của việc sử dụng Infrastructure as Code (IaC)?
A. Tăng tốc độ viết code.
B. Tự động hóa việc quản lý và triển khai cơ sở hạ tầng, giảm thiểu lỗi và tăng tính nhất quán.
C. Tự động phát hiện và sửa lỗi trong code.
D. Tăng tính bảo mật cho phần mềm.
5. Trong lập trình hướng đối tượng, tính đóng gói (encapsulation) có ý nghĩa gì?
A. Khả năng một đối tượng có nhiều hình thái khác nhau.
B. Khả năng một lớp kế thừa các thuộc tính và phương thức của lớp khác.
C. Việc kết hợp dữ liệu và phương thức xử lý dữ liệu đó vào trong một đơn vị duy nhất, đồng thời che giấu thông tin.
D. Khả năng một phương thức có thể thực hiện các hành động khác nhau tùy thuộc vào đối tượng gọi nó.
6. Trong phát triển phần mềm, Refactoring là gì?
A. Viết lại toàn bộ code của phần mềm.
B. Sửa lỗi trong code.
C. Tái cấu trúc code để cải thiện tính dễ đọc, dễ bảo trì mà không thay đổi chức năng.
D. Tối ưu hóa hiệu năng của code.
7. Đâu là lợi ích chính của việc sử dụng Test-Driven Development (TDD)?
A. Giảm thời gian kiểm thử phần mềm.
B. Cải thiện chất lượng code, giảm số lượng lỗi và tạo ra code dễ kiểm thử hơn.
C. Tăng tốc độ viết code.
D. Tự động tạo tài liệu hướng dẫn sử dụng phần mềm.
8. Trong phát triển phần mềm, Continuous Integration (CI) là gì?
A. Một phương pháp quản lý dự án phần mềm.
B. Một quy trình tự động tích hợp code từ nhiều nhà phát triển vào một kho lưu trữ chung thường xuyên.
C. Một công cụ để kiểm thử hiệu năng của phần mềm.
D. Một kỹ thuật để tối ưu hóa code.
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. Simplicity, Object-Oriented, Logic, Integrity, Design.
C. Security, Optimization, Language, Interface, Durability.
D. Structure, Operation, Layout, Implementation, Design.
10. Đâu là lợi ích chính của việc sử dụng Microservices architecture?
A. Giảm độ phức tạp của việc triển khai và bảo trì.
B. Cho phép phát triển, triển khai và mở rộng các thành phần của ứng dụng một cách độc lập.
C. Tăng tính bảo mật cho toàn bộ hệ thống.
D. Giảm chi phí phát triển phần mềm.
11. Đâu là mục tiêu chính của việc sử dụng Scrum trong quản lý dự án phần mềm?
A. Lập kế hoạch chi tiết cho toàn bộ dự án từ đầu.
B. Tăng tính linh hoạt và khả năng thích ứng với thay đổi thông qua các sprint ngắn và lặp đi lặp lại.
C. Giảm thiểu sự tương tác giữa các thành viên trong nhóm.
D. Tập trung vào việc tuân thủ nghiêm ngặt kế hoạch ban đầu.
12. Đâu là mục tiêu chính của việc sử dụng mô hình Agile trong phát triển phần mềm?
A. Giảm thiểu chi phí phát triển bằng cách cắt giảm các giai đoạn kiểm thử.
B. Tăng tốc độ phát triển và khả năng đáp ứng với thay đổi yêu cầu.
C. Đảm bảo tài liệu được tạo ra đầy đủ và chi tiết trước khi bắt đầu code.
D. Tối ưu hóa việc sử dụng tài nguyên phần cứng trong quá trình phát triển.
13. Đâ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ạo tài liệu hướng dẫn sử dụng phần mềm.
B. Quản lý và theo dõi các thay đổi của code, cho phép phục hồi các phiên bản trước đó.
C. Tăng tốc độ biên dịch và thực thi chương trình.
D. Tự động phát hiện và sửa lỗi trong code.
14. Trong kiểm thử phần mềm, Mutation Testing được sử dụng để làm gì?
A. Kiểm tra tính bảo mật của phần mềm.
B. Đánh giá chất lượng của bộ test bằng cách tạo ra các phiên bản bị lỗi (mutant) của code và xem liệu các test có phát hiện ra chúng hay không.
C. Kiểm tra hiệu năng của phần mềm dưới tải cao.
D. Kiểm tra giao diện người dùng.
15. Trong kiểm thử phần mềm, Fuzzing được sử dụng để làm gì?
A. Kiểm tra tính bảo mật của phần mềm bằng cách cung cấp dữ liệu đầu vào ngẫu nhiên và không hợp lệ để tìm kiếm các lỗ hổng.
B. Kiểm tra hiệu năng của phần mềm dưới tải cao.
C. Kiểm tra giao diện người dùng.
D. Kiểm tra tính tương thích của phần mềm với các hệ điều hành khác nhau.
16. Trong phát triển phần mềm, Technical Debt là gì?
A. Số tiền mà dự án nợ các nhà cung cấp phần mềm.
B. Chi phí để sửa lỗi trong code.
C. 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, gây khó khăn cho việc bảo trì và phát triển trong tương lai.
D. Số lượng code cần viết để hoàn thành dự án.
17. Đâu là mục tiêu chính của việc sử dụng Code Review?
A. Tăng tốc độ viết code.
B. Phát hiện lỗi, cải thiện chất lượng code và chia sẻ kiến thức giữa các thành viên trong nhóm.
C. Tự động tạo tài liệu hướng dẫn sử dụng phần mềm.
D. Quản lý cấu hình phần mềm.
18. Đâu là mục tiêu chính của việc sử dụng UML (Unified Modeling Language)?
A. Tự động tạo code từ các sơ đồ.
B. Cung cấp một ngôn ngữ trực quan để mô hình hóa, thiết kế và tài liệu hóa các hệ thống phần mềm.
C. Kiểm tra tính chính xác của code.
D. Quản lý cấu hình phần mềm.
19. Trong kiểm thử phần mềm, Acceptance Testing được thực hiện bởi ai?
A. Nhà phát triển.
B. Người kiểm thử (tester).
C. Khách hàng hoặc người dùng cuối.
D. Quản lý dự án.
20. Đâu là nhược điểm chính của mô hình thác nước (waterfall model) trong phát triển phần mềm?
A. Yêu cầu khách hàng tham gia liên tục vào quá trình phát triển.
B. Khó thay đổi yêu cầu sau khi giai đoạn phân tích đã hoàn thành.
C. Không phù hợp với các dự án nhỏ và đơn giản.
D. Đòi hỏi đội ngũ phát triển phải có kinh nghiệm cao.
21. Trong phát triển phần mềm, Design by Contract (DBC) là gì?
A. Một phương pháp để quản lý hợp đồng với khách hàng.
B. Một phương pháp thiết kế phần mềm dựa trên việc định nghĩa các điều kiện tiên quyết, hậu điều kiện và bất biến cho các thành phần của phần mềm.
C. Một công cụ để kiểm tra tính tuân thủ của code với các tiêu chuẩn.
D. Một kỹ thuật để tối ưu hóa hiệu năng của code.
22. Trong kiểm thử phần mềm, Regression Testing được sử dụng để làm gì?
A. Kiểm tra các tính năng mới được thêm vào.
B. Kiểm tra xem các thay đổi code có gây ra lỗi ở các phần khác của phần mềm hay không.
C. Kiểm tra hiệu năng của phần mềm dưới tải cao.
D. Kiểm tra tính bảo mật của phần mềm.
23. Trong kiểm thử phần mềm, kiểm thử hộp đen (black box testing) tập trung vào điều gì?
A. Kiểm tra cấu trúc code và các thuật toán bên trong.
B. Kiểm tra các đường dẫn thực thi của chương trình.
C. Kiểm tra chức năng của phần mềm dựa trên đặc tả yêu cầu.
D. Kiểm tra việc sử dụng bộ nhớ và tài nguyên hệ thống.
24. Đâu là lợi ích chính của việc sử dụng Docker trong triển khai phần mềm?
A. Tăng tốc độ viết code.
B. Đóng gói ứng dụng và các phụ thuộc của nó vào một container duy nhất, đảm bảo tính nhất quán trên các môi trường khác nhau.
C. Tự động phát hiện và sửa lỗi trong code.
D. Quản lý cơ sở dữ liệu.
25. Đâu là mục tiêu chính của việc sử dụng Design Patterns trong thiết kế phần mềm?
A. Tăng tính bảo mật cho phần mềm.
B. Cung cấp các giải pháp đã được kiểm chứng cho các vấn đề thiết kế thường gặp.
C. Giảm thiểu số lượng dòng code cần viết.
D. Tăng tốc độ thực thi của phần mềm.
26. Trong kiểm thử phần mềm, Load Testing được sử dụng để làm gì?
A. Kiểm tra tính bảo mật của phần mềm.
B. Kiểm tra hiệu năng của phần mềm dưới tải trọng dự kiến.
C. Kiểm tra giao diện người dùng.
D. Kiểm tra tính tương thích của phần mềm với các hệ điều hành khác nhau.
27. Trong kiểm thử phần mềm, Unit Testing tập trung vào việc kiểm tra điều gì?
A. Kiểm tra toàn bộ hệ thống phần mềm.
B. Kiểm tra các module riêng lẻ hoặc các thành phần nhỏ nhất của code.
C. Kiểm tra giao diện người dùng.
D. Kiểm tra hiệu năng của hệ thống.
28. Đâu là mục tiêu chính của việc sử dụng Dependency Injection (DI)?
A. Giảm sự phụ thuộc giữa các thành phần của phần mềm.
B. Tăng hiệu năng của phần mềm.
C. Tăng tính bảo mật của phần mềm.
D. Giảm chi phí phát triển phần mềm.
29. Đâu là vai trò chính của kiến trúc sư phần mềm (software architect)?
A. Viết code và kiểm thử phần mềm.
B. Thiết kế cấu trúc tổng thể của phần mềm và đưa ra các quyết định kỹ thuật quan trọng.
C. Quản lý dự án và giao tiếp với khách hàng.
D. Triển khai và bảo trì phần mềm.
30. Trong cơ sở dữ liệu, ACID là viết tắt của những thuộc tính nào?
A. Accuracy, Consistency, Isolation, Durability.
B. Atomicity, Consistency, Isolation, Durability.
C. Availability, Consistency, Integrity, Durability.
D. Atomicity, Completeness, Integrity, Distribution.