Skip to content
Open
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
38 changes: 28 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,51 @@ 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 involves designing, developing and testing software applications and computer applications aimed at solving real life problems and make our lives easier.
Software engineering importance is seen in development of new applications and technological solutions through innovation aimed at solving problems in the society. For instance, we are able to make e-wallet transactions through well designed and maintained software applications. In addition, software engineering advancements such as Generative AI, has made it work easier for people in the technology industry as they can work on complex activities while AI and other technological solutions handles the routine fewer complex activities, for instance, testing and debugging of software applications has been made easier through Generative AI such as ChatGPT. This has improved efficiency and productivity.

Identify and describe at least three key milestones in the evolution of software engineering.
The Birth of Software Engineering took place in 1968.
Before 1968 software was written without proper planning which led to many occurrences of many errors. It was in 1968 that the first Software Engineering Conference was held by North Atlantic Treaty Organization and the term Software Engineering was introduced to treat software as a structured engineering process which introduced organization and professionalism in software development.
The Rise of Object-Oriented Programming which occurred between 1980s and 1990s.
Object Oriented Programming made software easier to manage and reuse since it was able to simplify the earlier long and complex style practiced before 1980s. Programming languages such as Java and C++ used the object-oriented approach, allowing developers to organize code into objects and making large projects easier to handle. For example, Object Oriented Programming allowed the development of a single car object in a car game and reusing it for all cars in the game.
The Growth of Agile Development which occurred between 2001 and Present day.
The agile model was an improvement of the waterfall model which was slow and rigid. The agile model, introduced in 2001 by a group of developers was more flexible and faster in software development since it focuses on small, quick updates instead of waiting for months for big releases. The agile model enables developers to respond quickly to user needs and fix problems in a faster pace thereby improving teamwork and customer satisfaction.


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


The software development Life Cycle details the various stages through which a project undergoes. The stages include;
1. Planning which involves decisions on what is to be done, targets, timelines, roles assignment, and budget set aside for the project to avoid mistakes later. For example, a bank may decide to build a banking app.
2. Design involves creating the blueprint of the software, the developers use wireframes to visualize the software. The design stage aims at ensuring that the software appeals to the user, it is user-friendly and various functionalities fit. In the bank app example, this would involve creating the app’s layout for the different elements.
3. Development, this is where coding takes place to build the software and the real product begins to come to life. The team conducts meetings to share what they are working on and their accomplishments. The tasks are broken down into smaller manageable task easy to track and work on. Build the banking app can utilize Python and other programming languages.
4. Testing. To ensure that the above code is free of errors, the testing stage sets in and developers check everything to ensure it works as required through manual and automatic testing. This would involve checking if a deposit is going through the app correctly.
5. Launching or deployment stage takes place after the developers have checked and fixed all errors. The software is uploaded on app store or organization server for users to access and use.
6. Finaly, the maintenance phase or the post-launch care occurs which involves fixing bugs and conducting updates on the software over time. This ensures the software runs smoothly and new features can be added with new technologies or as customer needs evolve.

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

Agile and Waterfall methodologies are both approaches to software development. They are however unique in how their treat various elements of the software development process. Agile, even from its name, is flexible and adapts to changes while Waterfall is rigid and requires a predictable timeline. Due to the flexible nature of the Agile methodology, it requires a high rate of customer involvement and team collaboration, documentation process are also minimal, which is contrary to Waterfall methodology which has a low customer interaction and low team collaboration as the project requires to move within set timelines, as such products develops are less customer centric than those developed through the agile methodology. The waterfall method uses are linear and sequential development method, where step A has to be completed before step B and where step can only be done after step A is complete, this is different from Agile which is Iterative and Incremental and as such feedback can be sought before a step is complete and correction incorporated. Waterfall methodologies are suitable for shorter web development tasks that do not require a lot of changes. On the other hand, Agile is suitable for larger web development tasks such as development of e-wallets that require customer feedback and collaboration with various stakeholders.

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


Within a software engineering team, the Software developer is tasked with designing, developing, testing and maintaining software. During the process he/she needs to engage other teams to ensure that the software solution meets their needs and solves the problems at hand. On the hand, the Quality Assurance Engineer ensures compliance with set compliance standards and conducts testing and validations on the software to ensure it meets the needs of the audience as well as quality standards. The Assurance Engineer through this process is required to recommend improvements on testing to ensure things are done in a right and efficient manner. in the team, there is also the project manager who is basically tasked with coming up with determining the duration of the project, the resources required in terms of labor and finances and communicate with stakeholder to ensure their needs are met. The Project Manager interacts with the quality assurance teams and software engineering teams for a seamless project flow.
Discuss the importance of Integrated Development Environments (IDEs) and Version Control Systems (VCS) in the software development process. Give examples of each.


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

Software engineers find it challenging to keep up with the rapid changes in customer demands and expectations as well as technological advancements where continuous learning is required. In addition, tight deadlines and challenge in collaboration in projects due to distance is also a challenge faced by most software engineers. Increasing cyber threats to software and data is also a challenge. To overcome these challenges software engineers, need to regularly upskill, conduct feedback surveys to better understand customer demands and expectations, and adopt automatic update of software to maintain stability and mitigate cyber-attacks respectively.

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

Unit testing involves checking individual pieces of code to see if they are working as they should for example checking if 1 + 1 gives two for example Pytest for python. By checking individual pieces of code, it becomes easy to detect bugs early and fix errors faster.
Integration testing on the other hand, checks to see if various parts of the software work together correctly. It is important in testing whether individuals working functions still work when brought together, ensuring that different modules work together seamlessly.
System testing involves checking the whole software to establish if it meets the set requirements ensuring that the software works in its entirety and stimulates real life scenarios. For example, mobile wallet that allows you to send and receive money successfully.
Acceptance testing ensures that the software satisfies the needs of the end-user by making sure it is ready for the market and any errors are corrected prior to release to the customers

#Part 2: Introduction to AI and Prompt Engineering


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

Prompt engineering is an interesting way through which we communicate with artificial intelligence models. It involves designing a set of questions and refining them to communicate get the best responses from artificial intelligence.
Interacting with AI models is important because it saves time and effort thereby enhancing efficiency. Our increased interaction with AI Models involving refined questions and commands reduces the degree of error and improves the relevance of received in their responses. Additionally, by refining each set of instructions to the AI models we are able to make them more innovative and creative in the output they provide, for instance a picture of a perfect evening on the country side.

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.
Draw a girl. This is a vague prompt. The AI will just give me a picture of any girl it can come up with. Below are some improvements.
You are an experienced designer with over ten years of experience in photography. Draw a picture of an African girl with an oval face, long blonde natural hair, brown eyes, a gap between her teeth, a perfectly shaped nose and a cleft chin. Do you understand the task? If please ask any questions for clarity. This request is more precise and will most likely resemble what I have instructed, additionally, I have the option to make improvements if the AI does not understand my question and forget my previous requests.
Providing a clear, simple and more detailed or specific instruction to the AI improves my chances of getting closer to the desired output. It also enhances the creativity of the AI model in that, now I will not be given an output of a white girl but an African girl. This improves the quality of my work and saves time.