Ngân hàng câu hỏi của chương

Câu hỏi: CSI106 - Phần 12: Ngôn ngữ lập trình và kỹ nghệ phần mềm

49 câu trắc nghiệm kèm lời giải của môn Introduction to Computer Science - CSI106, xếp theo thứ tự nhập vào ngân hàng. Trang 2/3 — câu 21–40.

Danh sách câu hỏi

40/49 câuCòn 9
AMachine Language
BHigh-Level Language
CAssembly Language
DSymbolic Language
Lời giải
Đáp án đúng: "Machine Language". Thế hệ ngôn ngữ đầu tiên chính là ngôn ngữ máy: người lập trình viết trực tiếp các dãy bit mà bộ xử lý hiểu được, không cần bất cứ chương trình dịch nào ở giữa, đổi lại rất khó viết và khó sửa. "High-Level Language" ra đời muộn nhất trong nhóm này, dùng câu lệnh gần với tiếng Anh và phải nhờ trình biên dịch mới chạy được trên máy. "Assembly Language" là bước cải tiến tiếp sau ngôn ngữ máy, thay dãy bit bằng từ gợi nhớ nên vẫn cần trình hợp dịch chuyển về mã máy. "Symbolic Language" là tên gọi khác của chính hợp ngữ, nhấn vào việc dùng ký hiệu thay cho mã nhị phân, nên cũng xuất hiện sau ngôn ngữ máy.
Mở trang câu hỏi này →
AProcedural
BObject-oriented
CFunctional
DDeclarative
EMathematical
Lời giải
Đáp án đúng: "Mathematical". Các mô thức ngôn ngữ lập trình được phân loại theo cách người viết diễn đạt lời giải, và không có mô thức nào mang tên toán học; toán học là nền tảng lý thuyết chung cho cả ngành chứ không phải một kiểu tổ chức chương trình. "Procedural" là mô thức thủ tục, chương trình là dãy lời gọi thủ tục tác động lên dữ liệu bị động. "Object-oriented" xem chương trình là tập các đối tượng chủ động, mỗi đối tượng mang theo dữ liệu và phương thức của mình. "Functional" dựng chương trình bằng cách kết hợp các hàm, nhấn vào giá trị trả về thay vì trạng thái bị thay đổi. "Declarative" chỉ khai báo sự kiện và luật rồi để hệ thống tự suy diễn ra câu trả lời, tiêu biểu là lập trình logic.
Mở trang câu hỏi này →
AProcedural paradigm
BObject-oriented paradigm
CFunctional paradigm
DDeclarative paradigm
Lời giải
Đáp án đúng: "Procedural paradigm". Mô thức thủ tục nhìn chương trình như một tác nhân chủ động: chính chương trình phát ra hành động, còn dữ liệu là những đối tượng bị động, chỉ thay đổi khi bị thủ tục tác động lên. "Object-oriented paradigm" đảo lại cách nhìn đó, vì mỗi đối tượng tự mang hành vi của mình và phản ứng khi nhận thông điệp, nên không có bên nào thuần bị động. "Functional paradigm" coi chương trình là sự kết hợp của các hàm, nhấn vào việc biến đầu vào thành đầu ra chứ không vào quan hệ điều khiển giữa bên chủ động và bên bị động. "Declarative paradigm" không mô tả ai tác động lên ai: người viết chỉ nêu sự kiện và luật, còn bộ suy diễn tự tìm câu trả lời.
Mở trang câu hỏi này →
AAs a collection of active objects that react to stimuli
BAs a set of facts and rules to answer queries
CAs a series of function calls where the algorithm calls itself.
DAs a set of procedure calls, separating procedures from passive data objects
Lời giải
Đáp án đúng: "As a set of procedure calls, separating procedures from passive data objects". Trong mô thức thủ tục, chương trình được dựng thành các thủ tục gọi nhau, còn dữ liệu nằm tách biệt bên ngoài các thủ tục đó và chờ được truyền vào để xử lý; đúng cấu trúc mà những ngôn ngữ như C hay Pascal khuyến khích. "As a collection of active objects that react to stimuli" là cách tổ chức của mô thức hướng đối tượng, nơi dữ liệu và hành vi được gói chung trong một đối tượng. "As a set of facts and rules to answer queries" mô tả mô thức khai báo, chương trình là cơ sở sự kiện và luật để truy vấn. "As a series of function calls where the algorithm calls itself." chỉ nói về đệ quy, một kỹ thuật viết thuật toán dùng được trong nhiều mô thức chứ không phải cách cấu trúc chương trình thủ tục.
Mở trang câu hỏi này →
ATesting
BDesign
CAnalysis
DImplementation
Lời giải
Đáp án đúng: "Analysis". Vòng đời phần mềm gồm bốn pha nối tiếp: phân tích, thiết kế, cài đặt và kiểm thử. Pha phân tích đi đầu vì phải hiểu bài toán, thu thập và đặc tả yêu cầu của người dùng trước khi có thứ gì để thiết kế. "Design" đến sau phân tích, bởi chỉ khi biết hệ thống phải làm gì mới chia được module và chọn được cấu trúc. "Implementation" là pha thứ ba, lúc lập trình viên dịch bản thiết kế thành mã nguồn, nên không thể đứng đầu. "Testing" là pha cuối, chạy thử sản phẩm để tìm lỗi, nó cần có mã đã viết xong mới thực hiện được. Đảo thứ tự các pha này là nguồn gốc của phần lớn sai sót đắt tiền trong một dự án.
Mở trang câu hỏi này →
APython
BProlog
CSQL
DJava
Lời giải
Đáp án đúng: "Prolog". Mô thức khai báo dựa trên logic vị từ: người lập trình nêu các sự kiện và luật suy diễn, còn máy tự tìm cách trả lời truy vấn thay vì được chỉ dẫn từng bước, và Prolog là ngôn ngữ tiêu biểu của mô thức này. "SQL" cũng mang tinh thần khai báo vì ta mô tả kết quả muốn có chứ không mô tả cách lấy, nhưng nó là ngôn ngữ truy vấn chuyên dụng cho cơ sở dữ liệu, không phải ngôn ngữ lập trình đa dụng được xếp vào bảng bốn mô thức, nên trong cách phân loại này nó không được chọn. "Python" là ngôn ngữ mệnh lệnh đa mô thức, chủ yếu thủ tục và hướng đối tượng, chương trình là dãy lệnh làm thay đổi trạng thái. "Java" là ngôn ngữ hướng đối tượng thuần mệnh lệnh, mọi việc đều phải viết rõ từng bước trong thân phương thức.
Mở trang câu hỏi này →
AProcedural programming uses functions, while object-oriented programming uses loops.
BObject-oriented programming organizes code into objects, while procedural programming uses a linear sequence of instructions.
CProcedural programming supports inheritance, while object-oriented programming does not.
DObject-oriented programming does not allow code reuse, while procedural programming does.
Lời giải
Đáp án đúng: "Object-oriented programming organizes code into objects, while procedural programming uses a linear sequence of instructions.". Khác biệt cốt lõi nằm ở cách tổ chức mã: hướng đối tượng gom dữ liệu cùng các phép tác động lên dữ liệu đó vào trong đối tượng, còn thủ tục nhìn chương trình như một dãy lệnh và lời gọi hàm thi hành tuần tự trên dữ liệu rời bên ngoài. "Procedural programming uses functions, while object-oriented programming uses loops." sai vì vòng lặp là cấu trúc điều khiển có mặt ở mọi mô thức, và hướng đối tượng cũng dùng hàm dưới dạng phương thức. "Procedural programming supports inheritance, while object-oriented programming does not." sai vì nói ngược: kế thừa là đặc trưng riêng của hướng đối tượng, lập trình thủ tục không có cơ chế đó. "Object-oriented programming does not allow code reuse, while procedural programming does." sai vì hướng đối tượng tái dùng mã mạnh hơn nhờ kế thừa và đa hình.
Mở trang câu hỏi này →
AIt focuses on coding individual functions and procedures.
BIt defines the overall structure and organization of the software system.
CIt is a tool for project management.
DIt involves testing the software against user requirements.
Lời giải
Đáp án đúng: "It defines the overall structure and organization of the software system.". Kiến trúc phần mềm là bản mô tả ở mức cao về cấu trúc tổng thể của hệ thống: có những module hay thành phần nào, mỗi thành phần chịu trách nhiệm gì và chúng nối với nhau ra sao. Đây là loại quyết định rất khó sửa về sau nên phải chốt ngay trong pha thiết kế. "It focuses on coding individual functions and procedures." sai vì viết mã cho từng hàm, từng thủ tục là công việc ở mức chi tiết của pha cài đặt, nằm dưới mức kiến trúc. "It is a tool for project management." sai vì kiến trúc là sản phẩm thiết kế kỹ thuật, không phải công cụ lập kế hoạch hay theo dõi tiến độ dự án. "It involves testing the software against user requirements." sai vì đối chiếu sản phẩm với yêu cầu người dùng là việc của pha kiểm thử và nghiệm thu, diễn ra sau khi đã có mã chạy được.
Mở trang câu hỏi này →
AAll user input values
BAll independent paths in every module
CAll decision constructs on each branch.
DEach loop construct
Lời giải
Đáp án đúng: "All user input values". Kiểm thử hộp kính, tức hộp trắng, dựa trên cấu trúc bên trong của mã nguồn: phải phủ mọi đường đi độc lập, mọi nhánh của từng cấu trúc quyết định và mọi cấu trúc lặp. Thử hết mọi giá trị mà người dùng có thể nhập là bất khả thi về số lượng và thuộc hướng tiếp cận hộp đen, nên không nằm trong tiêu chí này. "All independent paths in every module" là tiêu chí bắt buộc, vì bỏ sót một đường đi là bỏ sót cả một khả năng chạy của chương trình. "All decision constructs on each branch." là tiêu chí bắt buộc, vì mỗi điều kiện phải được thử cả khi đúng lẫn khi sai. "Each loop construct" cũng bắt buộc, vì vòng lặp cần thử các trường hợp không chạy lần nào, chạy một lần và chạy nhiều lần để lộ lỗi biên.
Mở trang câu hỏi này →
AMachine language uses symbols, while high-level languages use binary patterns
BMachine language is directly understood by a computer, while high-level languages must be converted
CMachine language is portable, while high-level languages are machine-dependent.
DHigh-level languages are tedious to write, while machine language is easier.
Lời giải
Đáp án đúng: "Machine language is directly understood by a computer, while high-level languages must be converted". Ngôn ngữ máy là dãy mẫu bit mà mạch điều khiển của bộ xử lý giải mã trực tiếp; chương trình viết bằng ngôn ngữ cấp cao phải qua trình biên dịch hoặc trình thông dịch để thành mã máy mới chạy được. "Machine language uses symbols, while high-level languages use binary patterns" sai vì nói ngược: ngôn ngữ cấp cao mới dùng từ khoá và ký hiệu gần với tiếng người, còn mã máy là mẫu bit. "Machine language is portable, while high-level languages are machine-dependent." sai vì mã máy gắn chặt với tập lệnh của một kiến trúc nên không khả chuyển, trong khi ngôn ngữ cấp cao chính là thứ cho phép mang mã nguồn sang máy khác rồi dịch lại. "High-level languages are tedious to write, while machine language is easier." sai vì viết mã máy khó và dễ sai hơn nhiều, hơn nữa độ tiện tay không phải khác biệt về việc máy hiểu được hay không.
Mở trang câu hỏi này →
AAnalysis phase
BDesign phase
CImplementation phase
DTesting phase
Lời giải
Đáp án đúng: "Implementation phase". Pha cài đặt là lúc bản thiết kế được biến thành mã nguồn: lập trình viên chọn ngôn ngữ, viết các module theo cấu trúc đã thiết kế, rồi dịch và chạy thử sơ bộ. "Analysis phase" sai vì pha phân tích làm việc với yêu cầu, nó trả lời hệ thống phải làm gì chứ không viết dòng mã nào. "Design phase" sai vì pha thiết kế quyết định cách làm ở mức cấu trúc, chia module và định nghĩa giao diện giữa chúng, nhưng vẫn chưa sinh ra mã chạy được. "Testing phase" sai vì pha kiểm thử dùng mã đã viết xong để tìm lỗi, bằng cách thử theo cấu trúc bên trong và thử theo yêu cầu bên ngoài; nó tiêu thụ sản phẩm của pha cài đặt chứ không tạo ra sản phẩm ấy.
Mở trang câu hỏi này →
AThe module's components are strongly related to its purpose
BThe module depends heavily on other modules
CThe module communicates frequently with external modules
DThe module relies on shared global data
Lời giải
Đáp án đúng: "The module's components are strongly related to its purpose". Cohesion, tức độ kết dính, đo mức độ các thành phần bên trong một module cùng phục vụ đúng một mục đích; kết dính cao nghĩa là mọi hàm và dữ liệu trong module đều xoay quanh một nhiệm vụ duy nhất, nhờ đó module dễ hiểu, dễ kiểm thử và dễ thay thế mà không kéo theo chỗ khác. Phương án "The module depends heavily on other modules" mô tả coupling, tức độ ghép nối, cao; đó là quan hệ giữa các module chứ không phải tính chất bên trong một module, và thiết kế tốt còn tìm cách giảm nó. Phương án "The module communicates frequently with external modules" cũng nói về lưu lượng giao tiếp ra bên ngoài, một dấu hiệu ghép nối chặt, nên không phản ánh kết dính nội bộ. Phương án "The module relies on shared global data" là kiểu ghép nối qua dữ liệu toàn cục dùng chung, bị xem là tệ vì hai module có thể vô tình sửa cùng một biến.
Mở trang câu hỏi này →
AProcedural
BObject-oriented
CFunctional
DDatabase-driven
Lời giải
Đáp án đúng: "Database-driven". Bốn lối lập trình lớn mà môn này nêu là thủ tục, hướng đối tượng, hàm và khai báo; cách tổ chức công việc quanh một cơ sở dữ liệu không phải một lối tư duy lập trình riêng mà chỉ là một kiểu kiến trúc ứng dụng, có thể hiện thực bằng bất kỳ lối nào trong bốn lối kia. Phương án "Procedural" là lối thủ tục, chương trình là dãy lệnh thao tác trên dữ liệu, nên nằm trong bốn lối. Phương án "Object-oriented" là lối hướng đối tượng, gói dữ liệu cùng phương thức vào đối tượng, cũng là một lối chính thức. Phương án "Functional" là lối hàm, xây chương trình bằng cách ghép các hàm biến đổi dữ liệu, cũng thuộc bốn lối; lối còn lại là khai báo, và đây mới là chỗ trống mà phương án đúng không lấp được.
Mở trang câu hỏi này →
ADevelopers can test and add functionality in steps.
BIt requires all requirements up front before development.
CIt involves minimal testing.
DIt completes design and implementation simultaneously.
Lời giải
Đáp án đúng: "Developers can test and add functionality in steps.". Khi hệ thống được dựng dần theo từng phần rồi tích hợp, mỗi phần vừa xong là đã chạy và kiểm thử được, nên lỗi và sai lệch yêu cầu lộ ra sớm, người dùng thấy sản phẩm chạy thật từ giai đoạn đầu và việc thêm chức năng về sau dựa trên nền đã được kiểm chứng. Phương án "It requires all requirements up front before development." mô tả đòi hỏi của mô hình thác nước, hơn nữa đây là một ràng buộc bất lợi chứ không phải lợi ích. Phương án "It involves minimal testing." sai ngược chiều: cách làm từng phần kiểm thử nhiều lần hơn vì mỗi lần tích hợp đều phải kiểm lại. Phương án "It completes design and implementation simultaneously." không phải đặc trưng của cách làm này, và gộp thiết kế với hiện thực cũng chẳng phải điều đáng coi là ưu điểm.
Mở trang câu hỏi này →
ATesting
BDesign
CAnalysis
DImplementation
Lời giải
Đáp án đúng: "Analysis". Lược đồ luồng dữ liệu là công cụ của pha phân tích theo lối hướng thủ tục: nó mô tả dữ liệu đi vào hệ thống từ đâu, bị những tiến trình nào biến đổi, lưu ở kho nào và đi ra đâu, tức trả lời hệ thống phải làm gì chứ chưa nói làm bằng cách nào. Phương án "Testing" là pha kiểm thử, dùng ca kiểm thử và dữ liệu thử để đối chiếu sản phẩm với yêu cầu, không phải nơi vẽ lược đồ này. Phương án "Design" là pha thiết kế, nơi người ta chuyển kết quả phân tích thành cấu trúc module, lược đồ cấu trúc hay thiết kế dữ liệu chi tiết, đi sau lược đồ luồng dữ liệu. Phương án "Implementation" là pha viết mã, chỉ hiện thực những gì đã phân tích và thiết kế xong.
Mở trang câu hỏi này →
ABy writing a sequence of instructions to manipulate dat
BBy creating objects that encapsulate data and methods
CBy defining functions that transform data without side effects.
DBy stating facts and rules, allowing the system to use logical reasoning to answer queries
Lời giải
Đáp án đúng: "By stating facts and rules, allowing the system to use logical reasoning to answer queries". Lối khai báo đảo ngược cách nghĩ thường gặp: lập trình viên không mô tả các bước phải làm mà khai các sự kiện đã biết cùng những luật suy diễn, sau đó đặt câu hỏi và để bộ suy diễn của hệ thống tự tìm lời giải, như cách làm việc với ngôn ngữ Prolog. Phương án "By writing a sequence of instructions to manipulate dat" tả đúng lối mệnh lệnh và thủ tục, nơi trình tự các bước là trọng tâm. Phương án "By creating objects that encapsulate data and methods" là lối hướng đối tượng. Phương án "By defining functions that transform data without side effects." là lối hàm; nó cũng mang tinh thần khai báo nhưng đơn vị xây dựng là hàm biến đổi dữ liệu, không phải tập sự kiện và luật để suy diễn.
Mở trang câu hỏi này →
AFunctional programming
BImperative programming
CObject-oriented programming
DProcedural programming
Lời giải
Đáp án đúng: "Functional programming". Trong bốn lựa chọn, lối hàm là lối duy nhất mang tinh thần khai báo: chương trình được viết bằng cách định nghĩa các hàm và biểu thức mô tả kết quả cần có, không phải bằng chuỗi lệnh thay đổi trạng thái theo thời gian, nên nó nhấn vào cái gì cần tính thay vì tính theo bước nào. Phương án "Imperative programming" chính là cực đối lập, vì chương trình ở đó là dãy lệnh lần lượt làm thay đổi biến và trạng thái máy, tức mô tả cách làm. Phương án "Object-oriented programming" tổ chức mã quanh các đối tượng gói dữ liệu cùng phương thức, nhưng thân mỗi phương thức vẫn viết theo lối ra lệnh từng bước. Phương án "Procedural programming" là một nhánh của lối mệnh lệnh, chỉ thêm việc chia chương trình thành các hàm con nên vẫn thuộc nhóm mô tả cách làm.
Mở trang câu hỏi này →
AA compiler translates the entire program before execution, while an interpreter translates one line at a time
BA compiler executes code line by line, while an interpreter translates the whole program at once
CA compiler does not check for errors, while an interpreter does
DA compiler continuously checks for errors line by line, while an interpreter does not, so an interpreter runs faster than a compiler
Lời giải
Đáp án đúng: "A compiler translates the entire program before execution, while an interpreter translates one line at a time". Trình biên dịch đọc toàn bộ mã nguồn, dịch thành mã máy rồi mới cho chạy, nên lỗi cú pháp lộ ra trước khi thi hành và chương trình đã dịch chạy nhanh; trình thông dịch đọc và thực hiện từng câu lệnh ngay lúc chạy, nên linh hoạt nhưng chậm hơn. Phương án "A compiler executes code line by line, while an interpreter translates the whole program at once" đổi chỗ vai trò của hai công cụ. Phương án "A compiler does not check for errors, while an interpreter does" sai hẳn, bởi kiểm tra cú pháp và kiểu dữ liệu chính là việc trình biên dịch làm trước tiên. Phương án "A compiler continuously checks for errors line by line, while an interpreter does not, so an interpreter runs faster than a compiler" sai cả mô tả lẫn kết luận về tốc độ.
Mở trang câu hỏi này →
ADesign
BTesting
CAnalysis
DImplementation
Lời giải
Đáp án đúng: "Analysis". Pha phân tích là nơi người làm hệ thống đi hiểu miền bài toán: nghiệp vụ hiện tại diễn ra thế nào, ai tham gia, dữ liệu nào xuất hiện, hệ thống mới phải làm được những gì; kết quả là mô hình mô tả yêu cầu, chưa chứa quyết định kỹ thuật nào. Phương án "Design" đi sau, lấy mô hình yêu cầu đó làm đầu vào để quyết cấu trúc module, cấu trúc dữ liệu và thuật toán, tức chuyển từ bài toán sang giải pháp. Phương án "Testing" là pha kiểm thử, đối chiếu sản phẩm đã có với yêu cầu đã chốt nên không thể là nơi lần đầu phân tích miền bài toán. Phương án "Implementation" là pha viết mã, chỉ hiện thực những gì đã phân tích và thiết kế xong trước đó.
Mở trang câu hỏi này →
AThe user’s interaction with the system
BThe movement of data within the system
CThe relationships between entities in a database
DThe sequence of events in a process
Lời giải
Đáp án đúng: "The user’s interaction with the system". Lược đồ ca sử dụng vẽ các tác nhân bên ngoài cùng những ca sử dụng mà họ thực hiện, nên nó trả lời ai dùng hệ thống và dùng để làm gì, tức mô tả ranh giới hệ thống và các cách người dùng tương tác với nó, chưa nói gì về cấu trúc hay thuật toán bên trong. Phương án "The movement of data within the system" là việc của lược đồ luồng dữ liệu bên lối phân tích hướng thủ tục. Phương án "The relationships between entities in a database" thuộc lược đồ thực thể liên kết dùng khi thiết kế cơ sở dữ liệu. Phương án "The sequence of events in a process" gần với lược đồ tuần tự hay lược đồ hoạt động, những lược đồ mô tả diễn biến theo thời gian, khác mục đích của lược đồ ca sử dụng.
Mở trang câu hỏi này →