1. Mục đích của `Tích hợp liên tục′ (Continuous Integration - CI) trong DevOps là gì?
A. Tự động hóa quá trình kiểm thử hiệu suất.
B. Tự động hóa việc tích hợp mã nguồn từ nhiều nhà phát triển vào một kho chung thường xuyên và kiểm thử tự động sau mỗi lần tích hợp.
C. Tự động hóa việc triển khai phần mềm lên môi trường sản xuất.
D. Quản lý vòng đời phát triển phần mềm.
2. Đâu là một trong những thách thức chính khi phát triển phần mềm phân tán?
A. Sự phức tạp trong việc quản lý cấu hình và triển khai.
B. Khó khăn trong việc đảm bảo tính nhất quán dữ liệu và xử lý lỗi mạng.
C. Thiếu công cụ và framework hỗ trợ phát triển.
D. Chi phí phần cứng quá cao.
3. Đâu là một ví dụ về `Mô hình phát triển lặp′ (Iterative Development Model)?
A. Mô hình thác nước (Waterfall).
B. Mô hình chữ V (V-Model).
C. Mô hình xoắn ốc (Spiral Model).
D. Mô hình Big Bang.
4. Refactoring mã nguồn là quá trình làm gì?
A. Sửa lỗi và vá lỗ hổng bảo mật trong mã nguồn.
B. Thêm chức năng mới vào phần mềm.
C. Cải thiện cấu trúc bên trong của 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.
5. Mục tiêu chính của kỹ thuật phần mềm là gì?
A. Tạo ra phần mềm không có lỗi.
B. Phát triển phần mềm đúng thời hạn và trong ngân sách.
C. Quản lý dự án phần mềm hiệu quả.
D. Tạo ra và duy trì các hệ thống phần mềm chất lượng cao, đáp ứng nhu cầu người dùng.
6. Trong UML (Unified Modeling Language), sơ đồ lớp (Class Diagram) được sử dụng để mô hình hóa điều gì?
A. Luồng dữ liệu giữa các thành phần của hệ thống.
B. Hành vi và tương tác giữa các đối tượng theo thời gian.
C. Cấu trúc tĩnh của hệ thống, bao gồm các lớp, thuộc tính và mối quan hệ giữa chúng.
D. Quy trình nghiệp vụ và các hoạt động của người dùng.
7. Yêu cầu phi chức năng (Non-functional requirements) mô tả điều gì?
A. Các chức năng cụ thể mà phần mềm phải thực hiện.
B. Cách thức phần mềm thực hiện các chức năng đó, ví dụ: hiệu suất, bảo mật, khả năng sử dụng.
C. Giao diện người dùng và trải nghiệm người dùng.
D. Cấu trúc dữ liệu và thuật toán được sử dụng trong phần mềm.
8. Đâu là một ví dụ về `Design Pattern′ (Mẫu thiết kế) trong kỹ thuật phần mềm?
A. Agile Scrum.
B. UML Class Diagram.
C. Singleton Pattern.
D. Kiểm thử hộp trắng (White-box testing).
9. Mục tiêu chính của giai đoạn `Bảo trì phần mềm′ (Software Maintenance) là gì?
A. Phát triển chức năng mới cho phần mềm.
B. Triển khai phần mềm lên môi trường sản xuất.
C. Sửa lỗi, cải thiện hiệu suất và thích ứng phần mềm với môi trường thay đổi sau khi triển khai.
D. Thu thập yêu cầu từ người dùng.
10. Nguyên tắc `Yêu cầu tối thiểu′ (Principle of Least Privilege) trong bảo mật phần mềm có nghĩa là gì?
A. Giảm thiểu số lượng người dùng có quyền truy cập vào hệ thống.
B. Cung cấp cho người dùng quyền truy cập tối thiểu cần thiết để thực hiện công việc của họ, không hơn.
C. Yêu cầu người dùng thay đổi mật khẩu thường xuyên.
D. Sử dụng mã hóa mạnh để bảo vệ dữ liệu.
11. Trong kiểm thử phần mềm, `Độ bao phủ mã` (Code Coverage) dùng để đo lường điều gì?
A. Số lượng lỗi được phát hiện trong quá trình kiểm thử.
B. Phần trăm mã nguồn đã được thực thi bởi các bộ kiểm thử.
C. Thời gian cần thiết để thực hiện các bộ kiểm thử.
D. Mức độ phức tạp của mã nguồn.
12. Đâ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 kỹ thuật cho dự án.
B. Cho phép nhiều nhà phát triển làm việc đồng thời trên cùng một dự án mà không gây xung đột và dễ dàng theo dõi lịch sử thay đổi.
C. Tăng cường bảo mật cho mã nguồn.
D. Giảm thời gian biên dịch mã nguồn.
13. Kiến trúc Microservices có ưu điểm chính nào so với kiến trúc Monolithic?
A. Đơn giản hóa việc triển khai và quản lý.
B. Dễ dàng phát triển và kiểm thử hơn.
C. Khả năng mở rộng và khả năng chịu lỗi tốt hơn, do các dịch vụ độc lập có thể được mở rộng và phục hồi riêng lẻ.
D. Hiệu suất cao hơn do giảm độ trễ giao tiếp giữa các thành phần.
14. Phương pháp `Phát triển hướng kiểm thử` (Test-Driven Development - TDD) có quy trình như thế nào?
A. Viết mã nguồn trước, sau đó viết kiểm thử.
B. Viết kiểm thử trước khi viết mã nguồn, sau đó viết mã để kiểm thử thành công, rồi tái cấu trúc mã.
C. Viết kiểm thử và mã nguồn song song.
D. Chỉ viết kiểm thử sau khi hoàn thành một module lớn.
15. Khái niệm `Coupling′ (Độ liên kết) trong thiết kế phần mềm đề cập đến điều gì?
A. Mức độ gắn kết của các thành viên trong nhóm phát triển.
B. Mức độ phụ thuộc lẫn nhau giữa các module hoặc thành phần phần mềm.
C. Tốc độ giao tiếp giữa các thành phần phần mềm.
D. Số lượng dòng mã trong một module.
16. Trong ngữ cảnh kiểm thử hiệu suất, `Load Testing′ (Kiểm thử tải) được sử dụng để làm gì?
A. Kiểm tra chức năng của phần mềm dưới điều kiện tải bình thường.
B. Mô phỏng số lượng lớn người dùng đồng thời truy cập hệ thống để đánh giá hiệu suất và khả năng chịu tải.
C. Kiểm tra bảo mật của hệ thống khi chịu tải cao.
D. Tìm lỗi logic trong mã nguồn.
17. Trong quy trình phát triển phần mềm, `Requirements Elicitation′ (Thu thập yêu cầu) là giai đoạn làm gì?
A. Thiết kế giao diện người dùng.
B. Xác định, phân tích và ghi lại các nhu cầu và mong muốn của người dùng và các bên liên quan để hình thành yêu cầu phần mềm.
C. Viết mã nguồn.
D. Kiểm thử phần mềm.
18. Đâu là một thách thức trong việc quản lý dự án phần mềm Agile?
A. Thiếu tài liệu hướng dẫn chi tiết.
B. Khó khăn trong việc lập kế hoạch dài hạn và xác định phạm vi dự án chính xác ngay từ đầu do tính linh hoạt và thay đổi yêu cầu.
C. Thời gian phát triển quá dài.
D. Chi phí phát triển quá cao.
19. Kiểm thử hộp đen (Black-box testing) tập trung vào yếu tố nào?
A. Cấu trúc bên trong và logic của mã nguồn.
B. Giao diện người dùng và chức năng đầu vào∕đầu ra.
C. Hiệu suất và khả năng mở rộng của hệ thống.
D. Tính bảo mật của ứng dụng.
20. Khái niệm `Nợ kỹ thuật′ (Technical Debt) trong phát triển phần mềm đề cập đến điều gì?
A. Chi phí phát sinh do sử dụng công nghệ cũ.
B. Hậu quả của việc đưa ra các quyết định thiết kế hoặc mã hóa không tối ưu trong ngắn hạn để đạt được tiến độ, nhưng có thể gây ra vấn đề trong tương lai.
C. Chi phí bảo trì phần mềm sau khi triển khai.
D. Các khoản nợ tài chính phát sinh trong dự án phần mềm.
21. Đâu là một chỉ số quan trọng để đánh giá chất lượng mã nguồn?
A. Số dòng mã (Lines of Code - LOC).
B. Độ phức tạp Cyclomatic (Cyclomatic Complexity).
C. Số lượng commit trong hệ thống quản lý phiên bản.
D. Số lượng thành viên trong nhóm phát triển.
22. Nguyên tắc `Separation of Concerns′ (SoC - Phân tách mối quan tâm) khuyến khích điều gì trong thiết kế phần mềm?
A. Kết hợp nhiều chức năng vào một module duy nhất để tối ưu hóa hiệu suất.
B. Chia phần mềm thành các module độc lập, mỗi module chịu trách nhiệm cho một khía cạnh hoặc chức năng cụ thể.
C. Giao tiếp chặt chẽ giữa các module để tăng cường tính tương tác.
D. Tập trung vào việc tối ưu hóa mã nguồn trước khi phân tách thành module.
23. Nguyên tắc SOLID trong thiết kế hướng đối tượng giúp đạt được điều gì?
A. Tăng tốc độ phát triển phần mềm.
B. Giảm chi phí phần cứng cần thiết.
C. Tạo ra mã nguồn dễ bảo trì, mở rộng, tái sử dụng và kiểm thử.
D. Đảm bảo phần mềm luôn hoạt động ổn định trong mọi điều kiện.
24. Khái niệm `Technical Architecture′ (Kiến trúc kỹ thuật) trong công nghệ phần mềm bao gồm những yếu tố chính nào?
A. Ngân sách dự án và tiến độ thực hiện.
B. Cấu trúc tổng thể của hệ thống, các thành phần, mối quan hệ giữa chúng và các nguyên tắc thiết kế.
C. Yêu cầu chức năng và phi chức năng.
D. Giao diện người dùng và trải nghiệm người dùng.
25. Công cụ `Phân tích mã tĩnh′ (Static Code Analysis) được sử dụng để làm gì?
A. Chạy chương trình và theo dõi hành vi của nó trong thời gian thực.
B. Kiểm tra mã nguồn để tìm lỗi, lỗ hổng bảo mật và vi phạm quy tắc mã hóa mà không cần thực thi chương trình.
C. Tự động tạo mã nguồn từ sơ đồ thiết kế.
D. Tối ưu hóa mã nguồn để cải thiện hiệu suất.
26. Mô hình thác nước (Waterfall) trong phát triển phần mềm có đặc điểm chính là gì?
A. Các giai đoạn phát triển phần mềm được thực hiện song song.
B. Cho phép quay lại giai đoạn trước để sửa lỗi một cách dễ dàng.
C. Các giai đoạn phát triển phần mềm được thực hiện tuần tự, giai đoạn sau chỉ bắt đầu khi giai đoạn trước hoàn thành.
D. Khuyến khích sự tương tác liên tục với khách hàng trong suốt dự án.
27. Trong kiểm thử bảo mật, `Penetration Testing′ (Kiểm thử xâm nhập) là gì?
A. Kiểm tra hiệu suất của hệ thống khi chịu tải lớn.
B. Đánh giá khả năng phục hồi của hệ thống sau sự cố.
C. Mô phỏng các cuộc tấn công mạng thực tế để tìm và khai thác các lỗ hổng bảo mật trong hệ thống.
D. Kiểm tra tính tuân thủ các tiêu chuẩn bảo mật.
28. Khái niệm `Tái cấu trúc cơ sở dữ liệu′ (Database Refactoring) liên quan đến việc gì?
A. Thay đổi hệ quản trị cơ sở dữ liệu (DBMS).
B. Cải thiện cấu trúc cơ sở dữ liệu (ví dụ: bảng, cột, chỉ mục) mà không thay đổi chức năng ứng dụng.
C. Tối ưu hóa truy vấn cơ sở dữ liệu để cải thiện hiệu suất.
D. Di chuyển cơ sở dữ liệu sang một máy chủ khác.
29. Phương pháp phát triển phần mềm Agile nhấn mạnh điều gì?
A. Lập kế hoạch chi tiết và tuân thủ nghiêm ngặt kế hoạch.
B. Tài liệu hóa đầy đủ mọi giai đoạn của dự án.
C. Sự linh hoạt, hợp tác chặt chẽ với khách hàng và phản hồi nhanh chóng với thay đổi.
D. Phân chia công việc rõ ràng giữa các thành viên dự án.
30. Phương pháp `Kiểm thử theo hướng dữ liệu′ (Data-Driven Testing) tập trung vào điều gì?
A. Kiểm thử hiệu suất dựa trên dữ liệu lớn.
B. Tách biệt dữ liệu kiểm thử khỏi kịch bản kiểm thử, cho phép chạy cùng một kịch bản với nhiều bộ dữ liệu khác nhau.
C. Sử dụng dữ liệu thực tế để kiểm thử hệ thống.
D. Phân tích dữ liệu nhật ký để tìm lỗi.