SOFTWARE ENGINEERING Presented by, Tasmiya Anjum H.N INTRODUCTION PROFESSIONAL SOFTWARE DEVELOPMENT: • Software engineering is intended to support professional software development, rather than individual programming. • It includes techniques that support program specification, design, and evolution. • There are two kinds of software products: 1. Generic products :These are stand-alone systems that are produced by a development organization and sold on the open market to any customer. 2. Customized products :These are systems that are commissioned by a particular customer. A software contractor develops the software especially for that customer. Attributes of a good software: 1. Maintainability :Software should be written in such a way so that it can evolve to meet the changing needs of customers. 2.Dependability and security: Dependable software should not cause physical or economic damage in the event of system failure. Malicious users should not be able to access or damage the system. 3. Efficiency: Software should not make wasteful use of system resources. 4.Acceptability: Software must be acceptable to the type of users for which it is designed. Software Process: • A software process is a sequence of activities that leads to the production of a software product. • There are four fundamental activities that are common to all software processes. These activities are: 1. Software specification, where customers and engineers define the software that is to be produced and the constraints on its operation. 2. Software development, where the software is designed and programmed. 3. Software validation, where the software is checked to ensure that it is what the customer requires. 4. Software evolution, where the software is modified to reflect changing customer and market requirements. Software Engineering Ethics • Like other engineering disciplines, software engineering is carried out within a social and legal framework that limits the freedom of people working in that area. 1. Confidentiality You should normally respect the confidentiality of your employers or clients irrespective of whether or not a formal confidentiality agreement has been signed. 2. Competence You should not misrepresent your level of competence. You should not knowingly accept work that is outside your competence. 3. Intellectual property rights You should be aware of local laws governing the use of intellectual property such as patents and copyright. 4. Computer misuse You should not use your technical skills to misuse other people’s computers. Case studies :An insulin pump control system • An insulin pump is a medical system that simulates the operation of the pancreas. • The software controlling this system is an embedded system, which collects information from a sensor and controls a pump that delivers a controlled dose of insulin to a user. • Diabetes is a relatively common condition where the human pancreas is unable to produce sufficient quantities of a hormone called insulin. • Insulin metabolises glucose (sugar) in the blood. The conventional treatment of diabetes involves regular injections. • Diabetics measure their blood sugar levels using an external meter and then calculate the dose of insulin that they should inject. • The problem with this treatment is that the level of insulin required does not just depend on the blood glucose level but also on the time of the last insulin injection. • Problem causes: 1. very low levels of blood glucose (if there is too much insulin) 2. very high levels of blood sugar (if there is too little insulin). • In Low blood glucose condition it can result in temporary brain malfunctioning unconsciousness and death. • In the high level can lead to eye damage, kidney damage, and heart problems. The software controlling this system is an embedded system, which collects information from a sensor and controls a pump that delivers a controlled dose of insulin to a user. as shown in the diagram. Figure 1.4 Insulin pump hardware Figure 1.4 shows the hardware components and organization of the insulin pump. • blood sensor measures the electrical conductivity of the blood under different conditions and that these values can be related to the blood sugar level. • The insulin pump delivers one unit of insulin in response to a single pulse from a controller. Therefore, to deliver 10 units of insulin, the controller sends 10 pulses to the pump. Figure 1.5 is a UML activity model that illustrates how the software transforms an input blood sugar level to a sequence of commands that drive the insulin pump. Figure 1.5 Activity model of the insulin pump Software process models • A software process model is a simplified representation of a software process. • Each process model represents a process from a particular perspective, and thus provides only partial information about that process. • A process activity model shows the activities and their sequence but may not show the roles of the people involved in these activities. 1. The Waterfall Model: The waterfall model is a linear, sequential approach to the software development lifecycle(SDLC). The principal stages of the waterfall model are: 1. Requirements analysis and definition The system’s services, constraints, and goals are established by consultation with system users. 2. System and software design The systems design process allocates the requirements to either hardware or software systems by establishing an overall system architecture. 3. Implementation and unit testing involves coding the software based on the design specification and also includes unit testing. 4. Integration and system testing The individual program units or programsare integrated and tested as a complete system to ensure that the softwarerequirements have been met. 5. Operation and maintenance The system is installed and put into practical use. Maintenance involves correcting errors which were not discovered in earlier stages of the life cycle. • In waterfall model the following phase should not start untill the previous phase has finished. It require feedback from one phase to another. It is appropriate for some types of system like embedded, critical and large software system. 2. Incremental development: Incremental development is based on the idea of developing an initial implementation, exposing this to user comment and evolving it through several versions until an adequate system has been developed. (Figure 2.2) • Incremental software development, which is a fundamental part of agile approaches, is better than a waterfall approach for most business, e-commerce, and personal systems. • Incremental development reflects the way that we solve problems. We rarely work out a complete problem solution in advance but move toward a solution in a series of steps, backtracking when we realize that we have made a mistake. • Incremental development has three important benefits, compared to the waterfall model: 1. The cost of accommodating changing customer requirements is reduced. The amount of analysis and documentation that has to be redone is much less than is required with the waterfall model. 2. It is easier to get customer feedback on the development work that has been done. Customers can comment on demonstrations of the software and see how much has been implemented. 3. More rapid delivery and deployment of useful software to the customer is possible, even if all of the functionality has not been included. 3. Reuse-oriented software engineering: In the majority of software projects, there is some software reuse. Reuse-oriented approaches rely on a large base of reusable software components and an integrating framework for the composition of these components. A general process model for reuse-based development is shown in Figure 2.3. • The intermediate stages in a reuse oriented process are different. These stages are: 1. Component analysis Given the requirements specification, a search is made for components to implement that specification. Usually, there is no exact match and the components that may be used only provide some of the functionality required. 2. Requirements modification During this stage, the requirements are analyzed using information about the components that have been discovered. They are then mod_x0002_ified to reflect the available components. 3. System design with reuse During this phase, the framework of the system is designed or an existing framework is reused. 4.Development and integration Software that cannot be externally procured is developed, and the components and COTS systems are integrated to create the new system. Process activities: Real software processes are interleaved sequences of technical, collaborative, and managerial activities with the overall goal of specifying, designing, implementing, and testing a software system. The four basic process activities of specification, development, validation, and evolution. 1.1 Software specification or requirements engineering is the process of understanding and defining what services are required from the system and identifying the constraints on the system’s operation and development. • There are four main activities in the requirements engineering process: 1. Feasibility study An estimate is made of whether the identified user needs may be satisfied using current software and hardware technologies. 2. Requirements elicitation and analysis This is the process of deriving the system requirements through observation of existing systems, discussions with potential users and procurers, task analysis, and so on. 3. Requirements specification Requirements specification is the activity of translating the information gathered during the analysis activity into a document that defines a set of requirements. 4. Requirements validation This activity checks the requirements for realism, consistency, and completeness. 1.2 Software design and implementation: • The implementation stage of software development is the process of converting a system specification into an executable system. • The stages of the design process are sequential. In fact, design process activities are interleaved. Feedback from one stage to another and consequent design rework is inevitable in all design processes. • four activities that may be part of the design process for information systems: 1. Architectural design, where you identify the overall structure of the system, the principal components (or modules), their relationships, and how they are distributed. 2. Interface design, where you define the interfaces between system components.This interface specification must be unambiguous. 3. Component design, where you take each system component and design how it will operate. 4. Database design, where you design the system data structures and how these are to be represented in a database. Again, the work here depends on whether an existing database is to be reused or a new database is to be created. 1.3 Software validation: Software validation or, more generally, verification and validation (V&V) is intended to show that a system both conforms to its specification and that it meets the expectations of the system customer. 1. Development testing The components making up the system are tested by the people developing the system. Each component is tested independently, without other system components. 2. System testing System components are integrated to create a complete system.This process is concerned with finding errors that result from unanticipated interactions between components and component interface problems. 3. Acceptance testing This is the final stage in the testing process before the system is accepted for operational use. fig 1.6:Testing phases in a plan-drivensoftware process 1.4 Software evolution The flexibility of software systems is one of the main reasons why more and more software is being incorporated in large, complex systems. Changes can be made to software at any time during or after the system development. • There are two related approaches that may be used to reduce the costs of rework: 1. Change avoidance, where the software process includes activities that can anticipate possible changes before significant rework is required. 2. Change tolerance, where the process is designed so that changes can be accommodated at relatively low cost. The Rational Unified Process The RUP recognizes that conventional process models present a single view of the process. In contrast, the RUP is normally described from three perspectives: 1. A dynamic perspective, which shows the phases of the model over time. 2. A static perspective, which shows the process activities that are enacted. 3. A practice perspective, which suggests good practices to be used during the process. The RUP is a phased model that identifies four discrete phases in the software process 1. Inception: The goal of the inception phase is to establish a business case for the system. You should identify all external entities (people and systems) that will interact with the system and define these interactions. 2. Elaboration: The goals of the elaboration phase are to develop an understanding of the problem domain, establish an architectural framework for the system, develop the project plan, and identify key project risks. 3. Construction: The construction phase involves system design,programming, and testing. 4. Transition: The final phase of the RUP is concerned with moving the system from the development community to the user community and making it work in a real environment. Agile Software Development • Agile software development is an iterative and incremental approach to software development that emphasizes the importance of delivering a product quickly and frequently. • Agile methods: Agile methods universally rely on an incremental approach to software specification, development, and delivery. They are best suited to application development where the system requirements usually change rapidly during the development process. They are intended to deliver working software quickly to customers, who can then propose new and changed requirements to be included in later iterations of the system. The principles of agile methods • Plan-driven and agile development • Agile approaches to software development consider design and implementation to be the central activities in the software process. • They incorporate other activities, such as requirements elicitation and testing, into design and implementation. • By contrast, a plan-driven approach to software engineering identifies separate stages in the software process with outputs associated with each stage. The outputs from one stage are used as a basis for planning the following process activity. • In a plan-driven approach, iteration occurs within activities with formal documents used to communicate between stages of the process. ex: requirement to design Figure: Plan-driven and agile specification • Extreme programming (XP) is perhaps the best known and most widely used of the agile methods. • In extreme programming, requirements are expressed as scenarios (called user stories), which are implemented directly as a series of tasks. • Programmers work in pairs and develop tests for each task before writing the code. All tests must be successfully executed when new code is integrated into the system. • Extreme programming involves a number of practices, summarized in Figure 3.4, which reflect the principles of agile methods: • Agile project management • The principal responsibility of software project managers is to manage the project so that the software is delivered on time and within the planned budget for the project.They supervise the work of software engineers and monitor how well the software development is progressing. • This requires a different approach to project management, which is adapted to incremental development and the particular strengths of agile methods. • The Scrum approach is a general agile method but its focus is on managing iterative development rather than specific technical approaches to agile software engineering. • There are three phases in Scrum. The first is an outline planning phase where you establish the general objectives for the project and design the software architecture. • This is followed by a series of sprint cycles, where each cycle develops an increment of the system. • The project closure phase wraps up the project, completes required documentation such as system help frames and user manuals, and assesses the lessons learned from the project. • The innovative feature of Scrum is its central phase, namely the sprint cycles. A Scrum sprint is a planning unit in which the work to be done is assessed, features are selected for development, and the software is implemented. • At the end of a sprint, the completed functionality is delivered to stakeholders. • Scaling agile methods • Agile methods have therefore been mostly used for the development of small and mediumsized systems the need for faster delivery of software. Consequently, there has been a great deal of interest in scaling agile methods to cope with larger systems, developed by large organizations. • There are two perspectives on the scaling of agile methods: 1. A ‘scaling up’ perspective, which is concerned with using these methods for developing large software systems that cannot be developed by a small team. 2. A ‘scaling out’ perspective, which is concerned with how agile methods can be introduced across a large organization with many years of software development experience.