- Software refers to computer programs and related data that provide instructions for computers. It can be classified as system software, which enables computer functioning, or application software, which enables specific tasks.
- Software engineering involves systematically designing, developing, testing and maintaining software using tools, techniques and processes. It focuses on creating reliable, efficient and maintainable software systems.
- Factors like changing requirements and technology drive the ongoing evolution of software systems over time through maintenance, refactoring, reengineering and other processes.
- Software refers to computer programs and related data that provide instructions for computers. It can be classified as system software, which enables computer functioning, or application software, which enables specific tasks.
- Software engineering involves systematically designing, developing, testing and maintaining software using tools, techniques and processes. It focuses on creating reliable, efficient and maintainable software systems.
- Factors like changing requirements and technology drive the ongoing evolution of software systems over time through maintenance, refactoring, reengineering and other processes.
- Software refers to computer programs and related data that provide instructions for computers. It can be classified as system software, which enables computer functioning, or application software, which enables specific tasks.
- Software engineering involves systematically designing, developing, testing and maintaining software using tools, techniques and processes. It focuses on creating reliable, efficient and maintainable software systems.
- Factors like changing requirements and technology drive the ongoing evolution of software systems over time through maintenance, refactoring, reengineering and other processes.
• In the context of software engineering, software refers to computer
programs and related data that provide the instructions for telling a computer what to do and how to do it. Software is typically created using a programming language and is stored on a computer's hard drive or other storage medium. • Software can be classified into two main categories: • system software and application software. • System software includes the operating system and other software that enables the computer to function, such as device drivers and utility programs. • Application software refers to programs that enable users to perform specific tasks, such as word processing, spreadsheet management, and web browsing. Software dfn cont…
• Software development is the process of creating software using
programming languages and tools. Software engineers are responsible for designing, implementing, and maintaining software systems to meet the needs of users. They may work on a variety of projects, including developing standalone applications, building software components that are integrated into other systems, or creating operating systems or other types of system software. Engineering dfn.
• Engineering refers to the application of scientific and mathematical
principles to the design, development, and maintenance of systems, structures, and machines. In the context of software engineering, software engineering is the application of engineering principles to the design, development, and maintenance of software systems. Software engineering • Software engineering is the study of how to design, develop, and maintain software systems. It is a field of computer science that focuses on the creation and development of computer programs and applications.
• Software engineering involves the use of a systematic and disciplined
approach to the design, development, testing, and maintenance of software. This includes the use of tools, techniques, and processes to plan, coordinate, and control the development of a software project. Activities involved in software engineering include:
• Requirements gathering: This involves working with stakeholders to
identify and document the goals, objectives, and needs of the software system.
• Design: This involves creating a plan or blueprint for the software
system, including its architecture, data structures, and algorithms.
• Implementation: This involves writing the code for the software
system based on the design. Cont… • Testing: This involves verifying that the software system functions as intended and meets the specified requirements.
• Maintenance: This involves updating and modifying the software
system to fix bugs, improve performance, and add new features.
• Overall, the goal of software engineering is to create high-quality
software systems that are reliable, efficient, and easy to maintain. Tools used to plan, coordinate, and control the development of a software project. • There are many tools that can be used to plan, coordinate, and control the development of a software project. Some of the most common tools used in software project management include: • Project management software: This type of software is used to create and maintain a project plan, track progress, and manage resources. Examples include Microsoft Project and Asana. • Version control systems: These are used to track changes to the source code of a software project and enable team members to collaborate on development. Examples include Git and Subversion. Cont… • Bug tracking systems: These are used to track and resolve issues or defects in the software. Examples include JIRA and Bugzilla. • Collaboration tools: These are used to facilitate communication and collaboration among team members. Examples include Slack and Microsoft Teams. • Automated testing tools: These are used to automate the testing process and identify defects in the software. Examples include Selenium and Appium. • Documentation tools: These are used to create and maintain documentation for the software project, such as user manuals and technical specifications. Examples include Confluence and Doxygen. • Overall, the specific tools used will depend on the needs and goals of the software project, as well as the preferences of the project team. Techniques, and processes used to plan, coordinate, and control the development of a software project. • There are many techniques and processes that can be used to plan, coordinate, and control the development of a software project. Some of the most common ones include: • Waterfall model: This is a traditional approach to software development that involves completing each phase of the development process (e.g., analysis, design, implementation, testing) before moving on to the next phase. • Agile development: This is an iterative and incremental approach to software development that emphasizes flexibility and collaboration. Agile development is typically organized around short development cycles called "sprints," which allow the team to quickly respond to changes and deliver working software on a regular basis. Cont… • Scrum: This is an agile framework for managing and completing complex projects. It involves regular meetings called "scrums" where team members discuss progress and identify any issues or blockers. • Lean development: This is an approach to software development that aims to eliminate waste and focus on delivering value to the customer as quickly as possible. • Six Sigma: This is a data-driven approach to process improvement that aims to identify and eliminate defects in a process. • Overall, the specific techniques and processes used in a software project will depend on the needs and goals of the project, as well as the preferences of the project team. Software evolution • software evolution is the process of adapting and changing a software system over time in response to changing requirements, technology, and other factors. In a software engineering course, students will learn about the various factors that can drive software evolution, as well as the techniques and processes that can be used to manage it effectively. • Some of the key concepts related to software evolution that students should learn about include: • Maintenance: This refers to the activities and processes involved in updating and modifying a software system to fix bugs, improve performance, and add new features. • Refactoring: This refers to the process of restructuring or reorganizing the code of a software system in order to improve its design, without changing its functionality. Cont… • Reengineering: This refers to the process of fundamentally redesigning a software system in order to improve its performance or functionality. • Reverse engineering: This refers to the process of analyzing a software system in order to understand its structure and design. • Porting: This refers to the process of adapting a software system to run on a different platform or environment. • Reuse: This refers to the use of existing software components or systems in the development of a new software system. • Overall, software evolution is an important aspect of software engineering that involves adapting and changing software systems over time to meet the changing needs of users and stakeholders. Software laws • The Law of Conservation of Complexity: This law suggests that the complexity of a software system is constant, and that when one part of the system becomes simpler, another part will become more complex to compensate. This can make it difficult to reduce the overall complexity of a software system. • The Law of Increasing Difficulty: This law states that it becomes increasingly difficult to make changes to a software system as it evolves. This is because the system becomes more complex and interdependent over time, and modifying one part of the system can have unintended consequences on other parts of the system. Cont… • The Law of Declining Quality: This law states that the quality of a software system tends to decline over time as changes are made to the codebase. This is because changes to the codebase can introduce new bugs and issues, and it can be difficult to maintain the same level of quality as the system evolves. • The Law of Requisite Variety: This law suggests that the complexity of a software system should be matched by the complexity of the processes used to develop and maintain it. If the processes used to develop and maintain a software system are not sufficient to handle its complexity, the system may become difficult to understand and maintain. Software categories according to Lehman 1980s .. S-type software • "S-type software" or "static-type software" refers to software that is designed to follow a set of predefined specifications and solutions. This type of software is typically straightforward and easy to understand, as the solution and the method for achieving it are defined in advance. Because it is not subject to many changes, S-type software is often considered to be the simplest type of software. • An example of S-type software might be a calculator program that is designed to perform basic mathematical calculations. This program would follow a set of predefined rules for performing calculations, and would not be subject to many changes or updates once it has been developed. P-type software • P-type or practical-type software is software that is defined by a collection of procedures or processes. These procedures may be well-defined, but the solution to a problem is not immediately obvious. This type of software is typically more complex than S-type software, as it may require more problem-solving and decision-making on the part of the software developer or engineer. • An example of P-type software might be a gaming software. This type of software may have well-defined procedures for things like character movement, collision detection, and other gameplay mechanics, but the overall solution to the game may not be immediately obvious. Developing this type of software may require more problem-solving and decision- making on the part of the developers, as they must determine the best way to implement the various gameplay mechanics and features. E-type software • E-type or embedded-type software is software that is closely tied to the requirements of a real-world environment. This type of software is often designed to interact with external systems or devices, and may be subject to frequent changes in response to changes in the real-world environment. • An example of E-type software might be an online trading software. This type of software would need to be constantly updated to reflect changes in laws, taxes, and other regulations related to trading. It would also need to be able to interact with external systems such as stock exchanges and financial data sources in order to function properly. The need for software engineering • There is a need for software engineering because of the complexity and scale of modern software systems. Software systems are an essential part of many aspects of our lives, and they are often required to perform a wide range of tasks and to work in a variety of different environments. • To meet these challenges, software engineering provides a set of principles, methods, and tools for designing, developing, testing, and maintaining software systems. By applying these principles, software engineers can create reliable, efficient, and maintainable software that meets the needs of its users. • Some specific reasons for the need for software engineering include: • The increasing complexity of software systems: As software systems have become more sophisticated, they have become more difficult to design, develop, and maintain. Software engineering provides a structured approach to addressing this complexity. Cont… • The importance of software quality: Software that is unreliable or inefficient can have serious consequences, such as lost productivity, financial losses, or even physical harm. Software engineering helps ensure that software is of high quality and fit for its intended purpose. • The need for rapid development: In today's fast-paced business environment, it is often important to develop software quickly in order to meet changing market needs. Software engineering provides a set of tools and practices that can help teams develop software efficiently and effectively. • The need for maintainability: Software systems often need to be updated and modified over time to meet changing user needs or to take advantage of new technologies. Software engineering helps ensure that software is designed in a way that makes it easy to maintain and modify. Qualities of a good software • Reliability: A good software should be reliable, meaning it should work correctly and consistently under a variety of conditions. This includes handling unexpected inputs and errors gracefully, and avoiding crashes or other failures. • Efficiency: A good software should be efficient, meaning it should use resources (such as time and memory) efficiently. This is especially important for software that is used frequently or in resource-constrained environments. • Usability: A good software should be easy to use, with a clear and intuitive interface. This includes considerations such as layout, navigation, and the use of language and other conventions. Cont…
• Maintainability: A good software should be easy to maintain and modify
over time, as the needs of its users or the environment in which it operates change. This includes having a clear and well-organized codebase, as well as adequate documentation and testing.
• Portability: A good software should be portable, meaning it should be able
to run on different platforms or environments without requiring significant modification. Cont… • Security: A good software should be secure, meaning it should protect against unauthorized access or manipulation of data. This includes considerations such as authentication, encryption, and input validation.
• Scalability: A good software should be scalable, meaning it should be able to
handle an increasing workload without a decrease in performance. This is especially important for software that is expected to be used by a large number of users or to process large amounts of data. Project planning in software engineering • Project planning in software engineering refers to the process of defining and organizing the tasks and resources needed to complete a software development project. It involves identifying the goals of the project, breaking down the work into smaller tasks, estimating the time and resources needed to complete each task, and organizing these tasks into a coherent plan. • There are several steps involved in project planning: • Define the project scope: The first step in project planning is to define the goals and objectives of the project, as well as the constraints and limitations that will impact the project. This includes identifying the stakeholders (e.g. users, developers, managers) and determining the requirements for the software. Cont… • Break down the work: The next step is to break down the work into smaller, more manageable tasks. This can be done using techniques such as task decomposition or user stories. • Estimate task duration: The next step is to estimate how long each task will take to complete. This can be done using techniques such as expert judgment, historical data, or estimation tools. • Organize the tasks: The final step is to organize the tasks into a coherent plan. This may involve creating a Gantt chart or using project management software to create a schedule and assign tasks to team members. • Project planning is an important part of software engineering because it helps ensure that the project is completed on time and within budget, and that all stakeholders are aware of the progress and status of the project. It also helps identify potential risks and issues early on, so that they can be addressed before they become problems. Software models… Waterfall model
• The waterfall model is a linear approach to the development process.
It involves breaking down the development of a software product into distinct phases, and progressing sequentially through these phases.
• The phases of the waterfall model are:
• Requirements gathering and analysis: This phase involves gathering
and documenting the requirements for the software product. Cont… • Design: In this phase, a high-level design of the software product is created. • Implementation: During the implementation phase, the actual coding of the software takes place. • Testing: The software is tested to ensure that it meets the specified requirements. • Deployment: The final software product is deployed for use. • Maintenance: This phase involves fixing any issues that arise with the software after it has been deployed. Pictorial representation Requirements gathering and analysis • Requirements gathering and analysis is the first phase of the waterfall model, and it involves collecting and documenting the requirements for the software product. This phase is important because it establishes the foundation for the rest of the development process. • During the requirements gathering and analysis phase, the development team works with the client to understand their needs and goals for the software product. This may involve conducting interviews, gathering feedback from stakeholders, and creating a list of functional and non-functional requirements for the software. Cont… • The requirements gathering and analysis phase is also an opportunity to identify any potential risks or challenges that may arise during the development process, and to put plans in place to mitigate them. • Once the requirements have been gathered and analyzed, they are typically documented in a requirements specification document, which serves as a reference point for the rest of the development process. This document may include a detailed description of the software's intended functionality, as well as any constraints or limitations that need to be taken into account. Design
• During the design phase of the waterfall model, a high-level design of
the software product is created. This design serves as a blueprint for the rest of the development process, and it typically includes a detailed description of the software's architecture, as well as the specific technologies and components that will be used to build it. • The design phase is an important step in the development process, as it helps to ensure that the software will be scalable, maintainable, and able to meet the needs of the client. It also helps to identify any potential issues or challenges that may arise during the implementation phase, and to put plans in place to address them. Cont… • There are several different approaches to designing software, and the specific approach that is used may depend on the nature of the project and the preferences of the development team. Some common approaches include object-oriented design, component-based design, and event-driven design. • During the design phase, it is important to create a design that is both feasible and aligned with the requirements gathered in the previous phase. The design should also consider the long-term goals and needs of the client, as well as any potential future enhancements to the software. Types of design.. Logical design • Logical design refers to the process of defining the structure of a software system at a high level of abstraction, without considering the physical implementation details. It typically involves creating a model of the system that represents the various components and their relationships, as well as the functionality and data flows within the system. • Logical design is an important step in the software development process, as it helps to define the overall architecture of the system and to ensure that it will meet the needs of the client. It is typically created during the design phase of the development process, and it serves as a basis for the physical design of the system, which involves deciding on the specific technologies and components that will be used to build it. Cont… • There are several different approaches to logical design, and the specific approach that is used may depend on the nature of the project and the preferences of the development team. Some common techniques for logical design include data modeling, object-oriented design, and component-based design. Physical design • Physical design refers to the process of deciding on the specific technologies and components that will be used to build a software system. It involves taking the high-level design of the system, as defined during the logical design phase, and determining the specific hardware and software components that will be needed to implement it. • Physical design is an important step in the software development process, as it helps to ensure that the system will be able to meet the performance and scalability requirements of the client. It also helps to identify any potential issues or challenges that may arise during the implementation phase, and to put plans in place to address them. Cont… • There are several factors that may influence the physical design of a software system, including the specific hardware and software platforms that will be used, the performance and scalability requirements of the system, and the availability of resources such as personnel and budget. The physical design should be carefully planned and documented, as it will serve as a roadmap for the rest of the development process. Implementation • During the implementation phase of the waterfall model, the actual coding of the software takes place. This phase involves taking the high-level design of the software, as created during the design phase, and turning it into a working product by writing the necessary code. • The implementation phase is typically the longest phase of the development process, and it involves a lot of collaboration between the development team and the client. The development team may work in iterative cycles, writing and testing small pieces of code and then integrating them into the larger system. • There are several factors that can impact the implementation phase, including the complexity of the software, the skill level of the development team, and the availability of resources such as personnel and budget. It is important to have a clear plan in place for the implementation phase, and to track progress and identify any potential issues or challenges that may arise. Testing • During the testing phase of the waterfall model, the software is tested to ensure that it meets the specified requirements. This phase is an important step in the development process, as it helps to identify any issues or defects in the software and to ensure that it is of high quality. • There are several different types of testing that may be performed on software, including unit testing, integration testing, system testing, and acceptance testing. Each of these types of testing serves a specific purpose and focuses on a different aspect of the software. Cont..(types of testing) • Unit testing involves testing individual components or units of code to ensure that they are working correctly. Integration testing involves testing how different components of the software work together. System testing involves testing the software as a whole, to ensure that it meets the specified requirements. Acceptance testing involves testing the software from the perspective of the end user, to ensure that it is easy to use and meets their needs. • Testing is typically an iterative process, and it may involve multiple rounds of testing as issues are identified and addressed. It is important to have a thorough and well-documented testing plan in place, and to track the progress and results of the testing process. Deployment • During the deployment phase of the waterfall model, the final software product is deployed for use. This phase involves making the software available to the end users, and may involve installing the software on the users' computers or servers, or making it available over the web.
• The deployment phase is an important step in the development process,
as it marks the transition from development to production. It is important to have a well-planned and well-executed deployment process, as it can have a significant impact on the success of the software. Cont… • There are several factors to consider when deploying software, including the specific hardware and software platforms that will be used, the availability of resources such as personnel and budget, and the needs and preferences of the end users. The deployment process may also involve activities such as training users on how to use the software, providing documentation and support, and monitoring the software for any issues or defects. Maintenance • Maintenance is the process of maintaining and improving a software product after it has been deployed. It involves fixing any issues or defects that are discovered in the software, and making enhancements or improvements to the software as needed.
• Maintenance is an ongoing process that typically continues for the
entire lifetime of the software product. It is an important step in the development process, as it helps to ensure that the software continues to meet the needs of the users and to function effectively over time. Cont… • There are several types of maintenance that may be performed on software, including corrective maintenance (fixing defects), adaptive maintenance (making changes to the software to accommodate changes in the environment), and perfective maintenance (making enhancements or improvements to the software).
• The maintenance process may involve activities such as troubleshooting issues,
writing and testing code, and collaborating with the development team and other stakeholders. It is important to have a well-documented maintenance plan in place, and to track the progress and results of the maintenance process.