453 Quiz #1
Infrastructure as a service (IaaS)
Amazon Elastic Compute Cloud
Software design
Design a software structure that realizes the specification
Attributes of Good Software
Maintainability, Dependability, Efficiency, Acceptability
Software Process
The systematic approach used in software engineering is called a software process
The Principles of Agile Methods
(SLIDE 4)
Simple design
Enough design is carried out to meet the current requirements and no more.
Prototyping Problems
A general problem with prototyping is that the prototype may not necessarily be used in the same way as the final system:
The Rational Unified Process
A modern generic process derived from the work on the UML and associated process. A dynamic perspective that shows phases over time A static perspective that shows process activities A practice perspective that suggests good practice
prototype
A prototype is an initial version of a software system that is used to: Demonstrate concepts Try out design options, and Find out more about the problem and its possible solutions
On-site customer
A representative of the end-user of the system (the customer) should be available full time for the use of the XP team. In an extreme programming process, the customer is a member of the development team and is responsible for bringing system requirements to the team for implementation.
Development team
A self-organizing group of software developers, which should be no more than 7 people. They are responsible for developing the software and other essential project documents.
software process model
A software process model is a simplified representation of a software process.
Extreme Programming
A very influential agile method, developed in the late 1990s, that introduced a range of agile development techniques. Extreme Programming (XP) takes an 'extreme' approach to iterative/incremental development. New versions may be built several times per day Increments are delivered to customers every 2 weeks All tests must be run for every build and the build is only accepted if tests run successfully
Refactoring
All developers are expected to refactor the code continuously as soon as possible code improvements are found. This keeps the code simple and maintainable.
Test Automation
An automated test framework (e.g. JUnit) is a system that makes it easy to write executable tests and submit a set of tests for execution.
Test-first development
An automated unit test framework is used to write tests for a new piece of functioality before that functionality itself is implemented.
Product owner
An individual (or possibly a small group) whose job is to identify product features or requirements, prioritize these for development and continuously review the product backlog to ensure that the project continues to meet critical business needs. The Product Owner can be a customer but might also be a product manager in a software company or other stakeholder representative.
Change avoidance
Anticipate possible changes before significant rework is required Example: (rapid) prototyping (prototype development) A prototype may be developed to show some key features of the system
Interactive transaction-based applications
Applications that execute on a remote computer and are accessed by users from their own PCs or terminals. These include web applications such as e-commerce applications.
Continuous integration
As soon as the work on a task is complete, it is integrated into the whole system. After any such integration, all the unit tests in the system must pass.
Reducing the Costs of Rework
Change anticipation, Change tolerance, Change avoidance, Change Tolerance
Cloud computing
Cloud computing is an approach to the provision of computer services where applications run remotely on the 'cloud'.
Extreme Programming: Advantages
Communication , Simplicity, Feedback, Respect, Courage
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.
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.
What are the key challenges facing software engineering?
Coping with increasing diversity, demands for reduced delivery times and developing trustworthy software.
Pair programming
Developers work in pairs, checking each other's work and providing the support to always do a good job.
Early 1980s
Development of the Ada programming language (structured programming + information hiding). Proposals for software engineering environments. CASE tools introduced to support design methods. Development of algorithmic approaches to software costing and estimation. Publication of the 1st edition of our textbook as the first student textbook on software engineering. (1982)
Early 1970s
Development of the notions of structured programming. Publication of Parnas's paper on information hiding. Development of Pascal programming language. Development of Smalltalk languages which introduced notions of object-oriented development.
Late 1970s
Early use of software design methods such as Yourdon and Constantine's structured design
The Rise of Agile Methods
Focus on the code rather than the design Are based on an iterative approach to software development Are intended to deliver working software quickly and evolve this quickly to meet changing requirements.
Software products may be:
Generic products: software developed for a general market Customized products: software developed for a particular customer
What are the attributes of good software?
Good software should deliver the required functionality and performance to the user and should be maintainable, dependable, efficient and usable.
Platform as a service (PaaS)
Google App Engine, Rest APIs
Software as a service (SaaS)
Google Apps, Salesforce.com, Users do not buy software/hardware. They pay according to use.
Benefits of Software Reuse
Increased dependability, Reduced process risk, Effective use of specialists, Standards compliance, Accelerated development, Lower development cost
Problems with Reuse
Increased maintenance costs, Lack of tool support, Not-invented-here syndrome, Creating, maintaining, and using a component library, Finding, understanding, and adapting reusable components
Late 1980s
Increased use of object-oriented programming through languages such as C++ and Objective-C. Introduction of object-oriented design methods. Extensive use of CASE tools.
XP Practices
Incremental planning, Small releases, Simple design, Test-first development, Refactoring
Agile Manifesto
Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan
Waterfall Model Problems
Inflexible partitioning of the project into distinct stages makes it difficult to respond to changing customer requirements
Three types of cloud computing
Infrastructure as a service (IaaS), Platform as a service (PaaS), Software as a service (SaaS)
Late 1990s
Java is developed and released in the mid-1990s. Increasing attention paid to notions of software architecture. Client-server architectures are increasingly used. Notion of component-based software engineering is proposed. The UML is proposed, integrating several separately developed notations for representing object-oriented systems.
Sustainable pace
Large amounts of overtime are not considered acceptable as the net effect is often to reduce code quality and medium term productivity
Incremental Delivery Problems
Most systems require a set of basic facilities that are used by different parts of the system Iterative development can also be difficult when a replacement system is being developed. The essence of iterative processes is that the specification is developed in conjunction with the software.
Early 1990s
Object-oriented development becomes a mainstream development technique. Commercial tools to support requirements engineering become available.
XP Practices Part 2
Pair programming, Collective ownership, Continuous integration, Sustainable pace, On-site customer
The waterfall model
Plan-driven model Separate and distinct phases of specification and development 1) Requirements Definition 2) System and Software Design 3) Implementation and Unit Testing 4) Integration and System Testing 5) Operation and Maintenance
There are two main categories of software processes
Plan-driven processes, Agile processes
Process change
Process changes are proposed to address some of the identified process weaknesses.
Plan-driven processes
Processes where all of the process activities are planned in advance and progress is measured against this plan
Agile processes
Processes where planning is incremental and it is easier to change the process to reflect changing customer requirements
Agile processes
Processes where planning is incremental and it is easier to change the process to reflect changing customer requirements
Process descriptions may also include
Products, Roles, Pre-and-Post conditions
XP Testing Difficulties
Programmers prefer programming to testing and sometimes they take short cuts when writing tests. Some tests can be very difficult to write incrementally. It difficult to judge the completeness of a set of tests.
Incremental Delivery
Rather than deliver the system as a single delivery, the development and delivery is broken down into increments with each increment delivering part of the required functionality.
Common Examples of Refactoring
Re-organization of a class hierarchy to remove duplicate code The replacement of inline code with calls to methods that have been included in a program library
It was proposed that the adoption of an engineering approach to software development would
Reduce the costs of software development, Lead to more reliable software.
Incremental planning
Requirements are recorded on story cards and the stories to be included in a release are determined by the time available and their relative priority. The developers break these stories into development 'Tasks'. See Figures 3.5 and 3.6. (Next 2 slides)
What are the costs of software engineering?
Roughly 60% of software costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs.
Scrum
Scrum is an agile method that focuses on managing iterative development process rather than specific agile practices.
Software engineering is concerned with cost-effective software development.
Software costs more to maintain than it does to develop.
What is software engineering?
Software engineering is an engineering discipline that is concerned with all aspects of software production.
Software reuse
Software reuse is the dominant approach for constructing web-based systems.
What are the fundamental software engineering activities?
Software specification, software development, software validation and software evolution.
Incremental development
Specification, development and validation are interleaved May be plan-driven or agile
Application Types
Stand-alone applications, Interactive transaction-based applications, Embedded control systems, Batch processing systems, Entertainment systems, Systems for modelling and simulation, Data collection systems, Systems of systems
Change tolerance
Structure the software process in such a way that changes can be accommodated at relatively low cost Example: incremental delivery Proposed changes may be implemented in increments
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.
Testing and debugging are integral parts of software implementation
Testing and debugging are considered as two different processes. Testing is the performed by tester with the intent of finding a bug in an application. ... Debugging is a process of line by line execution(White Box Testing) of the code/ script with the intent of finding errors/ fixing the defects
Incremental Development Benefits
The cost of accommodating changing customer requirements is reduced. It is easier to get customer feedback on the development work that has been done. More rapid delivery and deployment of useful software to the customer is possible.
Process analysis
The current process is assessed, and process weaknesses and bottlenecks are identified.
Small releases
The minimal useful set of functionality that provides business value is developed first. Releases of the system are frequent and incrementally add functionality to the first release.
Collective ownership
The pairs of developers work on all areas of the system, so that no islands of expertise develop and all the developers take responsibility for all of the code. Anyone can change anything.
The agile approach, which focuses on iterative development and the reduction of overheads in the software process.
The primary characteristics of agile methods are rapid delivery of functionality and responsiveness to changing customer requirements.
Change tolerance
The process and software are designed so that changes can be easily made to the system.
Incremental Development Problems
The process is not visible. System structure tends to degrade as new increments are added.
process maturity
The process maturity approach, which focuses on improving process and project management and introducing good software engineering practice.
software crisis
The software crisis was the name given to the difficulties encountered in developing large, complex systems in the 1960s.
Potentially shippable product increment
The software increment that is delivered from a sprint. The idea is that this should be 'potentially shippable' which means that it is in a finished state and no further work, such as testing, is needed to incorporate it into the final product. In practice, this is not always achievable.
Change anticipation
The software process includes activities that can anticipate or predict possible changes before significant rework is required.
Reuse-oriented software engineering
The system is assembled from existing components May be plan-driven or agile
Three commonly used software process models:
The waterfall model, Incremental development, Reuse-oriented software engineering
What differences has the web made to software engineering?
The web has led to the availability of software services and the possibility of developing highly distributed service-based systems. Web-based systems development has led to important advances in programming languages and software reuse.
Stand-alone applications
These are application systems that run on a local computer, such as a PC. They include all necessary functionality and do not need to be connected to a network.
Batch processing systems
These are business systems that are designed to process data in large batches. They process large numbers of individual inputs to create corresponding outputs.
Embedded control systems
These are software control systems that control and manage hardware devices. Numerically, there are probably more embedded systems than any other type of system.
Systems of systems
These are systems that are composed of a number of other software systems
Systems for modelling and simulation
These are systems that are developed by scientists and engineers to model physical processes or situations, which include many, separate, interacting objects.
Entertainment systems
These are systems that are primarily for personal use and which are intended to entertain the user.
Data collection systems
These are systems that collect data from their environment using a set of sensors and send that data to other systems for processing.
Product backlog
This is a list of 'to do' items which the Scrum team must tackle. They may be feature definitions for the software, software requirements, user stories or descriptions of supplementary tasks that are needed, such as architecture definition or user documentation.
Software implementation
Translate this structure into an executable program
Early 2000s
Use of integrated development environments becomes more common. Use of the UML becomes widespread. Increasing use of scripting languages such as Python
What are the best software engineering techniques and methods?
While all software projects have to be professionally managed and developed, different techniques are appropriate for different types of system. For example, games should always be developed using a series of prototypes whereas safety critical control systems require a complete and analyzable specification to be developed. You can't, therefore, say that one method is better than another.
Process measurement
You measure one or more attributes of the software process or product.
software engineering was suggested at
conferences organized by NATO in 1968 and 1969 to discuss the software crisis.
The systematic approach used in software engineering is called a
software process
Software specification
where customers and engineers define the software that is to be produced and the constraints on its operation.
Software validation
where the software is checked to ensure that it is what the customer requires
Software development
where the software is designed and programmed
Software evolution
where the software is modified to reflect changing customer and market requirements