/se-day1-assignment-franketang

software-engineering-august-2024-cohort-se_day1_assignment-SE_Day1 created by GitHub Classroom

Open in Visual Studio Code

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 discipline that designs, develops, tests, and maintains software systems to ensure that software works as specified, is adequately tested, and is ready to deploy.

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

  1. Structured Programming (1970s): provided a systematic approach to writing code, including increased readability and maintenance.
  2. Object-oriented programming (the 1980s): Structured program pieces called objects made the software reusable and adaptable.
  3. Agile Methodology (2000s): Revolutionized software development, promoting faster, iterative updates.

#2 List and briefly explain the phases of the Software Development Life Cycle. The phases of the Software Development Life Cycle (SDLC) are:             1. Planning: Define the project's goals and requirements.             2. Design: Create the software architecture and design.             3. Development: Write the actual code.             4. Testing: Verify the software works as expected.             5. Deployment: Release the software to users.             6. Maintenance: Fix bugs and update the software.

#3 Compare and contrast the Waterfall and Agile methodologies. Provide examples of scenarios where each would be appropriate. • Waterfall: an incremental process in which phases must be completed before proceeding to the next one. A good example is building a rock-solid banking system with a well-defined set of requirements that are very clear and do not change.

• Agile: An iterative and adaptive approach to development in which changes and improvements are made as development proceeds. A very good example is developing a mobile app that evolves based on user feedback.

#4 Describe the roles and responsibilities of a Software Developer, a Quality Assurance Engineer, and a Project Manager in a software engineering team. These are the roles in a software engineering team: • Software Developer: Writes and maintains code, implements features, and fixes bugs. • Quality Assurance (QA) Engineer: Tests the software to find and fix errors before release. • Project Manager: Oversees the project, ensuring it stays on schedule and meets goals.

#5 Discuss the importance of Integrated Development Environments (IDEs) and Version Control Systems (VCS) in the software development process. Give examples of each. The importance of IDEs and VCS in development is discussed as follows: • IDEs (e.g., Visual Studio, IntelliJ): This provides tools for writing and testing code efficiently. • VCS (e.g., Git): This tracks changes to code as files are modified, helping developers monitor, unify, and even reverse changes made by others.

#6 What are some common challenges faced by software engineers? Provide strategies to overcome these challenges. Some common challenges in software engineering are: • Complexity: Breaking down significant problems into smaller tasks. Strategy: Use modular design and write clear, reusable code. • Deadlines: Managing time effectively. Strategy: Use Agile methods for flexibility and regular progress checks. • Bugs: Ensuring software is error-free. Strategy: Continuous testing and code reviews.

#7Explain the different types of testing (unit, integration, system, and acceptance) and their importance in software quality assurance. • Unit Testing: This testing checks individual components of the software. • Integration Testing: This testing ensures different parts of the system work together. • System Testing: This testing verifies the entire system functions. • Acceptance Testing: This testing confirms the software meets user needs and requirements.

#Part 2: Introduction to AI and Prompt Engineering

#1 Define prompt engineering and discuss its importance in interacting with AI models. Prompt engineering is the process of crafting effective inputs (prompts) for AI models to get accurate or useful outputs. It's important because the quality of the prompt directly affects how well the AI understands and responds.

#2 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. Example of improving a vague prompt: • Vague Prompt: "Tell me about population change." • Improved Prompt: "Explain the main causes of population change and its impact on countries GDP over the next ten years."