SWE201c - Phần 4: Engineering Practices for Building Quality Software · trang 2 / 4

Câu hỏi trong chủ đề

Câu 13 – 24 trong 47 câu
ACoincidental, temporal
BObject, strong
CObject, functional
DCommunicational, sequential
Lời giải
Đáp án đúng: C. Thang cohesion từ mạnh xuống yếu gồm: functional (module làm đúng một nhiệm vụ trọn vẹn) và object (mọi thao tác cùng tác động lên trạng thái của một đối tượng) ở nhóm mạnh; communicational và sequential ở nhóm trung bình; coincidental, temporal, procedural, logical association ở nhóm yếu. A liệt kê hai loại yếu nhất. B có "strong" không phải tên một loại cohesion. D liệt kê hai loại trung bình. Chỉ C ghép đúng cặp mạnh.
Mở trang câu hỏi này →
AData; Message; Data Structure
BContent; Common; External
CData; Message; None
DControl; Data Structure; Loose
Lời giải
Đáp án đúng: C. Thang coupling chia ba nhóm. Nhóm lỏng gồm no coupling (không phụ thuộc), message coupling (giao tiếp qua thông điệp) và data coupling (chỉ truyền dữ liệu đơn giản qua tham số). Nhóm trung bình gồm control coupling và data-structure coupling. Nhóm chặt gồm content, common và external coupling. A xếp nhầm data structure (trung bình) vào nhóm lỏng. B chính là danh sách nhóm CHẶT. D trộn control (trung bình) với một mục "Loose" không phải tên loại nào. Chỉ C liệt kê đúng ba loại lỏng.
Mở trang câu hỏi này →
ACoupling
BCohesion
CModularity
DInheritance
Lời giải
Đáp án đúng: B. Cohesion đúng nghĩa là mức độ các phần tử bên trong một module thuộc về nhau — cùng phục vụ một mục đích chung. A coupling đo mức phụ thuộc GIỮA các module, tức nhìn ra ngoài chứ không nhìn vào trong. C modularity là khái niệm bao trùm, nói về việc chia hệ thống thành module, trong đó coupling và cohesion là hai thước đo cụ thể. D inheritance là cơ chế kế thừa của lập trình hướng đối tượng, không phải thước đo thiết kế module.
Mở trang câu hỏi này →
ATo make the code run faster.
BTo reduce cognitive load and errors.
CTo increase the number of lines of code.
DTo make the code more complex.
Lời giải
Đáp án đúng: B. Side effect là khi một hàm âm thầm thay đổi trạng thái bên ngoài phạm vi của nó (biến toàn cục, tham số truyền vào, tệp, cơ sở dữ liệu). Hàm càng ít side effect thì càng đọc là hiểu, không phải lần ngược cả chương trình để đoán nó còn đụng vào cái gì — giảm tải nhận thức cho người đọc và giảm hẳn nhóm lỗi khó tái hiện. A sai: giảm side effect không nhằm mục đích tăng tốc độ chạy. C và D nói ngược hẳn: mục tiêu là mã ngắn gọn và đơn giản hơn, không phải dài và phức tạp hơn.
Mở trang câu hỏi này →
AAllow the testing team to work without (or with quick-to-develop) drivers and stubs, and utilize the intern resources to aid testing once all critical-path development is complete
BUtilize the intern resources to design and develop drivers and stubs, while work continues on critical-path module development
CAllow the testing team to work without (or with quick-to-develop) drivers and stubs, while using intern resources to aid critical-path development
DMake no changes to the current project testing or development allocations, utilizing intern resources to create documentation
Lời giải
Đáp án đúng: B. Nút thắt là mô-đun đường găng bị chậm, khiến thời gian dành cho kiểm thử bị cắt ngắn. Driver và stub là thứ cho phép kiểm thử một mô-đun mà không cần các mô-đun xung quanh hoàn thiện — chúng lại là công việc độc lập, vừa sức thực tập sinh và làm được NGAY BÂY GIỜ song song với đội chính. Khi mô-đun đường găng xong, bộ khung kiểm thử đã sẵn sàng, bù được phần lịch bị mất. A và C đều để đội kiểm thử làm việc mà không có driver/stub, tức chấp nhận kiểm thử yếu đi đúng lúc thời gian đã ít. D không thay đổi gì và đẩy thực tập sinh sang viết tài liệu — bỏ phí nguồn lực đúng lúc cần nhất.
Mở trang câu hỏi này →
AModularity
BPolymorphism
CCoupling
DCohesion
Lời giải
Đáp án đúng: B. Bốn khía cạnh của tính module trong thiết kế phần mềm là modularity, coupling, cohesion và information hiding (kèm data encapsulation). Polymorphism là một cơ chế của lập trình hướng đối tượng — cách một lời gọi cùng tên cho ra hành vi khác nhau tuỳ kiểu thực tế — chứ không phải một khía cạnh của thiết kế module. A, C, D đều là khía cạnh thiết kế thật: chia hệ thống thành module, đo mức phụ thuộc giữa các module, và đo mức gắn kết bên trong mỗi module.
Mở trang câu hỏi này →
AAllowing one module to affect the program flow of another via the use of a flag (control coupling)
BHaving more than one module rely on the same version of the RSS standard (external coupling)
CAllowing one module to affect the program flow of another via the use of a state message (message coupling)
DHaving two modules rely on the same global information structure (common coupling)
Lời giải
Đáp án đúng: C. Thang coupling xếp từ lỏng tới chặt: no coupling, message coupling, data coupling, data-structure coupling, control coupling, external coupling, common coupling, content coupling. Coupling càng lỏng càng đáng mong muốn, và message coupling là loại lỏng nhất trong các lựa chọn có mặt. A control coupling nằm ở nhóm trung bình, một module điều khiển luồng của module kia bằng cờ. B external coupling và D common coupling đều thuộc nhóm CHẶT — phụ thuộc vào định dạng bên ngoài, hoặc cùng chia sẻ một cấu trúc dữ liệu toàn cục. Cả ba đều tệ hơn C.
Mở trang câu hỏi này →
Ainputs which cause issues
Binputs, expected output, and an oracle
Cinputs, expected output, an oracle, and the actual output
Dinputs and expected output
Lời giải
Đáp án đúng: B. Để chạy được một phép kiểm thử đúng nghĩa, ta cần ba thứ có TRƯỚC khi chạy: bộ dữ liệu đầu vào, kết quả kỳ vọng, và một oracle — cơ chế phán xét kết quả thực có khớp kỳ vọng hay không. C thừa "actual output": kết quả thực chỉ xuất hiện SAU khi chạy, nó là đầu ra của phép kiểm thử chứ không phải điều kiện chuẩn bị. A quá hẹp, chỉ có đầu vào thì không biết lấy gì mà so. D thiếu oracle, tức có kỳ vọng nhưng không có cơ chế phán xét — trong nhiều bài toán, việc xác định kết quả đúng lại chính là phần khó nhất.
Mở trang câu hỏi này →
AFault
BEffective error
CLatent error
DFailure
Lời giải
Đáp án đúng: A. Chuỗi khái niệm chuẩn: fault là khiếm khuyết nằm trong mã (lỗi lập trình viên viết ra), error là trạng thái sai của hệ thống khi fault đó bị kích hoạt lúc chạy, failure là biểu hiện ra ngoài khi kết quả sai lệch tới người dùng. Câu hỏi mô tả "sai sót trong mã CHƯA được kích hoạt" — đúng định nghĩa fault. C latent error nghe hợp lý nhưng error theo định nghĩa là trạng thái đã phát sinh khi chạy, tức đã được kích hoạt. B "effective error" và D failure đều nằm sau trên chuỗi. Mấu chốt: chưa chạy tới thì mới chỉ là fault.
Mở trang câu hỏi này →
ATo list all possible software bugs.
BTo organize attacks on a resource across various threats.
CTo create a marketing strategy for security software.
DTo document user feedback on security measures.
Lời giải
Đáp án đúng: B. Attack tree là công cụ mô hình hoá mối đe doạ: nút gốc là mục tiêu của kẻ tấn công đối với một tài nguyên, các nhánh con là những con đường khác nhau để đạt mục tiêu đó, tiếp tục phân rã tới các bước tấn công cụ thể. Nó tổ chức có hệ thống mọi hướng tấn công vào một tài nguyên để đội phát triển biết cần phòng thủ ở đâu. A nhầm với danh sách lỗi phần mềm thông thường — attack tree quan tâm ý đồ tấn công, không phải bug. C và D hoàn toàn lệch lĩnh vực.
Mở trang câu hỏi này →
AThe number of classes in a system.
BHow external change affects a class.
CThe speed of the program execution.
DThe amount of data stored in a class.
Lời giải
Đáp án đúng: B. Instability là chỉ số của Robert Martin, tính bằng số phụ thuộc đi ra chia cho tổng phụ thuộc đi ra và đi vào (I = Ce / (Ca + Ce)), cho giá trị từ 0 tới 1. Nó đo mức độ một lớp hoặc gói dễ bị tác động khi thứ nó phụ thuộc thay đổi: I gần 1 nghĩa là phụ thuộc nhiều ra bên ngoài nên rất dễ bị thay đổi bên ngoài làm ảnh hưởng. A, C, D đều không liên quan: đếm số lớp là quy mô hệ thống, tốc độ thực thi là hiệu năng, lượng dữ liệu lưu trong lớp là chuyện bộ nhớ. Không cái nào đo được sự phụ thuộc.
Mở trang câu hỏi này →
Select the true statement:4 lựa chọn
AThe goal of test selection is to find the maximum number of tests that can be successfully run.
BRandomly testing is the poorest form of testing.
CThe developer of the code is the best person to test that code.
DManually created tests can use randomly selected inputs to maximize defect finding.
Lời giải
Đáp án đúng: D. Kiểm thử thủ công hoàn toàn có thể dùng đầu vào chọn ngẫu nhiên: chọn ngẫu nhiên giúp chạm tới những vùng dữ liệu mà người viết test khó nghĩ ra, nhờ đó tăng khả năng phát hiện khiếm khuyết. Đây là phát biểu đúng. A sai: mục tiêu chọn test không phải tìm nhiều phép kiểm thử chạy THÀNH CÔNG nhất, mà tìm phép kiểm thử có khả năng làm lộ lỗi cao nhất. B sai: kiểm thử ngẫu nhiên là một kỹ thuật hợp lệ và hữu ích, không phải hình thức tệ nhất. C sai: chính tác giả đoạn mã là người kém khách quan nhất để kiểm thử nó, vì cùng một hiểu lầm sinh ra bug sẽ sinh ra cả test sai.
Mở trang câu hỏi này →
Xem cả 47 câu của chủ đề

Đề có câu hỏi của chủ đề này

3 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.