Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added .github/.keep
Empty file.
38 changes: 38 additions & 0 deletions .github/workflows/classroom.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Autograding Tests
'off':
- push
- repository_dispatch
permissions:
checks: write
actions: read
contents: read
jobs:
run-autograding-tests:
runs-on: ubuntu-latest
if: github.actor != 'github-classroom[bot]'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Quiz 1
id: quiz-1
uses: classroom-resources/autograding-io-grader@v1
with:
test-name: Quiz 1
setup-command: ''
command: Which of the following best describes software engineering?
input: |-
a) The study of hardware components
b) The process of designing, developing, and maintaining software
c) The analysis of networking protocols
d) The management of data storage systems
expected-output: b) The process of designing, developing, and maintaining
software
comparison-method: exact
timeout: 10
max-score: 10
- name: Autograding Reporter
uses: classroom-resources/autograding-grading-reporter@v1
env:
QUIZ-1_RESULTS: "${{steps.quiz-1.outputs.result}}"
with:
runners: quiz-1
42 changes: 35 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,64 @@
[![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode-2e0aaae1b6195c2367325f4f02e2d04e9abb55f0b24a779b69b11b9e10269abc.svg)](https://classroom.github.com/online_ide?assignment_repo_id=18586050&assignment_repo_type=AssignmentRepo)
# SE_Day1

Software Engineering Day1 Assignment

#Part 1: Introduction to Software Engineering

Explain what software engineering is and discuss its importance in the technology industry.

Software engineering is the application of engineering principles to the design, development, testing, and maintenance of software systems. It is important in the technology industry because it ensures that software is reliable, scalable, and efficient, making it possible for businesses and individuals to use technology effectively.

Identify and describe at least three key milestones in the evolution of software engineering.

1. **The Birth of High-Level Programming Languages (1950s-1960s)** – Early computers were programmed using machine code. The development of languages like Fortran and COBOL made programming more accessible.
2. **The Advent of Structured Programming (1970s)** – The introduction of structured programming improved code readability and maintenance, leading to better software quality.
3. **The Rise of Agile Methodologies (2000s-present)** – Agile introduced iterative development, focusing on collaboration and adaptability, which improved software project success rates.

List and briefly explain the phases of the Software Development Life Cycle.

1. **Requirement Analysis** – Understanding the needs of users and stakeholders.
2. **Planning** – Defining project scope, timelines, and resources.
3. **Design** – Creating software architecture and technical specifications.
4. **Implementation (Coding)** – Writing the actual code based on design plans.
5. **Testing** – Ensuring the software is free from bugs and meets requirements.
6. **Deployment** – Releasing the software for use.
7. **Maintenance** – Updating and fixing issues after release

Compare and contrast the Waterfall and Agile methodologies. Provide examples of scenarios where each would be appropriate.
- **Waterfall** is a **linear** and **sequential** approach where each phase is completed before moving to the next.
- *Example:* Suitable for projects with **clearly defined requirements**, like building software for a **banking system**.

- **Agile** is an **iterative** approach where development happens in cycles (sprints).
- *Example:* Works well for **mobile app development**, where frequent updates and changes are needed.

Describe the roles and responsibilities of a Software Developer, a Quality Assurance Engineer, and a Project Manager in a software engineering team.

- **Software Developer** – Writes, tests, and maintains code for applications.
- **Quality Assurance Engineer** – Ensures software meets quality standards through testing.
- **Project Manager** – Oversees the project, ensuring deadlines, budgets, and team coordination.

Discuss the importance of Integrated Development Environments (IDEs) and Version Control Systems (VCS) in the software development process. Give examples of each.

- **IDEs** (e.g., *Visual Studio Code, IntelliJ IDEA*) provide tools like code editors, debuggers, and compilers to streamline development.
- **VCS** (e.g., *Git, SVN*) tracks changes in code, enabling collaboration and version history management.

What are some common challenges faced by software engineers? Provide strategies to overcome these challenges.

1. **Debugging Complex Code** – Use debugging tools and write clear, maintainable code.
2. **Meeting Deadlines** – Follow Agile methodologies and set realistic timelines.
3. **Keeping Up with New Technologies** – Continuously learn through courses and practice.
4. **Collaboration Issues** – Use communication tools like Slack and documentation tools like Confluence.

Explain the different types of testing (unit, integration, system, and acceptance) and their importance in software quality assurance.
- **Unit Testing** – Tests individual components or functions to ensure they work as expected.
- **Integration Testing** – Checks if different components of the system work together correctly.
- **System Testing** – Validates the entire system to ensure all requirements are met.
- **Acceptance Testing** – Ensures the software meets business needs and user expectations.


#Part 2: Introduction to AI and Prompt Engineering


Define prompt engineering and discuss its importance in interacting with AI models.

Prompt engineering is the process of designing and refining inputs to AI models to achieve more accurate and relevant outputs. It is important because well-crafted prompts help improve AI-generated responses, making interactions more effective.

Provide an example of a vague prompt and then improve it by making it clear, specific, and concise. Explain why the improved prompt is more effective.
- **Vague Prompt:** "Tell me about the weather."
- **Improved Prompt:** "What is the weather forecast for tomorrow in Nairobi?"
The improved prompt is **more effective** because it is specific, includes a location and a time frame, and clearly requests the forecast, leading to a more accurate and helpful response.
The improved prompt is more effective because it provides the necessary context, allowing the AI model to give a more precise and relevant answer.