Skip to content
This repository was archived by the owner on Apr 10, 2026. It is now read-only.

Powerlearnproject/se-day1-assignment-kelvinwaringa

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 

Repository files navigation

Open in Visual Studio Code

SE_Day

Software Engineering Day1 Assignment

#Part 1: Introduction to Software Engineering

Explain what software engineering is and discuss its importance in the technology industry. The systematic application of scientific and technological knowledge, methods to design construction verification validation & management. It is about a systematic, disciplined, quantifiable approach to the development of software which makes sure that it works and does what you want but also that its reliable (does not crash) and efficient (use as few resources from your computer CPU etc or time), maintainable. It Powers innovation and development new software solutions solving complex sotware problems by understanding the users need. I also have a strong interest in code ethics and the role software engineering has for quality, security and ethical use of technology.

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

  1. Machine Learning and Artificial Intelligence: Machine learning (ML)and artificial intelligence(AI)-based system are widelyused in last decade for a variety of software engineering tasks such as code analysis,semantic understanding or testing. Automation of any software process will improve the maintainability without losing quality. Although AI and ML have raised a set of new challenges, it has also led to frameworks being more tailored towards these technologies.
  2. The Agile Manifesto (A New way for Software Development in 2001) : In the year of 2001, The typical agile gave a new method to software development that encouraged collaboration, flexibility & adaptability. The manifesto states that in agile development, it is more about individuals and interactions over processes and tools, and working software rather than comprehensive documentation.
  3. The Release of the ISO/IEC 25010 Software Quality Model in 2011: The ISO/IEC 25010 model established a standardized framework for assessing the quality of software products and services. The model provides a set of criteria and metrics that can be used to evaluate the quality of software systems, helping organizations to make informed decisions about their software investments.

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

  1. Requirements Gathering and Analysis: This phase involves understanding the needs and expectations of the end-users, stakeholders, and customers. The goal is to identify and document the software requirements, which will serve as the foundation for the entire development process.
  2. Design: In this phase, the software architects and designers create a blueprint for the software application. They define the system architecture, user interface, and data structures. The design phase also includes creating wireframes, mockups, and prototypes to visualize the software's look and feel.
  3. Implementation/Development: This phase involves writing, testing, and debugging the code. The development team follows the design blueprint to create the software application. They use programming languages, frameworks, and tools to build the software.
  4. Testing: The testing phase involves validating the software's functionality, performance, and security. Testers use various techniques, such as unit testing, integration testing, system testing, and acceptance testing, to ensure that the software meets the requirements and is free from defects.
  5. Deployment: In this phase, the software is released to the production environment. The deployment team ensures that the software is installed and configured correctly on the target platform. They also monitor the software's performance and address any issues that arise during the deployment process.
  6. Maintenance and Support: This phase involves providing ongoing support and maintenance for the software application. The maintenance team addresses any bugs, issues, or enhancements that are reported by the end-users. They also perform regular updates and upgrades to ensure that the software remains secure and up-to-date.

Compare and contrast the Waterfall and Agile methodologies. Provide examples of scenarios where each would be appropriate.

The Waterfall methodology is a linear, step-by-step method for building software where each phase must be finalized before subsequent phases can begin. It has a strict hierarchy, documentations up to the sky and is loaded with planning / control. Waterfall model fits better in a situation with strict requirements and scope of work, also if risks are minimum. Some example circumstances where the Waterfall methodology would be suitable:

  1. Government-subsidized, high-cost projects with extensive rules and regulations.
  2. Software applications that are expected to have relatively little revision in their architecture as they pass through iterations of being worked on.
  3. Projects with a sustainable business model which make sense and can be developed quickly.

On the other hand, Agile is an iterative and incremental software development approach where requirements in solutions evolve through collaboration among self-organizing cross-functional teams. The process is optimized around collaboration, flexibility and adaptability. Agile Methods are best for the projects with changing requirements, unclear specification and high degree of uncertainty. Appropriate applications for the Agile methodology would be: ·

  1. Software applications which needs good prototyping and frequent updates.
  2. High Growth Startups & Small to Mid-size Business that need to move fast when the market changes.
  3. Initiatives with numerous participants involving a high degreed of partnership.

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

The Software Developer is in charge of creating new applications or improving the functionality and features of existing software programs. They communicate effectively with other team members (such as designers and product/project managers) to explain timestamp needs from projects, so they can write the code accordingly. They take perfect care of writing efficient, maintainable and correct code. QA Engineer (Quality Assurance Engineer) — tests and validates the software application to conform with a certain standard of behavior. QA engineers employ different strategies like unit testing, integration testing, system testing and acceptance test to locate the bugs in software application. They also work side-by-side with fellow team members like developers and project managers to prioritize and coordinate the testing process. A project manager caters to the complete software development process by planning and coordination of deployment while monitoring its progress. These PMOs are overseen by project managers who monitor the course of projects, allocate resources efficiently and communicate with stakeholders. They also work with the other team members like developers, QA engineers and designers etc. to make sure that project fulfills it's desired goals and requirements as needed. Summary: Software Developer: Develops, designs and test software applications by utilizing other team members to help understand what the project should include down to how it will function in code. Quality Assurance Engineer tests and validates the software applications to assure they meet specifications, functions correctly; work with other team members for prioritizing/test management. Project manager : Manages the resource, coordinate team member and make sure project run as predefined with desired goals/requirements.

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

An Integrated Development Environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. IDEs commonly include code editing, debugging and a compiler or building features. IDEs — Typically popular ones are Visual Studio, Eclipse or IntelliJ IDEA. IDEs give developers an intuitive interface and integrated tools to quickly write, test and debug their code. Version Control System (VCS) Version control systems are tools that aid in tracking changes to source code over time. VCSs keep disc for any change done over a period of time so that developers can refer the previous versions in case required. A few examples of VCSs used by developers in all business are Git, Mercurial and Subversion. It works as a multi-developer system that helps them work on the same codebase together without facing any conflicts. They also offer a single point of access for the storage, and sharing, of code facilitating ease to manage and upkeep projects.

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

  1. Time management: Software engineer work on a lot of projects at the same time,always rush and overwork it for burnout. In order to mitigate this obstacle, they can plan their work and set smaller goals/achievable deadlines for themselves. There are also time management methods, like the Pomodoro Technique.

  2. Software Projects in Transition: Code still needs to be written, yet engineers have introduced additional bugs or design flaws that result from projects being developed on the fly. The result of this technical dept will translate to more development time and poor code quality. Engineers can mitigate this by refactoring, reviewing the code and using continuous integration which are very known practices to reduce technical debt.

  3. Communication Skills: Communication is the key to success for a software engineering team. An engineer must have the ability to articulate his ideas clearly, comprehend and respect others point of view and apply keen cooperation. Engineers improve their communication skills by actively listening, asking open ended questions and speaking in clear succinct language.

Explain the different types of testing (unit, integration, system, and acceptance) and their importance in software quality assurance.

Unit Testing: Unit testing is a software testing method by which individual units of source code — sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures — are tested to determine whether they are fit for use. Catch bugs early in development They are written by devs and automated to ensure the whole pass on regular basis. The above-mentioned one of the importance to write unit tests is bug fixing, In this manner we catch bugs early and save time in development, better code. Integration Testing :Type of software testing performed to test the functionality as well as data communication accuracy between modules. It identifies the integration problem between two different parts of a software and resolves those issue before going live. Developers write integration tests and they are automated to run on a regular basis. What makes the process of integration testing so meaningful is that it saves time, and improves code quality — because such tests are designed with a view to identify and correct problems at an early stage. System Testing is the type of Software Testing where Sysytem as a whole is tested and evaluated for its compliance with Systems requirements. They help detect and resolve system-level failures to provide confidence in the correctness of the software. System tests are written by testers or created automatically. Why System Testing is necessary? It finds system-wide problems early and decreases development time, ensures higher quality of code. Acceptance testing is any type of software test having potential to determine if the system satisfies the business requirements or not. It highlights acceptance issues early and allows for them to be addressed, of course making sure that the software falls within the scope as perceived by business. Can be manually or automated.

#Part 2: Introduction to AI and Prompt Engineering

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

Prompt engineering is to design, build and enhance input prompts that will result in the AI model outputting what you want it to. It is about grasping what AI models are capable of, and where they fall short — the choosing appropriate prompts all the way to tuning these prompts towards an objective outcome. One reason why prompt engineering matters when interacting with AI models is that it controls and shapes how different AI systems behave. With well-designed prompts, users can guide generic AI models to generate desirable outputs or even be applied at abstract and challenging reasoning tasks. Prompt engineering also serves to mitigate biases in AI systems and provide guarantees of fairness, as users can control what data the system sees during training.

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 a vague prompt: "Can you generate a story about a magical adventure?" Improved prompt: "Please create a fantasy story about a young wizard named Harry who discovers a hidden portal to another world and must save the kingdom from a dark sorcerer. The story should be approximately 1,000 words long and include detailed descriptions of the magical elements, characters, and plot twists."

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors