|
import streamlit as st |
|
import random |
|
|
|
def coupling_quiz(): |
|
questions = [ |
|
{ |
|
"question": "What is coupling in software architecture?", |
|
"options": [ |
|
"The degree of interdependence between software modules", |
|
"The organization of code within a module", |
|
"The number of classes in a project", |
|
"The speed of code execution" |
|
], |
|
"correct": 0 |
|
}, |
|
{ |
|
"question": "Which of the following is a characteristic of loose coupling?", |
|
"options": [ |
|
"High dependence between modules", |
|
"Difficulty in maintaining the system", |
|
"Modules can be easily replaced or upgraded", |
|
"Increased complexity in the system" |
|
], |
|
"correct": 2 |
|
}, |
|
{ |
|
"question": "What is a common technique to achieve loose coupling?", |
|
"options": [ |
|
"Using global variables", |
|
"Implementing tight integration between modules", |
|
"Dependency injection", |
|
"Avoiding interfaces" |
|
], |
|
"correct": 2 |
|
} |
|
] |
|
|
|
score = 0 |
|
for q in questions: |
|
st.write(q["question"]) |
|
user_answer = st.radio("Select your answer:", q["options"], key=q["question"]) |
|
if user_answer == q["options"][q["correct"]]: |
|
score += 1 |
|
|
|
st.write(f"Your score: {score}/{len(questions)}") |
|
|
|
def cohesion_quiz(): |
|
questions = [ |
|
{ |
|
"question": "What is cohesion in software architecture?", |
|
"options": [ |
|
"The degree to which elements of a module belong together", |
|
"The number of connections between different modules", |
|
"The size of individual functions in a module", |
|
"The speed of code execution within a module" |
|
], |
|
"correct": 0 |
|
}, |
|
{ |
|
"question": "Which type of cohesion is considered the strongest?", |
|
"options": [ |
|
"Logical cohesion", |
|
"Temporal cohesion", |
|
"Functional cohesion", |
|
"Coincidental cohesion" |
|
], |
|
"correct": 2 |
|
}, |
|
{ |
|
"question": "What characterizes a module with high cohesion?", |
|
"options": [ |
|
"It performs a wide variety of unrelated tasks", |
|
"It has a single, well-defined purpose", |
|
"It depends heavily on other modules", |
|
"It contains as many functions as possible" |
|
], |
|
"correct": 1 |
|
} |
|
] |
|
|
|
score = 0 |
|
for q in questions: |
|
st.write(q["question"]) |
|
user_answer = st.radio("Select your answer:", q["options"], key=q["question"]) |
|
if user_answer == q["options"][q["correct"]]: |
|
score += 1 |
|
|
|
st.write(f"Your score: {score}/{len(questions)}") |
|
|
|
def monolithic_quiz(): |
|
questions = [ |
|
{ |
|
"question": "What is a key characteristic of monolithic architecture?", |
|
"options": [ |
|
"Components are distributed across multiple servers", |
|
"Each component has its own database", |
|
"All components are part of a single, indivisible unit", |
|
"Components communicate via APIs" |
|
], |
|
"correct": 2 |
|
}, |
|
{ |
|
"question": "Which of the following is an advantage of monolithic architecture?", |
|
"options": [ |
|
"Easy to scale individual components", |
|
"Simple to develop and deploy", |
|
"Technology stack can be different for each component", |
|
"Changes only affect a single component" |
|
], |
|
"correct": 1 |
|
}, |
|
{ |
|
"question": "What is a challenge when working with large monolithic applications?", |
|
"options": [ |
|
"High network latency between components", |
|
"Difficulty in understanding and modifying the codebase", |
|
"Increased deployment time for small changes", |
|
"All of the above" |
|
], |
|
"correct": 3 |
|
} |
|
] |
|
|
|
score = 0 |
|
for q in questions: |
|
st.write(q["question"]) |
|
user_answer = st.radio("Select your answer:", q["options"], key=q["question"]) |
|
if user_answer == q["options"][q["correct"]]: |
|
score += 1 |
|
|
|
st.write(f"Your score: {score}/{len(questions)}") |
|
|