Full Transcript

Software Engineering Fundamentals Week 1 – Part A: Introduction to Software Engineering Lecture Overview: Overall, the goal of this lecture is to provide a broad understanding of the software engineering discipline and its various components. It should also help students appreciate the chal...

Software Engineering Fundamentals Week 1 – Part A: Introduction to Software Engineering Lecture Overview: Overall, the goal of this lecture is to provide a broad understanding of the software engineering discipline and its various components. It should also help students appreciate the challenges and trade-offs involved in software development and understand the importance of following industry best practices to produce high-quality software products 1 Introduction to Software Engineering ¡ Software engineering ¡ systematic approach to developing software. ¡ combines principles from computer science and engineering practices ¡ goal is to create ¡ reliable ¡ high-quality software systems. Software engineering is a field that focuses on the systematic approach to developing software. It combines principles from computer science and practices from engineering to create reliable and high-quality software systems. In other words, software engineering brings together the theoretical and practical aspects of software development. Systematic Approach to Software Development A key characteristic of software engineering is its emphasis on a systematic approach to software development. This means that instead of ad hoc or haphazard methods, software engineering promotes the use of structured processes, methodologies, and best practices throughout the software development life cycle. By following a systematic approach, we can ensure that software projects are completed efficiently and with high quality. 2 Scope of Software Engineering ¡ Software Design: ¡ blueprint or plan for how the software system will be structured and organised ¡ the plan considers factors like functionality, modularity, scalability, and maintainability ¡ Software Development: ¡ the actual process of coding and implementing the software system based on the design ¡ developers follow best practices and coding standards ¡ developers use various programming languages, frameworks, and tools to develop the software The scope of software engineering is vast and encompasses various aspects of software development. Some of the key areas within the scope of software engineering include: Software design Software design is an integral part of software engineering. It involves creating a blueprint or plan for how the software system will be structured and organised. Design decisions consider factors such as functionality, modularity, scalability, and maintainability. Effective software design lays the foundation for building robust and flexible software systems Software Development Software development is the actual process of coding and implementing the software system based on the design specifications. It involves translating the design into executable code, following best practices and coding standards. Software developers utilise programming languages, frameworks, and tools to bring the software design to life. Note: images are just as example artefacts – they are not important themselves in terms of content they show. 3 Scope of Software Engineering ¡ Software Testing: ¡ systematic verification and validation of the software system ¡ to ensure the software meets the specified requirements and performs as expected ¡ Software Maintenance: ¡ ongoing activities to support, enhance, and modify the software system after it has been deployed, eg: ¡ bug fixes, ¡ add new features, ¡ improve performance ¡ adapt to change in environment continued.. Software Testing Software testing plays a crucial role in software engineering. It involves systematically verifying and validating the software system to ensure it meets the specified requirements and performs as expected. Testing activities range from unit testing, integration testing, system testing, to acceptance testing. Effective testing helps identify defects and ensures the quality and reliability of the software. Software Maintenance Software maintenance refers to the ongoing activities to support, enhance, and modify the software system after it has been deployed. Maintenance involves fixing bugs, adding new features, improving performance, and adapting the software to changes in the environment. Software engineers ensure the long-term usability and sustainability of the software through effective maintenance practices. 4 Scope of Software Engineering ¡ Project Management: ¡ planning, organising, and coordinating resources, timelines, and activities to successfully deliver software projects ¡ needed for entire process of software development (from beginning to end) to ensure project is: ¡ completed on time, ¡ within budget, ¡ and meets stakeholder expectations continued.. Project Management Lastly, project management is an essential part of software engineering. It involves planning, organising, and coordinating resources, timelines, and activities to successfully deliver software projects. Project managers oversee the entire software development life cycle, ensuring that projects are completed on time, within budget, and meeting stakeholder expectations. 5 Importance of Software Engineering in today's world ¡ Increasing Reliance on Software ¡ software-driven technology is prevalent in most aspects of our lives (eg, healthcare, education, banking, shopping, manufacturing/production, utilities (electricity, gas, water), transportation) ¡ we rely on software because it can provide ¡ efficiency, automation of tasks, advanced features ¡ Impact of Software Failures ¡ eg, food supply shortage, blackouts, traffic chaos, financial loss, death Increasing Reliance on Software We are witnessing an ever-increasing reliance on software in various domains and industries. From healthcare and transportation to finance and entertainment, software has become the backbone of many critical systems and processes. This reliance stems from the need for efficiency, automation, and advanced capabilities that software can provide. Impact of Software Failures However, with this increasing reliance on software comes the risk of software failures. The impact of software failures can be severe, leading to financial losses, compromised security, and even endangering lives in certain contexts. These failures highlight the importance of developing robust and reliable software systems. 6 Importance of Software Engineering in today's world ¡ Software Engineering addresses challenges in software development via methodologies, principles, and best practices to improve software success rates. ¡ These methods, principles, and practices emphasise: ¡ understanding & meeting user needs ¡ Managing Complexity via techniques ¡ requirements engineering such as ¡ user research ¡ modular design ¡ user-centric design ¡ abstraction ¡ Ensuring Quality ¡ design patterns ¡ reliability assist to simplify complex systems and ¡ availability improve maintainability ¡ accessibility ¡ security Addressing Challenges in Software Development This is where software engineering practices come into play. Software engineering provides us with methodologies, principles, and best practices that help address the challenges of software development to improve the likelihood of high-quality software systems. Meeting User Needs Software engineering practices emphasise the importance of understanding and meeting user needs. Through techniques such as requirements engineering, user research, and user-centric design, software engineers strive to develop software systems that align with user expectations and deliver value. This helps ensure that software is usable, intuitive, and meets the specific needs of its intended users. Ensuring Quality Quality is a vital aspect of software engineering. Software engineering practices focus on ensuring that software systems are of high quality, reliable, and perform as expected. Techniques such as testing, code reviews, and quality assurance processes are employed to detect and rectify defects, optimise performance, and enhance the overall user experience. Managing Complexity Software systems can become complex due to factors such as size, 7 functionality, interdependencies, and technological advancements. Managing complexity is a significant challenge in software engineering. It involves understanding, organising, and maintaining complex software systems. To address this challenge, software engineers employ techniques such as modular design, abstraction, encapsulation, and design patterns. These practices help break down complexity into manageable components, promote code reuse, and enhance maintainability. 7 Challenges of Software Development ¡ Dealing with Changing Requirements ¡ Software development often involves evolving and changing requirements throughout the project lifecycle. ¡ Accommodating changes while ensuring project scope, timeline, and budget can be challenging ¡ To address this challenge, software engineers employ techniques such as iterative and incremental development approaches, frequent communication with stakeholders, and flexible development methodologies like Agile. ¡ These practices promote adaptability, continuous feedback, and collaboration to effectively manage changing requirements Dealing with Changing Requirements Software development often involves evolving and changing requirements throughout the project lifecycle. Accommodating changes while ensuring project scope, timeline, and budget can be challenging. To address this challenge, software engineers employ techniques such as iterative and incremental development approaches, frequent communication with stakeholders, and flexible development methodologies like Agile. These practices promote adaptability, continuous feedback, and collaboration to effectively manage changing requirements. 8 Challenges of Software Development ¡ Maintaining Quality and Reliability ¡ Delivering high-quality and reliable software systems is crucial to meet user expectations. ¡ Ensuring software quality presents its own set of challenges. ¡ It involves identifying and preventing defects, testing software thoroughly, and maintaining system performance. ¡ Software engineers employ techniques such as systematic testing, code reviews, continuous integration, and monitoring to maintain quality and reliability. ¡ These practices help identify issues early, improve software robustness, and ensure a positive user experience. Maintaining Quality and Reliability Delivering high-quality and reliable software systems is crucial to meet user expectations. Ensuring software quality presents its own set of challenges. It involves identifying and preventing defects, testing software thoroughly, and maintaining system performance. Software engineers employ techniques such as systematic testing, code reviews, continuous integration, and monitoring to maintain quality and reliability. These practices help identify issues early, improve software robustness, and ensure a positive user experience. 9 Challenges of Software Development ¡ Managing Project Constraints ¡ constraints relate to time, budget, resources, and technical limitations. ¡ Balancing these constraints to deliver a successful software system is a challenge. ¡ Effective project planning, resource allocation, risk management, and prioritisation are essential techniques for managing project constraints. ¡ Software engineers work closely with project managers and stakeholders to strike a balance between project limitations and desired outcomes. Managing Project Constraints Software development projects face constraints related to time, budget, resources, and technical limitations. Balancing these constraints to deliver a successful software system is a challenge. Effective project planning, resource allocation, risk management, and prioritisation are essential techniques for managing project constraints. Software engineers work closely with project managers and stakeholders to strike a balance between project limitations and desired outcomes. 10 Challenges of Software Development ¡ Addressing These Challenges through: ¡ software engineering practices, ¡ methodologies, ¡ tools that are specifically designed to address these challenges in software development ¡ These provide a framework to manage complexity, adjust to change, maintain quality and reliability, manage constraints. ¡ Industry Best Practices and Emerging Trends Addressing These Challenges Software engineering practices, methodologies, and tools are specifically designed to address these challenges in software development. They provide a framework for managing complexity, accommodating changing requirements, maintaining quality and reliability, and managing project constraints. However, addressing these challenges goes beyond just the technical aspects. Collaboration, communication, and continuous improvement are crucial factors. Software engineers need to foster a collaborative work environment, maintain open communication with stakeholders, and embrace a culture of learning and innovation. Industry Best Practices and Emerging Trends Industry best practices, lessons learned from case studies, and emerging trends play a vital role in addressing these challenges effectively. By staying updated with industry advancements, software engineers can leverage new tools, methodologies, and techniques. They can learn from successful case studies and incorporate proven practices into their development processes. Embracing emerging trends fosters innovation and ensures that software engineering practices remain effective in addressing the ever-evolving challenges of the field. Through the adoption of software engineering practices, methodologies, and 11 tools, these challenges can be effectively addressed. Collaboration, communication, and continuous improvement are essential for success in software engineering. By embracing industry best practices, learning from case studies, and staying updated with emerging trends, software engineers can navigate these challenges and deliver high-quality software systems. 11 Software Development Life Cycle - SDLC SDLC: is a guide that provides structure to the software development process is a process model consists of several phases that assist the systematic development of software that meet user and quality requirements is typically depicted as a circle to illustrate that it is a cycle of phases the number and names of phases vary from one info source to another (we are not too concerned in SEF with the terminology used) One of the models that a software engineer uses when developing software is The software development life cycle. SDLC. The SDLC consists of several phases that provide structure and guidance to the software development process. These phases ensure that the software is developed systematically, meeting requirements and quality standards. The following slides take a closer look at each phase. 12 SDLC Phases: Elicitation Phase ¡ Understand needs and requirements of stakeholders. ¡ Goals: ¡ gather information ¡ identify user needs ¡ define scope of the software project. ¡ Deliverables typically include: ¡ requirements documents ¡ use cases ¡ user stories. The elicitation phase focuses on understanding the needs and requirements of the stakeholders. The goals of this phase are to gather information, identify user needs, and define the scope of the software project. The deliverables typically include requirements documents, use cases, and user stories. 13 SDLC Phases: Analysis and Specification Phase ¡ Gathered requirements are analysed, refined, and documented in detail. ¡ Goal: ¡ establish a clear and unambiguous understanding of the software requirements. ¡ Deliverables include ¡ functional and non-functional requirements ¡ system specifications ¡ software design documents. In the analysis and specification phase, the gathered requirements are analysed, refined, and documented in detail. This phase aims to establish a clear and unambiguous understanding of the software requirements. The deliverables include functional and non-functional requirements, system specifications, and software design documents. 14 SDLC Phases: Design Phase ¡ Translate the requirements into a technical design. ¡ Focuses on: ¡ system architecture ¡ component design ¡ database design. ¡ Deliverables include: ¡ system architecture diagrams ¡ component specifications ¡ database schemas. The design phase involves translating the requirements into a technical design that serves as a blueprint for implementation. This phase focuses on system architecture, component design, and database design. The deliverables include system architecture diagrams, component specifications, and database schemas. 15 SDLC Phases: Construction Phase ¡ Write code and implement system. ¡ Goal: ¡ Create working software system ¡ Deliverables include: ¡ executable code ¡ unit test cases ¡ code documentation. In the construction phase, the actual coding and implementation of the software system take place. This phase involves writing code, integrating components, and conducting unit testing. The deliverables include executable code, unit test cases, and code documentation. 16 SDLC Phases: Verification and Validation Phase ¡ Goal: ¡ ensure software meets requirements and performs as expected. ¡ Testing activities include: ¡ integration testing ¡ system testing ¡ user acceptance testing. ¡ Deliverables include: ¡ test plans ¡ test cases ¡ defect reports. The verification and validation phase aims to ensure that the developed software meets the specified requirements and performs as expected. This phase includes various testing activities, such as integration testing, system testing, and user acceptance testing. The deliverables include test plans, test cases, and defect reports. 17 SDLC Phases: Deployment Phase ¡ Deploy the system to production environment. ¡ Includes activities such as ¡ installation ¡ configuration ¡ training. ¡ Deliverables include: ¡ deployed software system ¡ user manuals ¡ support documentation. The deployment phase involves deploying the software system to the production environment, making it available for end-users. This phase includes activities such as installation, configuration, and training. The deliverables include the deployed software system, user manuals, and support documentation. 18 SDLC Methodologies ¡ A Methodology includes a collection of models, techniques and tools that are used to complete activities and tasks, including modeling, for every aspect of the project ¡ Provide guidelines for every facet of software system development: ¡ What to do when, why and how ¡ Specifies project planning and project management models and reporting ¡ Specifies analysis and design models to create ¡ Specifies implementation and testing techniques ¡ Specifies deployment and support techniques Each of these may vary from one methodology to another. Software developers / software engineers have applied the SDLC to software development projects in various ways, fine tuning how the SDLC best works for their organisation and/or project type. This has given rise to different methodologies being developed that address certain short-comings or issues with existing methodologies. Define methodology: series of steps/process of doing something – of concern for us is the SDLC activities/phases 19 SDLC Methodologies ¡ Number of methodologies exist for software system development ¡ Each software development methodology carries its own strengths and weaknesses. ¡ There is no good or bad methodology. ¡ Choice is the most suitable one for your software system development project requirements and your organization. Software development projects can be approached in several ways, and there is no one-size-fits-all solution. Different methodologies have emerged over the years, each offering distinct advantages and addressing specific challenges. As software engineers, understanding the range of methodologies available will empower us to make informed decisions for our projects. Each software development methodology comes with its own set of strengths and weaknesses. Some methodologies excel in handling well-defined and stable requirements, while others thrive in uncertain and rapidly evolving environments. Recognizing these characteristics will allow us to match the right methodology to our unique project needs. It's essential to recognize that there is no inherently "good" or "bad" methodology. Instead, the effectiveness of a methodology depends on how well it aligns with the specific requirements and context of a project. The key is to select the most suitable approach that aligns with our project's goals and organizational capabilities. When choosing a software development methodology, we need to consider various factors, such as the project's scope, complexity, timeline, and the level of collaboration required among stakeholders. Carefully evaluating these factors will guide us towards the methodology that best fits our project's needs. 20 With this understanding of the general landscape of software development methodologies, let's now focus on one of the earliest and most traditional approaches - the Waterfall Methodology. As we take a look at the Waterfall Methodology, keep in mind that there are other methodologies to review, each with its unique characteristics and benefits. By understanding the diversity of software development methodologies, we can make informed decisions and set ourselves up for successful software development projects. 20 SDLC Methodologies - Waterfall model The waterfall model is a sequential development process. Each phase is completed before proceeding to next phase. The Waterfall model is one of the oldest and most traditional software development process models. It originated in the 1960s and closely replicates the activities of the Software Development Life Cycle (SDLC). This approach follows a linear, sequential flow, where each phase is completed before moving on to the next. The Waterfall model is highly structured and has worked effectively for many decades, providing a clear roadmap for software development projects. Its key characteristics include a sequential flow, emphasis on documentation, and well- defined milestones at each phase. One issue: in design phase – new requirement – can’t go back. By the time customer gets to see the system is a long gap. Changes can’t be accommodated It is a predictive type methodology. https://www.quora.com/What-are-the-pros-and-cons-of-the-waterfall-and-agile- scrum-project-management-approach good read 21 Waterfall model Characteristics Advantages Limitations ¡ Sequential flow ¡ Clear and well-structured ¡ Rigidity approach ¡ Emphasis on ¡ Limited customer documentation ¡ Emphasises involvement documentation ¡ Well-defined milestones ¡ Higher risk of project ¡ Suitable for stable and failure well-understood requirements The Waterfall model is highly structured and has worked effectively for many decades, providing a clear roadmap for software development projects. Its key characteristics include a sequential flow, emphasis on documentation, and well- defined milestones at each phase. One of the advantages of the Waterfall model is its clear and well-structured approach. It allows for a systematic progression through the development process, making it easy to track progress and allocate resources accordingly. Additionally, the emphasis on documentation ensures that each phase's deliverables are well- documented, promoting traceability and aiding in future maintenance and updates. The Waterfall model is particularly suitable for projects with stable and well- understood requirements. When the requirements are unlikely to change significantly, this methodology can be effective in delivering a high-quality product within a predictable timeline. However, the Waterfall model has certain limitations that need to be considered. One notable limitation is its rigidity. Once a phase is completed, accommodating changes in requirements can be challenging. This lack of flexibility can become a problem if new requirements emerge during the design or implementation phases. Another limitation is the limited customer involvement in the early stages of development. Customer feedback is usually obtained late in the process when 22 significant development work has already been completed. This can lead to misalignment with customer expectations and potential rework. Moreover, the Waterfall model poses a higher risk of project failure due to its late testing phase. Since testing is deferred until the end, defects might go unnoticed until the later stages of development, making them more costly and time-consuming to address. To mitigate these limitations, some software development teams adopt a hybrid approach that combines elements of the Waterfall model with more iterative and incremental practices. This allows for greater adaptability to changing requirements and early customer involvement, reducing the risks associated with a purely sequential approach. 22 SDLC Methodologies - Iterative models (e.g., Spiral Model) ¡ repeating cycles of development and feedback. ¡ emphasis on: ¡ early prototyping ¡ delivering working software at end of each iteration (incremental deliveries) ¡ risk management Iterative models, such as the spiral model, offer an alternative approach to software development that involves repeating cycles of development and feedback. These models emphasize risk management and early prototyping, making them particularly suitable for projects with evolving requirements and inherent uncertainties. One of the key characteristics of iterative models is their cyclical nature. Development is divided into iterations, with each iteration building upon the previous one by adding new functionality. This incremental approach enables the delivery of working software at the end of each iteration, allowing for early user feedback and validation. Risk management is a significant aspect of iterative models. Each iteration prioritizes risk assessment and mitigation, enabling the team to identify and address potential issues early in the development process. By addressing risks incrementally, the overall project risk is significantly reduced. The iterative approach also allows for incremental delivery of the product. Unlike traditional linear models, where the final product is delivered at the end of the development process, iterative models deliver working software in increments. This enables users to experience and provide feedback on the software at an early stage, facilitating continuous improvement throughout the development process. 23 Iterative models Characteristics Advantages Limitations ¡ Cyclical nature: ¡ Early feedback ¡ Increased complexity iterations each iteration adding new ¡ Risk mitigation ¡ Time and resource functionality. management ¡ Flexibility ¡ Risk management ¡ Potential for scope creep prioritised ¡ Incremental delivery: early user feedback Advantages of Iterative Models: 1.Early Feedback: User involvement throughout the iterative process provides valuable opportunities for early feedback and validation. This ensures that the software aligns with user needs and expectations from the early stages. 2.Risk Mitigation: Iterations focus on risk assessment and mitigation, making it possible to address potential issues proactively. This proactive risk management helps prevent project delays and costly rework. 3.Flexibility: Iterative models offer greater flexibility in accommodating changes and evolving requirements. Each iteration provides an opportunity to incorporate feedback and make necessary adjustments. Limitations of Iterative Models: 1.Increased Complexity: Managing multiple iterations and evolving requirements can introduce complexity, requiring effective project management and coordination. 2.Time and Resource Management: Adequate planning and resource allocation are crucial for successful iterations. Without proper planning, teams may face challenges in meeting iteration timelines. 3.Potential for Scope Creep: Without proper control and scope management, the project's scope can expand beyond initial expectations, leading to potential scope creep. To make the most of an iterative approach, effective project management and collaboration between development teams and stakeholders are essential. Iterative 24 models promote adaptability and responsiveness to changes, making them valuable in projects where requirements are likely to evolve or are subject to uncertainties. Iterative models provide a valuable alternative to traditional linear approaches, allowing for early user feedback, proactive risk management, and flexibility in accommodating changes. By leveraging the benefits of an iterative approach and addressing its limitations, software development teams can deliver high-quality software that meets user needs and expectations effectively. 24 SDLC Methodologies - Agile Methodologies Sprint Sprint Sprint 1 2 3 ¡ Iterative and incremental development ¡ Customer/stakeholder collaboration ¡ Adaptability Agile methodologies, such as Scrum and Kanban, have become increasingly popular in the software development industry due to their ability to promote iterative development, collaboration, and adaptability. Agile methodologies are characterized by their iterative and incremental development approach. Software is developed in regular iterations, each delivering a product increment that adds value to the overall system. This iterative approach enables continuous improvement and early delivery of working software. One of the key strengths of Agile methodologies is the emphasis on customer collaboration. Throughout the development process, close collaboration with customers and stakeholders is maintained. This frequent and direct interaction allows for continuous feedback, ensuring that the developed software aligns with customer needs and expectations. Agile methodologies also excel in adaptability. The flexibility to accommodate changing requirements and priorities is a significant advantage of Agile. As projects progress and new insights emerge, Agile teams can adjust their plans and adapt accordingly, ensuring that the final product meets the most current needs of the stakeholders. 25 Agile methodologies Characteristics Advantages Limitations ¡ Iterative and incremental ¡ Higher customer ¡ Suitability for certain development satisfaction projects ¡ Close customer ¡ Adaptability to change ¡ Resource allocation collaboration ¡ Enhanced team ¡ Learning curve ¡ Adaptability collaboration Advantages of Agile Methodologies: 1.Customer Satisfaction: Continuous customer involvement and regular feedback lead to higher customer satisfaction. By involving customers in the development process, Agile teams can prioritize features and make improvements that truly add value to the end-users. 2.Adaptability to Change: Agile's focus on flexibility allows teams to respond quickly to changing market conditions, emerging technologies, and evolving customer needs. This adaptability ensures that the product remains relevant and competitive throughout its development. 3.Enhanced Team Collaboration: Agile methodologies promote self-organizing teams that collaborate closely. This emphasis on teamwork and communication fosters a sense of ownership and accountability among team members, resulting in improved project outcomes. Limitations of Agile Methodologies: 1.Suitability for Certain Projects: Agile may not be the best fit for projects with well- defined and stable requirements. In such cases, where the project scope is unlikely to change significantly, a more predictive methodology like the Waterfall model might be more suitable. 2.Resource Allocation: Agile methodologies require dedicated resources, including time and effort from both the development team and stakeholders. Continuous customer involvement and collaboration demand a commitment of resources to 26 ensure project success. 3. Learning Curve: Adopting Agile methodologies may involve a learning curve, especially for teams new to Agile practices. Successfully implementing Agile requires a mindset shift and a commitment to embracing Agile principles and practices. Agile methodologies offer valuable benefits in terms of customer satisfaction, adaptability, and team collaboration. However, it's essential to carefully assess project requirements, complexity, and organizational context to determine the most suitable software development model. By understanding the characteristics, advantages, and limitations of different methodologies, software development teams can make informed decisions and tailor their approach to deliver successful and high-quality products. 26 Agile SCRUM Scrum is an iterative and incremental agile software development framework for managing product development. Scrum adopts an empirical approach, accepting that the problem cannot be fully understood or defined, focusing instead on maximising the team's ability to deliver quickly and respond to emerging requirements https://youtu.be/XU0llRltyFM Intro to Scrum in Under 10 Minutes https://www.youtube.com/watch?v=XU0llRltyFM Watch video to 7:37 27 There is no perfect methodology Organisations will choose the methodology they wish to deliver a software system by assessing their organisation and requirements and deciding which methodology aligns to the core outcomes they wish to meet within any constraints (if any) they may have. Sometimes getting to market first is more Sometimes budget is the most important important than any budgetary constraints constraint, and a minimum viable product on the project. is the key driver. Methodology to be chosen that suits the organisation 28 What Are Software Requirements? ¡ Describes what a software system ¡ should do ¡ how it should behave ¡ features it should possess. ¡ Requirements ensure a shared understanding of the desired software system ¡ communicates between stakeholders and software developers ¡ Main requirement types: ¡ Functional ¡ Non-Functional We’ve used the term requirements a lot in the previous discussion. Software requirements are descriptions of what a software system should do, how it should behave, and what features it should possess. Requirements serve as a communication bridge between stakeholders and software developers, ensuring that everyone has a shared understanding of the desired software system. 29 What Are Software Requirements? Functional Non-Functional ¡ Specify the desired behavior ¡ Define the quality attributes and and features of the software constraints of the software system. system. ¡ how well the software system should ¡ what tasks or functions perform in terms of the software should be ¡ reliability able to perform. ¡ performance Examples: ¡ eg, user authentication, response time ¡ security system availability data input and output, calculations, and data ¡ usability data privacy processing. ¡ maintainability. user interface design software scalability Functional requirements specify the desired behavior and features of the software system. These requirements define what tasks or functions the software should be able to perform. They answer questions like "What can the software do?" and "What features should it have?" Examples of functional requirements include user authentication, data input and output, calculations, and data processing. Non-functional requirements define the quality attributes and constraints of the software system. They specify how well the software system should perform in terms of reliability, performance, security, usability, and maintainability. Examples of non-functional requirements include response time, system availability, data privacy, user interface design, and software scalability. 30 Other Types of Requirements ¡ User Requirements ¡ needs, preferences, and expectations of end-user/stakeholders ¡ System Requirements ¡ hardware, software, network, and other technical requirements necessary for the software to operate effectively ¡ Business Requirements ¡ goals, objectives, and constraints from a business or organisational perspective ¡ eg, cost constraints, market demands, regulatory compliance In addition to functional and non-functional requirements, there are other types of requirements that play a role in shaping the software system. User requirements focus on the needs, preferences, and expectations of the end-users or stakeholders who will interact with the software system. These requirements capture the user's perspective and help ensure that the software system meets their specific needs. User requirements might include ease of use, specific functionalities, or user interface preferences. System requirements specify the environment and infrastructure needed to support the software system. They define the hardware, software, network, and other technical requirements necessary for the software to operate effectively. System requirements might include the operating system, memory, processor, and network bandwidth. Business requirements capture the goals, objectives, and constraints from a business or organisational perspective. They address how the software system aligns with the overall business strategy and objectives. Business requirements might include cost constraints, market demands, regulatory compliance, or business process improvements. Software requirements are essential for defining what a software system 31 should accomplish. Functional requirements specify the desired behavior and features, while non-functional requirements define the quality attributes. User requirements, system requirements, and business requirements provide additional context and considerations. By understanding and properly documenting these requirements, software developers can build software systems that meet the needs and expectations of stakeholders. 31 Stakeholders in Software Development ¡ Clients ¡ End-Users ¡ Project Managers ¡ planning, organising, and executing the software development project ¡ Software Engineers ¡ designing, developing, and implementing the software system ¡ Quality Assurance Professionals Perspectives and Expectations ¡ ensure quality and reliability of the software system Involving Stakeholders ¡ Domain Experts ¡ specialised knowledge and expertise in the specific domain or industry relevant to the software system Software development involves various stakeholders, each with unique roles, responsibilities, and perspectives. Some key stakeholders involved in the software development process include: Clients are the individuals or organisations that initiate and fund the software development project. They provide the vision, requirements, and resources necessary for the project's success. Clients may be internal stakeholders within an organisation or external clients seeking custom software solutions. End-users are the individuals who will interact with and benefit from the software system. They can be employees within the client organisation or external users. Understanding the needs and preferences of end-users is crucial for developing software that effectively addresses their requirements. Project managers are responsible for planning, organising, and executing the software development project. They ensure that the project is delivered on time, within budget, and meets the client's expectations. Project managers coordinate the activities of the development team, manage resources, and facilitate communication between stakeholders. Software engineers are responsible for designing, developing, and implementing the software system. They use their technical expertise to 32 translate requirements into code, following best practices and industry standards. Software engineers work closely with other stakeholders to understand requirements and deliver high-quality software. Quality assurance professionals, often known as testers, are responsible for ensuring the quality and reliability of the software system. They perform various testing activities to identify defects, validate functionality, and verify that the software meets the specified requirements. Quality assurance professionals work collaboratively with software engineers to improve the overall software quality. Domain experts are individuals with specialised knowledge and expertise in the specific domain or industry relevant to the software system. Their input is valuable in understanding the domain-specific requirements, business processes, and constraints. Domain experts provide insights to ensure the software system meets the specific needs of the industry or domain. Perspectives and Expectations Each stakeholder in software development has different perspectives, needs, and expectations from the software system. Clients want the software to meet their business goals, end-users desire ease of use and functionality, project managers seek successful project delivery, software engineers aim for code quality and maintainability, quality assurance professionals strive for a bug-free system, and domain experts bring domain-specific insights. Involving Stakeholders It is essential to involve these stakeholders throughout the software development process to ensure their requirements are met and to achieve project success. Early and continuous collaboration with stakeholders helps gather accurate requirements, receive timely feedback, and address potential issues. Regular communication and involvement foster a shared understanding and ensure that the software system aligns with stakeholder expectations. Software development involves a range of stakeholders with different roles, responsibilities, and perspectives. Each stakeholder brings unique insights and requirements to the development process. By involving stakeholders from the beginning and maintaining regular communication, software development teams can build software systems that meet the needs of clients, end-users, and other stakeholders, ultimately leading to project success. 32 Importance of Software Engineering Standards and Best Practices: Coding Conventions Coding conventions: ¡ set of guidelines and rules ¡ define consistent style and structure for writing code. ¡ Enhance Code Quality ¡ Improve Readability ¡ Ensure Maintainability Coding conventions are a set of guidelines and rules that define a consistent style and structure for writing code. These conventions establish standards for naming conventions, indentation, commenting practices, code structure, and other aspects of code formatting and organisation. Enhancing Code Quality Coding conventions play a crucial role in enhancing code quality. By adhering to conventions, developers can produce code that is more consistent, reducing confusion and making it easier to understand. Consistent code reduces the likelihood of introducing errors, improves maintainability, and promotes collaboration among developers. Improving Readability Readability is an important aspect of coding, as it allows developers to understand the code quickly and accurately. Coding conventions contribute to improved code readability by enforcing consistent formatting and clear naming conventions. Readable code is easier to comprehend, debug, and maintain over time. Ensuring Maintainability Maintainability is critical for long-term software development. When multiple developers work on a project or when code needs to be modified or enhanced, 33 adhering to coding conventions simplifies the process. Consistent code structure and formatting facilitate easier navigation and modification, reducing the time and effort required to maintain the codebase. 33 Importance of Software Engineering Standards and Best Practices: Common Coding Conventions ¡ Naming Conventions ¡ Indentation and Formatting ¡ Commenting Practices ¡ Code Structure and Organisation ¡ eg, Google Java Style Guide http://google.github.io/styleguide/javaguide.html some common coding conventions that are widely adopted in the software engineering community: Naming Conventions Naming conventions provide guidelines for naming variables, functions, classes, and other elements within the code. Consistent and meaningful names improve code readability and make it easier to understand the purpose and functionality of different code components. Indentation and Formatting Indentation and formatting conventions define how code should be structured and formatted. Consistent indentation enhances readability and helps developers understand the code's hierarchy and logical structure. Commenting Practices Commenting practices involve providing clear and concise comments within the code to explain its functionality, purpose, and any potential caveats or considerations. Well-placed comments can assist developers in understanding complex sections of code and serve as documentation for future reference Code Structure and Organisation 34 Code structure and organisation conventions provide guidelines for organising code files, modules, and packages. A well-structured codebase makes it easier to locate and manage different parts of the code, ensuring clarity and maintainability. Coding conventions are an integral part of software engineering standards and best practices. They provide guidelines for writing code in a consistent and readable manner, enhancing code quality, readability, and maintainability. By adhering to coding conventions, developers can produce code that is more consistent, easier to understand, and simpler to maintain over time. 34 Importance of Software Engineering Standards and Best Practices: Documentation Documentation: ¡ capturing and communicating information about the software system eg, requirements, design, functionality, and usage. ¡ source of knowledge for developers, maintainers, and stakeholders ¡ Facilitates Understanding ¡ Supports Maintenance ¡ Enables Future Enhancements Documentation is a crucial aspect of software engineering. It involves capturing and communicating information about the software system, including its requirements, design, functionality, and usage. Documentation serves as a reference and a source of knowledge for developers, maintainers, and stakeholders involved in the software development process. Facilitating Understanding Documentation plays a vital role in facilitating understanding of the software system. It provides detailed explanations of the system's architecture, components, and functionality. Developers can refer to the documentation to gain a comprehensive understanding of the codebase and its intended behavior. Documentation also assists new team members in quickly onboarding and comprehending the existing system. Supporting Maintenance Documentation is essential for maintaining the software system. It captures the rationale behind design decisions, explains the purpose of various modules and components, and provides insights into the system's behavior. During maintenance, developers can refer to the documentation to understand the system's structure and make informed modifications without compromising its functionality. 35 Enabling Future Enhancements Documentation plays a crucial role in enabling future enhancements of the software system. It provides insights into the system's design principles, dependencies, and interfaces. By referring to the documentation, developers can identify areas for improvement, plan enhancements, and ensure that changes align with the system's intended architecture. 35 Importance of Software Engineering Standards and Best Practices: Types of Documentation ¡ Requirements Documents ¡ capture the needs, expectations, and desired functionality ¡ foundation for the development process ¡ Design Documents ¡ outline the system's architecture, structure, and internal components ¡ User Manuals ¡ instructions and guidance for end-users ¡ API Documentation ¡ interfaces, functions, and methods exposed by software libraries or systems Some common types of documentation used in software engineering include: Requirements Documents Requirements documents capture the needs, expectations, and desired functionality of the software system. They provide a clear understanding of the system's purpose and outline the features and behaviors it should exhibit. Requirements documents serve as a foundation for the development process, ensuring that the final product meets stakeholder expectations. Design Documents Design documents outline the system's architecture, structure, and internal components. They explain the relationships between various modules, classes, and functions. Design documents assist developers in understanding the system's intended structure and allow for effective collaboration among team members. User Manuals User manuals provide instructions and guidance for end-users on how to interact with and utilise the software system. They explain the system's features, functionality, and any usage considerations. User manuals are essential in helping users effectively navigate and leverage the software system. 36 API Documentation API documentation documents the interfaces, functions, and methods exposed by software libraries or systems. It provides information on how to utilise and interact with the provided APIs, including input/output parameters, return values, and usage examples. API documentation enables developers to integrate and utilise external software components effectively. Documentation plays a vital role in software engineering. It facilitates understanding of the software system, supports maintenance activities, and enables future enhancements. Documentation encompasses various types, such as requirements documents, design documents, user manuals, and API documentation. By investing in comprehensive and up-to-date documentation, software engineering teams can ensure effective collaboration, efficient maintenance, and successful software evolution. 36 Importance of software engineering standards and best practices: peer review Peer review: ¡ collaborative process in which team members evaluate software artefacts created by their peers. ¡ examine the artefacts, provide feedback, discuss potential improvements. ¡ quality assurance mechanism. Types: ¡ Identify Defects ¡ Code Reviews ¡ Improve Code Quality ¡ Design Reviews ¡ Share Knowledge ¡ Document Reviews Peer review is a collaborative process in which team members evaluate software artefacts created by their peers. This process involves examining the artefacts, providing feedback, and discussing potential improvements. Peer review serves as a quality assurance mechanism, helping to identify defects, improve code quality, and share knowledge within the team. Identifying Defects One of the primary benefits of peer review is its ability to identify defects in software artefacts. By having multiple team members review the code, designs, or documents, potential errors, bugs, or inconsistencies can be discovered and addressed early in the development process. This helps to improve the overall quality of the software system. Improving Code Quality Peer review plays a significant role in improving code quality. Through code reviews, team members can provide feedback on coding style, adherence to coding standards, readability, and maintainability. By leveraging the expertise of the team, code quality can be enhanced, leading to more efficient, robust, and maintainable software. Sharing Knowledge Peer review provides an excellent opportunity for knowledge sharing within the 37 team. During the review process, team members can learn from one another, gain insights into different approaches, and exchange ideas. This knowledge sharing fosters a collaborative environment and improves the overall skill set of the team TYPES Code Reviews Code reviews involve the examination of code by team members to identify defects, improve code quality, and ensure adherence to coding standards. Code reviews focus on aspects such as readability, maintainability, performance, and error handling. They provide an opportunity for the team to discuss alternative approaches, suggest improvements, and ensure consistency within the codebase. Design Reviews Design reviews involve evaluating the architectural and high-level design aspects of a software system. Team members examine design documents, diagrams, and models to ensure that the proposed design aligns with the requirements, is scalable, and promotes modularisation. Design reviews help identify potential design flaws and allow for early course correction. Document Reviews Document reviews involve the examination of various software-related documents, such as requirements documents, design documents, and user manuals. Team members review the content, structure, and accuracy of the documents to ensure they are complete, consistent, and effectively communicate the necessary information. 37 This weeks reading ¡ Chapter 2 (Fundamentals of Software Engineering) sections 2.1 to 2.7 from: O’Regan, G. (2019). Concise Guide to Software Testing. Springer International Publishing. See Learning Modules à Week 01 for download links up next: part B: HTTP & HTML fundamentals 38

Use Quizgecko on...
Browser
Browser