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
'on':
- 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
158 changes: 144 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,166 @@
# SE_Day1
Software Engineering Day1 Assignment
[![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode-2e0aaae1b6195c2367325f4f02e2d04e9abb55f0b24a779b69b11b9e10269abc.svg)](https://classroom.github.com/online_ide?assignment_repo_id=18327534&assignment_repo_type=AssignmentRepo)
Software Engineering Day 1 Assignment

#Part 1: Introduction to Software Engineering
**Part 1: Introduction to Software Engineering**

Explain what software engineering is and discuss its importance in the technology industry.
**What is Software Engineering and Its Importance**

Software engineering is the systematic application of engineering approaches to software development. It involves designing, developing, testing, and maintaining software systems to ensure they are reliable, scalable, and efficient. Software engineering is crucial in the technology industry because it ensures the creation of high-quality software that meets user needs, enhances productivity, and drives technological advancements.

Identify and describe at least three key milestones in the evolution of software engineering.
**Importance in the Technology Industry**

- Reliability and Efficiency – Software engineering ensures that applications function as expected under different conditions.

List and briefly explain the phases of the Software Development Life Cycle.
- Scalability – Proper engineering practices allow software to handle increasing amounts of data and users.

- Security – Secure coding techniques prevent vulnerabilities and cyberattacks.

Compare and contrast the Waterfall and Agile methodologies. Provide examples of scenarios where each would be appropriate.
- Cost-Effectiveness – Systematic development reduces maintenance costs and resource wastage.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this marked red?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is an unexpected value in the 'repository dispatch'.Im still figuring out how to fix the issue.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

- Innovation – Facilitates advancements in AI, cloud computing, IoT, and other emerging technologies.

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

**1950s-1960s**: Birth of Software Engineering

Discuss the importance of Integrated Development Environments (IDEs) and Version Control Systems (VCS) in the software development process. Give examples of each.
The term "software engineering" was first introduced in the 1968 NATO Software Engineering Conference to address the "software crisis."

Early programming was done in machine and assembly languages.

What are some common challenges faced by software engineers? Provide strategies to overcome these challenges.
The introduction of high-level programming languages like FORTRAN and COBOL improved software development.

**1970s-1980s**: Structured Programming and Waterfall Model

Explain the different types of testing (unit, integration, system, and acceptance) and their importance in software quality assurance.
The Waterfall model introduced a linear, structured approach to development.

Structured programming languages such as C and Pascal were widely adopted.

#Part 2: Introduction to AI and Prompt Engineering
The concept of software testing and quality assurance became more recognized.

**1990s-Present**: Agile, DevOps, and Cloud Computing

Define prompt engineering and discuss its importance in interacting with AI models.
Agile methodologies introduced iterative development and collaboration.

DevOps practices improved software deployment and operations.

Cloud computing and microservices architecture revolutionized software scalability.

**Phases of the Software Development Life Cycle (SDLC)**

- Requirement Analysis – Gathering and documenting functional and non-functional requirements.

- Planning – Defining the scope, timeline, and resources required for the project.

- Design – Creating system architecture, wireframes, and technical specifications.

- Implementation (Coding) – Writing and compiling the code based on design specifications.

- Testing – Conducting unit, integration, system, and acceptance testing to ensure functionality.

- Deployment – Releasing the software for production use.

- Maintenance and Support – Providing updates, bug fixes, and enhancements.

**Waterfall vs. Agile Methodologies**

Waterfall Methodology

- Follows a linear, sequential approach.

- Phases do not overlap; requirements are fixed.

- Best suited for projects with well-defined requirements (e.g., banking software, medical systems).

Agile Methodology

- Iterative and flexible; emphasizes collaboration and feedback.

- Features are developed incrementally.

- Best suited for dynamic projects with evolving requirements (e.g., mobile apps, e-commerce platforms).

**Roles in a Software Engineering Team**

**Software Developer**

- Writes, tests, and maintains software code.

- Collaborates with other team members to develop features.

**Quality Assurance Engineer**

- Conducts manual and automated testing.

- Ensures the software meets quality standards before deployment.

**Project Manager**

- Oversees project planning, execution, and delivery.

- Manages timelines, resources, and stakeholder communication.

**Importance of IDEs and VCS**

- Integrated Development Environments (IDEs)

- Provide tools for coding, debugging, and testing.

Examples: Visual Studio Code, IntelliJ IDEA, Eclipse.

Version Control Systems (VCS)

Track code changes, facilitate collaboration.

Examples: Git, GitHub, GitLab.

**Common Challenges Faced by Software Engineers & Solutions**

- Scope Creep – Use Agile methodologies and clear documentation.

- Technical Debt – Follow clean coding practices and perform code reviews.

- Security Vulnerabilities – Implement security testing and best practices.

- Performance Issues – Optimize code and conduct load testing.

**Types of Software Testing**

- Unit Testing – Tests individual functions or components (e.g., testing a login function).

- Integration Testing – Ensures modules work together (e.g., testing API calls between services).

- System Testing – Validates the entire system (e.g., testing an e-commerce checkout flow).

- Acceptance Testing – Confirms software meets user needs before deployment.



**Part 2: Introduction to AI and Prompt Engineering**

Definition and Importance of Prompt Engineering

Prompt engineering involves designing effective queries or prompts to interact efficiently with AI models. It ensures that AI outputs are relevant, precise, and contextually accurate.

Importance

- Enhances AI’s ability to generate useful responses.

- Reduces ambiguity and improves interaction quality.

- Enables better automation and decision-making.

Example of a Vague vs. Improved Prompt

- Vague Prompt: "Tell me about history."

- Improved Prompt: "Provide a detailed summary of World War II, including key battles, leaders, and outcomes."

Why the Improved Prompt is More Effective

- Specificity: Focuses on a particular historical event.

- Detail: Requests key battles, leaders, and outcomes.

- Conciseness: Ensures a well-structured and relevant response.


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.