diff --git a/README.md b/README.md index 27e113c..4e57a0b 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,118 @@ # SE-Assignment-2 -Assignment: Introduction to Software Engineering -Instructions: -Answer the following questions based on your understanding of software engineering concepts. Provide detailed explanations and examples where appropriate. -Questions: -Define Software Engineering: +1. QUESTION: Define Software Engineering -What is software engineering, and how does it differ from traditional programming? -Software Development Life Cycle (SDLC): +Answer: Software engineering is an approach to software development. It involves the process of defining, designing, developing, testing, managing and maintening software application/systems. -Explain the various phases of the Software Development Life Cycle. Provide a brief description of each phase. -Agile vs. Waterfall Models: +2. QUESTION: What is software engineering, and how does it differ from traditional programming? -Compare and contrast the Agile and Waterfall models of software development. What are the key differences, and in what scenarios might each be preferred? -Requirements Engineering: +ANSWER: Software engineering is an approach to software development. It involves the process of defining, designing, developing, testing, managing and maintening software application/systems. +Traditional programming is all about coding while software engineering follows a much more thourough process. Structured and efficient software development, which can result in higher quality software that is easier to maintain and adapt to changing requirement. This approach also helps promote better collaboration among development teams. -What is requirements engineering? Describe the process and its importance in the software development lifecycle. -Software Design Principles: +3. Explain the various phases of the Software Development Life Cycle. Provide a brief description of each phase. -Explain the concept of modularity in software design. How does it improve maintainability and scalability of software systems? -Testing in Software Engineering: +ANSWER: The various phases of the SDLC include: +- Planning and Analysis: This is the initial phase and it involes gathering business requirements and evaluation of the feasibility of the project. +- Requirement Definition: This involves the conversion of the information garthered from the planning phase into clear and precise requirements for the development team. +- Design: In this phase, software architects create a high-level design of the software solution +- Development: THis is the phase wher ethe software is built. +- Testing: THis is the phase where the developed software is tested for bugs. +- Deployment: After testing and bugs have been fixed, the software solution is deployed to the production environent. +- Maintenance: This is a continuous phase where users support, software improvement etc are carried out. -Describe the different levels of software testing (unit testing, integration testing, system testing, acceptance testing). Why is testing crucial in software development? -Version Control Systems: +4. Compare and contrast the Agile and Waterfall models of software development. What are the key differences, and in what scenarios might each be preferred? -What are version control systems, and why are they important in software development? Give examples of popular version control systems and their features. -Software Project Management: +ANSWER: +Agile Model VS Waterfall models +- Agile model emphasizes continuous stakeholder involvement throughout the development phase. Waterfall model is best implemented when all project requirements are well understood and unlikely to change. +- Agile breaks down the project into small increments that are iteratevly developed and delivered. -Discuss the role of a software project manager. What are some key responsibilities and challenges faced in managing software projects? -Software Maintenance: +Key Differences: With Agile model, risks are mitigated continuosly, but Waterfall model address risks at a specific stage +Agile is more adaptable to change, whereas Waterfall model is more regid. -Define software maintenance and explain the different types of maintenance activities. Why is maintenance an essential part of the software lifecycle? -Ethical Considerations in Software Engineering: +Scenario where each might: +Agile Model would be preferred where requirements are expected to evolve. +Waterfall Model would be preferred for projects with well-defined requirements that are unlikely to change. -What are some ethical issues that software engineers might face? How can software engineers ensure they adhere to ethical standards in their work? -Submission Guidelines: -Your answers should be well-structured, concise, and to the point. -Provide real-world examples or case studies wherever possible. -Cite any references or sources you use in your answers. -Submit your completed assignment by [due date]. +5. What is requirements engineering? Describe the process and its importance in the software development lifecycle. + +ANSWER: +Requirements Engineering is the process of defining, documenting, and maintaining requirements within the engineering design process. + +The process includes; +- Requirement Elicitation: THis is the gathering of informationfrom stakeholders to understand their needs. +- Requirement Analysis: This is the identifying od potential confilcts and issues among requirementand resolving them. +- System modeling: This is the creating of abstract models of the system to understand and refine the requirement +- Requirement Specification: This involves documenting the requirements in detail +- Requirements Validation: This involves ensuring the documented requirements accurateky reflect stakeholder's needs. + +Requirement Engineering is important in the software development life cycle as it guarantees that the final software is developed according to user needs and feasible enough to develop within budget and time limits. It also contributes to reducing changes during a development process, saving time and resources. + +6. Explain the concept of modularity in software design. How does it improve maintainability and scalability of software systems? + +ANSWER: +Modularity is simply the software components that are created by dividing the software. The software is divided into various components that work together to form a single functioning item. + +This approach reduces complexity and allows for simultaneous development. Modules are designed to be independent, which means they can be developed, tested in isolation. Being isolated, modular design lesens the maintenance issues, since changes in one module does not affect the others. In addition, the modularity helps in creating a more scalable system which permits the inclusion of new features, but as different modules without needing of redesigning the complete system. + +7. Describe the different levels of software testing (unit testing, integration testing, system testing, acceptance testing). Why is testing crucial in software development? + +ANSWER: +- Unit Testing: The is the most basic type of testing. It aims at validating each part of the software performs as designed. + +- Integration Testing: The aim here is to test different parts of the system in combination in order to assess that they all work correctly together. + +- System Testing: This involves the testing of the complete components of the software to ensure that it meets the specifiedrequirements. + +- Acceptance Testing: This is the final level of testing. it is when the product is given the green light or not. + +Testing is crucial in software development as it helps identify bugs early in the development cycle. It also improves the reliability and quality of the software, which therefore reult in increased user satisfaction. + +8. What are version control systems, and why are they important in software development? Give examples of popular version control systems and their features. + +ANSWER: +Version Control Systems are tools that help manage changes to source code over time. They track every modification to the code in a dynamic database, allowing developers to recall earlier versions if needed. +They are important because they enable developers work on the same codebase simultaneously withut confilcts. They also supports branching and merging, which lets teams work on features or fixes in isolation before integrating them into the main codebase. + +Examples: GIT, BitBucket. + +9. Discuss the role of a software project manager. What are some key responsibilities and challenges faced in managing software projects? + +ANSWER: +A software project manager is responsible for overseeing the project from conception to delivery, ensuring that it meets all the requirements, is completed on time, and stays within budget. +Key responsibilities: +- Project Planning +- Team Management +- Quality Assuarance + +Challenges: +- Time Management +- Resource allocation +- Managing and Aligning stakeholders expectations + +10. Define software maintenance and explain the different types of maintenance activities. Why is maintenance an essential part of the software lifecycle? + +ANSWER: +Software maintenance is the process of modifying and updating software after its initial release to correct faults, improve performance, adapt to a changing environment. + +Types: +- Corrective Maintenance: This involves fixing bugs and defects found in the software after deployment. +- Adaptive Maintenance: This involes modifying the software to work in a new or changed environment, such as updating it to be compatible with new operating systems or hardware. +- Perfective Maintenance: This nvoles enhancing the functionality and performance of the software to improve user experience. +- Preventive Maintenance: THis involes updating the software to prevent future problems, often based on feedback and foresight. + +Maintenance is essential because it prolongs the life of software, ensures it remains secure, functional, and relevant to user needs, and adapts to the evolving technological landscape. + +11. What are some ethical issues that software engineers might face? How can software engineers ensure they adhere to ethical standards in their work? + +- Weak security and PII protection +- Prioritizing features over impact + +Software engineers shold adhere to ethical standards by developing softwares that benefits users without causing harm. Also, transparency in algortihm and sat usage must be maintained. + +References: +https://www.geeksforgeeks.org/version-control-systems/ +https://en.wikipedia.org/wiki/Requirements_engineering +https://www.techtarget.com/searchsoftwarequality/tip/5-examples-of-ethical-issues-in-software-development +https://www.bingwiki.com/wiki/Engineering_Model +Co-pilot