lec [1] Software Processes Life-Cycles_084209.pdf

Full Transcript

# Lecture 1: Introduction to Software Engineering ## Why ... Software Engineering? - The economies of ALL developed nations are dependent on software. - More and more systems are software controlled. - Software engineering is concerned with theories, methods and tools for professional software deve...

# Lecture 1: Introduction to Software Engineering ## Why ... Software Engineering? - The economies of ALL developed nations are dependent on software. - More and more systems are software controlled. - Software engineering is concerned with theories, methods and tools for professional software development. - Expenditure on software represents a significant fraction of GNP (Gross National Product) in all developed countries. - The Standish Group has been publishing reports on the success of software projects since 1994. In its latest report (2012) it identified that: - Only 39% of all projects were being delivered on time, on budget, with the required features and functions. - 43% were late, or over budget, or not delivering all the required features. - 18% were either cancelled before delivery or delivered but never used. - In those reports, the major problems have been identified. Among these problems were the following: - Poor, or lack of, user involvement. - Lack of clear business objectives. - Under and over building – building features that are never used and not building all the required features. ## Frequently Asked Questions About SE ### Question: What is software? - Computer programs and associated documentation. Software products may be developed for a particular customer or may be developed for a general market. ### Question: What are the attributes of good software? - Good software should deliver the required functionality and performance to the user (useful) and should be flexible, usable, reliable, available, affordable, and maintainable (greatly influenced by how it is designed and written). ### Question: What is software engineering? - Software engineering is an engineering discipline that is concerned with all aspects of software production. ### Question: What are the fundamental software engineering activities? - Software specification, software development, software validation and software evolution. ### Question: What is the difference between software engineering and computer science? - Computer science focuses on theory and fundamentals; software engineering is concerned with the practicalities of developing and delivering useful software. ### Question: What is the difference between software engineering and system engineering? - System engineering is concerned with all aspects of computer-based systems development including hardware, software and process engineering. Software engineering is part of this more general process. ### Question: What is a System boundary? - A conceptual line that divides the system that we wish to study from 'everything else', (scope of a system). ### Question: What is a System's environment? - It is made up of those things which are not part of the system, but which can either affect the system or be affected by it. ### Question: What is a domain? - It is a particular area of interest. ## The Important Characteristics of Software that affect its Development - **Malleability:** Software is easy to change. This malleability creates a constant pressure for software to be changed rather than replaced. - **Complexity:** Software is often complex. Complexity can usually be recognized, but it is less easy to define. One item of software can be considered more complex than another if the description of the first requires more explanation than that of the second. If complexity is increased, errors will be increased. - **Size:** It is likely that there will be more errors in a large piece of software than there will be in a small one. # Chapter 2: Software Processes ## 1. Software Process Models: - Plan-Driven and Agile Processes - The Waterfall Model - Incremental Development - Reuse-Oriented Software Engineering ## 2. Process Activities: - Software Specification - Software Design and Implementation - Design activities - Software Validation - Testing stages - Software Evolution ## The Software Process - A structured set of activities required to develop a software system. - Many different software processes but all involve: - **Specification** - defining what the system should do; - **Design** - defining the organization of the system; - **Implementation** - implementing the system; - **Validation (Testing)** - checking that it does what the customer wants; - **Evolution (Maintenance)** - changing the system in response to changing customer needs. - A software process model is an abstract representation of a process. It presents a description of a process from some particular perspective. ## Software Process Descriptions - When we describe and discuss processes, we usually talk about the *activities* in these processes such as specifying a data model, designing a user interface, etc. and the *ordering* of these activities. - Process descriptions may also include: - **Products**, which are the outcomes of a process activity; - **Roles**, which reflect the responsibilities of the people involved in the process; - **Pre- and post-conditions**, which are statements that are true before and after a process activity has been enacted or a product produced. ## Plan-Driven and Agile Processes - **Plan-driven processes** are processes where all of the process activities are planned in advance and progress is measured against this plan - **In agile processes,** planning is incremental and it is easier to change the process to reflect changing customer requirements. - In practice, most practical processes include elements of both plan-driven and agile approaches. --- There are no right or wrong software processes. ## Software Process Models ### The Waterfall Model - Plan-driven model. Separate and distinct phases of specification and development. - Difficult to respond to changing customer requirements. ### Incremental Development - Specification, development and validation are interleaved. May be plan-driven or agile. - Easier to get customer feedback on the development work that has been done. - Can be used to get software to customers more rapidly. ### Reuse-oriented Software Engineering - The system is assembled from existing components. May be plan-driven or agile. - Is increasingly used as the availability of commercial off-the-shelf components increases. ## The Waterfall Model - The diagram describes the different stages in the waterfall model. | Stage | Description | |---|---| | Requirements Definition | Clearly describes the system's functionality, performance, and constraints. | | System and Software Design | Defines the overall system architecture and the detailed design of the software. | | Implementation and Unit Testing | The software is implemented and tested; this involves developing and testing individual program units. | | Integration and System Testing | The individual units are integrated and tested as a complete system. | | Operation and Maintenance | The software is delivered to the customer and operated and maintained. | ## Waterfall Model Phases - There are separate identified phases in the waterfall model: - Requirements analysis and definition. - System and software design.. - Implementation and unit testing. - Integration and system testing. - Operation and maintenance. - The main drawback of the waterfall model is the **difficulty of accommodating change** after the process is underway. - In principle, a phase has to be complete before moving onto the next phase. ## Waterfall Model Problems - Inflexible partitioning of the project into distinct stages makes it **difficult to respond to changing customer requirements**. - Therefore, this model is only appropriate when the requirements are well-understood and changes will be fairly limited during the design process. - Few business systems have stable requirements. - The waterfall model is mostly **used for large systems engineering projects** where a system is developed at several sites. - In those circumstances, the plan-driven nature of the waterfall model helps coordinate the work. ## Incremental Development - The diagram represents an incremental development process. - The system is developed as a series of increments, each of which adds some functionality to the system. - *Outline description* of the system is written. This is then refined to produce a *specification*. - The system then goes through alternating cycles of *development and validation*. - By the end of the process, the system has been built in a series of increments with each increment building on the previous one. ## Incremental Development Benefits - 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. - 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. - More rapid delivery and deployment of useful software to the customer is possible. - Customers are able to use and gain value from the software earlier than is possible with a waterfall process. ## Incremental Development Problems - The process is not visible. - Managers need regular deliverables to measure progress. If systems are developed quickly, it is not cost-effective to produce documents that reflect every version of the system. - System structure tends to degrade as new increments are added. - Unless time and money is spent on refactoring to improve the software, regular change tends to corrupt its structure. Incorporating further software changes becomes increasingly difficult and costly. ## Waterfall vs. Agile - **Waterfall:** - The process looks like a series of phases, each building on the previous one. - All of the phases are completed before the system is deployed. - Risk of failing to meet the user's needs is high, since customer feedback is not actively sought until the final testing stage. - **Agile:** - The process looks like a series of cycles, each of which adds some functionality to the system. - Feedback from the customer is actively sought at each stage. - **Risk:** - The risk in the waterfall model is high at the beginning and low at the end. - The risk in the agile model is low at the beginning and high at the end. - **Value:** - In the waterfall model, the user doesn't get any value until the system is deployed. - In the agile model, the user gets some value from the system at each stage. ## Reuse-oriented Software Engineering - Based on **systematic reuse** where systems are integrated from existing components or COTS (Commercial-off-the-shelf) systems. - **Process stages:** - Component analysis: Identify potential reusable components. - Requirements modification: Existing requirements are adapted to take account of the available components. - System design with reuse: Reusable components are integrated into the system being developed. - Development and integration: The system is implemented using the reusable components. - **Reuse is now the standard approach for building many types of business systems.** ## Types of Software Component - **Web services** that are developed according to service standards and which are available for remote invocation. - **Collections of objects** that are developed as a package to be integrated with a component framework such as .NET or J2EE. - **Stand-alone software systems (COTS)** that are configured for use in a particular environment.

Use Quizgecko on...
Browser
Browser