Skip to content

Powerlearnproject/se-assignment-2-introduction-to-software-engineering-mordecaimana

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Review Assignment Due Date Open in Visual Studio Code

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:

Software Engineering is the process of designing, developing, testing, and maintaining software. It is a systematic and disciplined approach to software development that aims to create high-quality, reliable, and maintainable software.

What is software engineering, and how does it differ from traditional programming? Software Development Life Cycle (SDLC): Software development is the broader process of creating software, while software engineering emphasizes systematic, disciplined, and quantifiable approaches to software development. The software development life cycle (SDLC):- The SDLC is a structured process for planning, creating, testing, deploying, and maintaining software.

Explain the various phases of the Software Development Life Cycle. Provide a brief description of each phase. The phases of the Software Development Life Cycle (SDLC) includes:

  • Planning & Analysis: This is a way or method of Gathering business requirements from the client or stakeholders.
  • Define Requirements: it is a way of Converting the information gathered into clear requirements for the development team.
  • Design: A way of Creating the software architecture and design specifications.
  • Development: Writing the code and implementing the functionality.
  • Testing: Verifying the quality and functionality of the software.

Agile vs. Waterfall Models: Agile Software Development:- Agile Software Development is the software development process used to design complicated software. It is used when the software is quite sensitive and complicated. It is used when security is much more important. It is used by professionals to develop the software. It consists of three phases.

WHILE Waterfall Models: The waterfall model is a breakdown of development activities into linear sequential phases, meaning they are passed down onto each other, where each phase depends on the deliverables of the previous one and corresponds to a specialization of tasks.The approach is typical for certain areas of engineering design. In software development, it tends to be among the less iterative and flexible approaches, as progress flows in largely one direction (downwards like a waterfall) through the phases of conception, initiation, analysis, design, construction, testing, deployment and maintenance. The waterfall model is the earliest SDLC approach that was used in software development

Compare and contrast the Agile and Waterfall models of software development. What are the key differences, and in what scenarios might each be preferred?

  • Comparision The major comparision between agile and waterwall is that both Agile and Waterfall are both popular collaborative project management methodologies, so both software models can be used for the same purpose depending on the need of the user at that very moment in time.

  • Differences: Agile is flexible and iterative, emphasizing continuous feedback and adaptation. Waterfall is sequential and rigid, with distinct phases completed in order. Agile promotes ongoing collaboration, while Waterfall focuses on thorough planning and execution in predetermined stages

  • Ways to help you identify choosing between Agile and Waterfall Model: When deciding between Agile and Waterfall, consider the specific needs and characteristics of your project and its needs. For example, Agile is ideal for dynamic environments and continuous improvement initiatives, while Waterfall is preferable for projects with well-defined requirements and strict deadlines. Each methodology offers predictability but may struggle with accommodating changes late in the development cycle.

Requirements Engineering: Requirements engineering (RE) is the process of defining, documenting, and maintaining requirements in the engineering design process1. It is a common role in systems engineering and software engineering

What is requirements engineering? Describe the process and its importance in the software development lifecycle.

  • A systematic and strict approach to the definition, creation, and verification of requirements for a software system is known as requirements engineering. To guarantee the effective creation of a software product, the requirements engineering process entails several tasks that help in understanding, recording, and managing the demands of stakeholders

  • Process and importance of Requirement Engineering SDLC The process of RE (Requirement Engineering) can be listed into the following:

    • Feasibility Study: The feasibility study mainly concentrates on below five mentioned areas below. Among these Economic Feasibility Study is the most important part of the feasibility analysis and the Legal Feasibility Study is less considered feasibility analysis.

    • Requirements elicitation: It is related to the various ways used to gain knowledge about the project domain and requirements. The various sources of domain knowledge include customers, business manuals, the existing software of the same type, standards, and other stakeholders of the project. The techniques used for requirements elicitation include interviews, brainstorming, task analysis, Delphi technique, prototyping, etc

    • Requirements specification This activity is used to produce formal software requirement models. All the requirements including the functional as well as the non-functional requirements and the constraints are specified by these models in totality. During specification, more knowledge about the problem may be required which can again trigger the elicitation process. The models used at this stage include ER diagrams, data flow diagrams(DFDs), function decomposition diagrams(FDDs), data dictionaries

    • Requirements for verification and validation: Verification: It refers to the set of tasks that ensures that the software correctly implements a specific function. Validation: It refers to a different set of tasks that ensures that the software that has been built is traceable to customer requirements. If requirements are not validated, errors in the requirement definitions would propagate to the successive stages resulting in a lot of modification and rework.

      • Requirements management: Requirement management is the process of analyzing, documenting, tracking, prioritizing, and agreeing on the requirement and controlling the communication with relevant stakeholders. This stage takes care of the changing nature of requirements. It should be ensured that the SRS is as modifiable as possible to incorporate changes in requirements specified by the end users at later stages too. Modifying the software as per requirements in a systematic and controlled manner is an extremely important part of the requirements engineering process.

Software Design Principles: Design means to draw or plan something to show the look, functions and working of it. Software Design is also a process to plan or convert the software requirements into a step that are needed to be carried out to develop a software system. There are several principles that are used to organize and arrange the structural components of Software design. Software Designs in which these principles are applied affect the content and the working process of the software from the beginning

Explain the concept of modularity in software design. How does it improve maintainability and scalability of software systems?

  • Modularity in Software Designs Modular design, or modularity in design, is a design principle that subdivides a system into smaller parts called modules, which can be independently created, modified, replaced, or exchanged.
  • Improvement software design principles has help improve software systems in the following ways:
  • Breaks down systems into smaller, independent modules.
  • Improves flexibility, reusability, and scalability.
  • Leads to more robust and maintainable systems.
  • Allows managing, updating, and scaling parts of the application independently

Testing in Software Engineering: Software testing can be stated as the process of verifying and validating whether a software or application is bug-free, meets the technical requirements as guided by its design and development, and meets the user requirements effectively and efficiently by handling all the exceptional and boundary cases.

Describe the different levels of software testing (unit testing, integration testing, system testing, acceptance testing). Why is testing crucial in software development?

The different levels of software testing are as follows:

  • Unit Testing: Focuses on individual components (methods, functions).
  • Integration Testing: Checks if components work together properly.
  • System Testing: Tests the entire system as a whole.
  • Acceptance Testing: Ensures the software meets user requirements

why testing is crucial in software development> Software testing is important because if there are any bugs or errors in the software, they can be identified early and fixed before the software product is delivered. A properly tested software product ensures dependability, security, and high performance, which leads to time savings, cost effectiveness, and customer satisfaction

Version Control Systems:

  • Version control systems are a category of software tools that helps in recording changes made to files by keeping a track of modifications done in the code.

What are version control systems, and why are they important in software development? Give examples of popular version control systems and their features.

  • Why Version Control system is so Important?

As we know that a software product is developed in collaboration by a group of developers they might be located at different locations and each one of them contributes to some specific kind of functionality/features. So in order to contribute to the product, they made modifications to the source code(either by adding or removing). A version control system is a kind of software that helps the developer team to efficiently communicate and manage(track) all the changes that have been made to the source code along with the information like who made and what changes have been made. A separate branch is created for every contributor who made the changes and the changes aren’t merged into the original source code unless all are analyzed as soon as the changes are green signaled they merged to the main source code. It not only keeps source code organized but also improves productivity by making the development process smooth. Basically Version control system keeps track on changes made on a particular software and take a snapshot of every modification. Let’s suppose if a team of developer add some new functionalities in an application and the updated version is not working properly so as the version control system keeps track of our work so with the help of version control system we can omit the new changes and continue with the previous version.

examples of popular version control system Git, SVN, and Mercurial are just a few examples of the many version control systems available. Each system has its own strengths and weaknesses, so it's important to choose the one that best suits your needs and the requirements of your project.

Software Project Management:

  • Software development is the broader process of creating software, while software engineering emphasizes systematic, disciplined, and quantifiable approaches to software development. What is the software development life cycle (SDLC)? The SDLC is a structured process for planning, creating, testing, deploying, and maintaining software.

Discuss the role of a software project manager. What are some key responsibilities and challenges faced in managing software projects? Role of a software Manager The role of a software project manager includes the following responsibilities, to mention few among many:

  • Preparing project proposals and discussing potential projects with clients and stakeholders
  • Facilitating project initiation by defining project scope and requirements, and preparing the necessary documents and requirements
  • Developing project plans and timelines to ensure the timely submission of project deliverables
  • Managing project budgets and resources to ensure the timely completion of milestones
  • Planning out the blueprints for software projects, including defining the scope, allocating resources, setting deadlines, laying out communication strategies, and indicating tests and maintenance
  • Assembling and leading the project team
  • Participating in and supervising each stage of the project Key responsibilities and challenges faced while managing software projects> Challenges
    • Unclear and undefined expectations Defining goals is crucial for a successful project. However, sometimes the project managers might fail to gather requirements clearly from the clients, which further complicates the progress. The expectations and objectives become ambiguous, and the output deviates from the actual results. The time and resources you spent will be for nothing. More than that, it will affect your image and reputation in the market. Moreover, if the goals are unclear and unrealistic, project delay is one thing, but it will double your cost, clients’ quality and expectations will not meet, demotivate your whole team, etc.
  • Time constraint “Less time, more work.” is typical in the software development process. But what makes this a common challenge is the unrealistic deadlines from the clients sometimes, which leads to a race against time. As a result, it affects the quality of the software. Because of high competition and changing technology, it has become even more challenging for the development team and the project managers to cope with tight deadlines.
    • Changing project requirements and priorities One of the substantial challenges in software project management is changing requirements and priorities. The needs of the clients may change as the project progresses. And when that happens, extra time, cost, and resources need to be allocated, which further impacts the project.
    • Poor communication Poor communication with clients, other stakeholders, and the development team affects the overall project. First, miscommunication with clients will prevent getting the requirements, which will complicate the working process. Second, it will create conflicts within the team. If members don’t communicate with each other, then the roles and responsibilities will overlap with each other.

Responsiblities

  • Check and Balance (Highly well informed) It is the responsibility of the project managers to gather information from the clients, know their needs and requirements, and let the team understand what needs to be done and how to do it. Regular meetings with clients and team members, documentation, and the use of software project management tools will solve this problem.
  • High Level of information flow The information flows through the project managers. So, they need to communicate with every team member and client to make a project successful.
  • Sticking to Project requirement The project managers need to adopt a project methodology that fets the project. Even if the requirements change, this approach helps the team manage the project efficiently and implement the new priorities quickly and easily

Software Maintenance: Software Maintenance refers to the process of modifying and updating a software system after it has been delivered to the customer. It is a critical part of the software development life cycle (SDLC) and is necessary to ensure that the software continues to meet the needs of the users over time.

Define software maintenance and explain the different types of maintenance activities. Why is maintenance an essential part of the software lifecycle? Types of maintenance activities Several Types of Software Maintenance

  • Corrective Maintenance: This involves fixing errors and bugs in the software system.
  • Patching: It is an emergency fix implemented mainly due to pressure from management. Patching is done for corrective maintenance but it gives rise to unforeseen future errors due to lack of proper impact analysis.
  • Adaptive Maintenance: This involves modifying the software system to adapt it to changes in the environment, such as changes in hardware or software, government policies, and business rules.
  • Perfective Maintenance: This involves improving functionality, performance, and reliability, and restructuring the software system to improve changeability.
  • Preventive Maintenance: This involves taking measures to prevent future problems, such as optimization, updating documentation, reviewing and testing the system, and implementing preventive measures such as backups.

Importance of maintenance in software lifecycle Software Maintenance must be performed in order to:

  • Correct faults.
  • Improve the design.
  • Implement enhancements.
  • Interface with other systems.
  • Accommodate programs so that different hardware, software, system features, and telecommunications facilities can be used.
  • Migrate legacy software.
  • Retire software.
  • Requirement of user changes.
  • Run the code fast

Ethical Considerations in Software Engineering:

What are some ethical issues that software engineers might face? How can software engineers ensure they adhere to ethical standards in their work? Ethical issues software engineers faces

  • Algorithmic bias You need to remember that computers lack morality! Bias can unintentionally enter systems when it’s not taken into consideration. For example, Google was recently criticized for perpetuating systemic racism when it was discovered that their image processing technology couldn’t accurately represent black and brown skin tones in photos. When creating a product using existing data, software engineers need to be intentional about their work and ask themselves important questions like, “How was this information collected and what assumptions did the collector have?”. Companies and senior-level employees can also work to solve algorithmic bias by nurturing a culture that encourages employees to speak up if they believe a software feature is problematic.

  • Personal data collection We all know that some software can profile users with a terrifying level of accuracy. One major ethical dilemma in software engineering is how data is collected and managed. Many businesses generate revenues by sharing user data unethically. Companies can combat malpractice by making it easy for engineers to come forward with concerns when necessary, without fear of repercussion. Software engineers should also be provided access to the context of each task so they develop a good understanding of how the software will be used.

  • Weak security protection Security isn’t always taken as seriously as it should be. Hackers can cause lasting damage to real people and companies. Sadly, organizations often prioritize quick development over security and take reactionary measures to address ongoing security challenges. Software engineers should address security during development and after code release, rather than focusing strictly on getting the product to market. Once the product has launched, companies need to continue to make security a top priority. -Negative relationship between feature and impact Just because you can implement a new feature doesn’t mean you should! Some software engineering teams spend too much time developing new features and updating product capabilities, and not enough time tailoring their existing features to make them safe and reliable. The sad truth is that ethics often take a backseat when this occurs. Businesses need to set the tone for the quality of their products and services and strive to reflect these priorities throughout a software’s lifecycle. How can software engineers ensure they adhere to ethical standards in their work Software engineers can ensure they adhere to ethical standards in their work by following these guidelines:

  • Adhere to Professional Codes: The ACM Code of Ethics and Professional Conduct outlines several general moral imperatives and professional responsibilities that software engineers should follow. These include contributing to society and human well-being, avoiding harm to others, being honest and trustworthy, striving for excellence, maintaining confidentiality, respecting intellectual property, and leading by example. The IEEE Code of Ethics for Software Engineers emphasizes the importance of acting consistently with the public interest, promoting public knowledge, and advancing the integrity and reputation of the profession.

  • Understand Ethical Dilemmas: Software engineers should be aware of the ethical dilemmas they may face, such as algorithmic bias, personal data collection, weak security protection, and negative relationships between features and impact. They should be prepared to navigate these dilemmas by considering the potential consequences of their actions and decisions.

  • Maintain Confidentiality and Respect Intellectual Property>: Software engineers should maintain confidentiality and respect the privacy of their clients and users, protecting sensitive information they handle. They should also recognize and credit the work of others, avoiding plagiarism and unauthorized use of software.

    • Strive for Excellence and Continuous Improvement: Software engineers should aim to produce high-quality work and continuously improve their skills and knowledge. They should ensure that their products and related modifications meet the highest professional standards possible.
  • Lead by Example and Promote Ethical Behavior: Leaders in the field should model ethical behavior and promote a culture of ethical decision-making within their teams. They should also subscribe to and promote an ethical approach to the management of software development and maintenance.

    • Participate in Lifelong Learning and Professional Development: Software engineers should participate in lifelong learning regarding the practice of their profession and promote an ethical approach to the practice of the profession.

By following these guidelines, software engineers can ensure they adhere to ethical standards in their work, contributing to the development of high-quality software that benefits society and respects user privacy

Refrences

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].

About

se-assignment-2-introduction-to-software-engineering-mordecaimana created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published