Software Engineering
Software Platform
The environment in which the software will execute. Includes the operating system, database, middleware, and other application systems.
Data Collection and Analysis Systems
These are systems that collect data from their environment and send that data to other systems for processing. The software may have to interact with sensors and often is installed in a hostile environment such as inside an engine or in a remote location.
Systems of Systems
These are systems, used in enterprises and other large organizations, that are composed of a number of other software systems.
Costs of Software Engineering
60% development costs, 40% testing costs (For custom software, evolution costs often exceed development costs)
Software Design
A description of the structure of the software to be implemented, the data models and structures used by the system, the interfaces between system components and, sometimes, the algorithms used. Design inputs (Platform information, software requirements, and data descriptions) -> Design activities (Architectural design, interface design, database design, and component selection and design) -> Design outputs (System architecture, Database design, Interface specification, and Component descriptions)
Rational Unified Process (RUP)
A flexible model that can be instantiated in different ways to create processes that resemble any of the general process models (Waterfall, Incremental, and Integration/Configuration). Brings together elements of all the general process models and supports prototyping and incremental delivery of software.
Computing Cloud
A huge number of linked computer systems that is shared by many users. Users do not buy the software but pay according to how much their software is used or are given free access in return for watching advertisements. Examples include web-cased mail, storage, and video.
Software Development Life Cycle (SDLC or Software Process Model)
A simplified representation of a software process. Each process model represents a process from a particular perspective and this only provides partial information about the process.
Stages of Testing
A three-stage testing process in which system components are individually tested, then the integrated system is tested. For custom software, customer testing involves testing the system with real customer data also known as "beta testing". The three stages are: 1. Component testing -- each part is tested independently 2. System testing -- each part is testing as they interact with other parts 3. Customer testing -- tested with real customer data, rather than stimulated test data ...then repeat
Software Systems
Abstract and intangible. Can become extremely complex, difficult to understand, and expensive to change. More than one program.
4 Product Characterisitcs
Acceptability, Dependability/Security, Efficiency, and Maintainability
Prototype
An early 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. Four stages include: 1. Prototype plan 2. Outline definition 3. Executable prototype 4. Evaluation report
Software Engineering
An engineering discipline that is concerned with all aspects of software production from initial conception to operation and maintenance (includes all associated documentation, libraries, support websites, and configuration data that are needed to make programs useful). Concerned with the practicalities of developing and delivering software. Concerned with practical problems of producing software. A systematic approach to the production of software that takes into account practical cost, schedule, and dependability issues, as well as the needs of software customers and producers. The specific methods, tools, and techniques used depend on the organization developing the software, the type of software, and the people involved in the development process. There are no universal software engineering methods that are suitable for all systems and all companies.
Software
Computer programs and associated documentation. May be developed for a particular customer or may be developed for a general market.
System Engineering
Concerned with all aspects of computer-based systems development including hardware, software, and process engineering. Concerned with the evolution of complex systems where software plays a major role. Concerned with hardware development, policy and process design, and system development, as well as software engineering. System Engineers are involved in specifying the system, defining overall architecture, and then integrating the different parts to create the finished system.
System Documentation
Describes the structure of the system.
Engineering Discipline
Engineers make things work. They apply theories, methods, and tools where these are appropriate. However, they use them selectively and always try to discover solutions to problems even when there are no applicable theories and methods.
Defect Testing
Establishes the existence of defects.
Business and Social Change
Existing software needs to be updated and new software needs to be developed as emerging economies develop and new technologies become available. The time required for software to deliver value to is customer has to be reduced.
User Documentation
Explains how to use the system.
Scale
Software has to be developed from very small embedded systems in portable or wearable devices though to Internet/cloud-based systems that serve a global community.
Debugging
Finding/Locating and fixing/correcting program defects.
Computer Science
Focus on theory and fundamentals. Concerned with the theories and methods that underlie computers and software system. Computer Science Theory is most applicable to relatively small programs. Elegant Computer Science Theories are relevant to large, complex problems that require a software solution.
Process Maturity Approach
Focused on improving process and project management and introducing good software engineering practice into an organization. Levels include: 1. Initial - Goals associated with the process area are satisifed, and the scope of work is explicitly set out and communicated to the team members 2. Managed - Goals associated with the process area are met, and organizational policies are in place that define when each process should be used. 3. Defined - Focuses on organizational standardization and deployment of processes. 4. Quantitatively Managed - There is an organizational responsibility to use statistical and other quantitative methods to control sub-processes. 5. Optimizing - The organization must use the process and product measurements to drive process improvement. ONLY large software companies now use this approach to software process improvement.
Agile Approach
Focused on iterative development and the reduction of overheads in the software process. Includes rapid delivery of functionality and responsiveness to changing customer requirements.
2 Factors of Software Failures
Increasing system complexity and failure to use software engineering methods
Heterogeneity
Increasingly, systems are required to operate as distributed systems across networks that include different types of computer and mobile devices.
Security and Trust
Malicious users must not be able to attack software so that information security is maintained.
Process Improvement Cycle
Measure -> Analyze -> Change -> repeat 1. Measurement - Measure one or more attributes of the software process or product. 2. Analysis - The current process is assessed and process weaknesses and bottlenecks are identified. 3. Change - Proposed to address some of the identified process weaknesses.
Agile Process
Planning is incremental and continual as the software is developed. It is therefore easier to change the process to reflect the changing customer or product requirements.
Plan-Driven Process
Processes where all of the process activities are planned in advance and progress is measured against this plan.
V-Model of Development
Shows the software validation activities that correspond to each stage of the waterfall process model/plan-driven software process.
Software Process
Software Specification, Development, Validation, and Evolution. A set of related activities that leads to the production of a software system. There is no universally applicable software process. The process used in different companies depends on the type of software being developed, the requirements of the software customer, and the skills of the people writing the software. Important to describe who is involved (Roles), what is produced (Products or Deliverables ), and conditions that influence the sequence of activities (Pre- and Pstconditions)
Reasons People Write Programs
Spreadsheets to simplify jobs, process experimental data, interests and enjoyment.
Generic Products
Stand-Alone systems that are produced be a development organization and sold on the open market to any customer who is able to buy them. The organization that develops the software controls the software specification. Examples include: apps for mobile devices, software for PCs such as databases, word processors, drawing packages, and project management tools.
Customized (or Bespoke) Software
Systems that are commissioned by and developed for a particular customer. The specification is developed and controlled by the organization that is buying the software. Examples include: control systems for electronic devices, systems written to support a particular business process and air traffic control systems.'
Sensor-Based Data Collection System
The primary focus of this system is to collect data from a set of sensors and to process that data in some way. Issues include reliability, even in hostile environmental conditions, and maintainability. Examples include a wilderness weather station.
Information System
The primary purpose of this system is to manage and provide access to a database of information. Issues typically include security, usability, privacy, and maintaining data integrity. Examples include a medical record system.
Stand-alone Applications
These are application systems that run on personal computer or apps that run on a mobile device. Includes all necessary functionality and may not need to be connected to a network.
Interactive Transaction-Based Applications
These are applications that execute on a remote computer ans that are accessed by users from their own computers, phones, or tablets. These include web applications where you interact with a remote system to buy goods and services. Often incorporates a large data store that is accessed and updated in each transaction.
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. Very expensive to change, therefore needs extensive verification and validation so that the chances of having to recall to fix software problems are minimized. Examples include periodic billing systems, such as phone billing systems and salary payment systems.
Embedded Control Systems
These are software control systems that control and manage hardware devices. Examples include the software in a mobile phone, software that controls antilock braking in a car, and software in a microwave oven to control the cooking process.
Entertainment Systems
These are systems for personal use that are intended to entertain the user.
Systems for Modeling and Simulation
These are systems that are developed by scientists and engineers to model physical processes or situations, which include many separate, interacting objects. These are often computationally intensive and require high-performance parallel systems for execution.
Incremental Development
This approach interleaves the activities of specification, development, and validation with rapid feedback across activities. The system is developed as a series of versions (increments), with each version adding functionality to the previous version. The most common approach for the development of application systems and software products. Can be plan-driven, agile, or a mixture of these approaches. Cheaper and easier to make changes in the software as it is being developed. Each version of the system incorporates some of the functionality that is needed by the customer. Early stages include the most important/urgent required functionality. Early delivery and deployment of useful software to the customer is possible, even if all of the functionality has not been included. Problems include: Managers need regular deliverables to measure progress because the process is not visible. System structure tends to degrade as new increments are added. Examples include software products.
Integration and Configuration
This approach relies on the availability of reusable components or systems. The system development process focuses on configuring these components for use in a new settings and integrating them into a system. Use for parts of the system that are difficult to specify in advance. Three types of software components are frequently reused: Stand-alone application systems, Collections of objects, and web services. The stages in this process include: 1. Requirements specification 2. Software discovery and evaluation 3. Requirements refinement 4. Application system configuration 5. Component adaptation and integration Reduces the amount of software to be developed which reduces costs and risks. Usually leads to faster delivery of the software. However, requirements compromises are inevitable, and may lead to a system that does not meet the real needs of users. Some control over the system evolution is lost as new version of the reusable components are not under the control of the organization using them. Examples include business systems.
The Waterfall Model (Software Life Cycle)
This approach takes the fundamental process activities of specification, development, validation, and evolution, and represents them as separate process phases such as requirements specification, software design, implementation, and testing. 1. Requirements analysis and definition/System specification 2. System and software design 3. Implementation and unit testing 4. Integration and system testing/Delivery to customer 5. Operation and maintenance/Fix bugs Plan-driven process -- Lots of analysis and documentation is required before implementation begins. Examples include safety-crucial software, embedded systems, large software systems that are part of broader engineering systems developed by several partner companies.
Embedded System
This is a system where the software controls some hardware device and is embedded in that device. Issues typically include physical size, responsiveness, and power management. Examples include the software system to control an insulin pump for people with diabetes.
Support Environment
This is an integrated collection of software tools that are used to support some kind of activity. Examples include programming environments, such as Eclipse, that is used to support students' learning in schools.
Process Paradigm
Very general process models. High-level, abstract descriptions of software processes that can be used to explain different approaches to software development. Basically, process frameworks that may be extended and adapted to create more specific software engineering processes.
Why Software Engineering is Important
We need to be able to produce reliable and trustworthy advanced software systems economically and quickly. Failure to use software engineering method leads to higher costs for testing, quality assurance, and long-term maintenance.
System Prototyping
Where a version of the system or part of the system is developed quickly to check the customer's requirements and the feasibility of design decisions. This is a method of change anticipation as it allows users to experiment with the system before delivery and so refine their requirements.
Software Specification
Where customers and engineers define the software that is to be produced and the constraints on its operation. The functionality of the software and constraints on its operation must be defined. Also known as Requirements Engineering -- the process of understanding and defining what services are required from the system and identifying the constraints on the system's operation and development Particularly critical stage of the software process, as mistakes made at the stage lead to later problems in te system design and implementation. End-users and customers require a high-level statement of the requirements, whereas system developers need a mote detailed system specification. Three main activities include: 1. Requirements elicitation and analysis 2. Requirements specification 3. Requirements validation
Software Validation
Where the software is checked to ensure that it is what the customer requires. Intended to show that a system both confirms to its specification and meets the expectations of the system customer. The software must be validated to ensure that it does what the customer wants. Known as Verification and Validation (V & V). May include checking processes, such as inspections and reviews, at each stage of the software process from user requirements definition to program development.
Software Development
Where the software is designed and programmed. The software to meet the specification must be produced. 4 activities that may be a part of this process for information systems: 1. Architectural design 2. Database design 3. Interface design 4. Component selection and design *Timing design may also be another activity included
Software Evolution
Where the software is modified to reflect changing customer and market requirements. The software must evolve to meet changing customer needs.
Incremental Delivery
Where the system increments are delivered to the customer for comment and experimentation. This supports both change avoidance and change tolerance. Advantages include: customers can use early increments as prototypes and gain experience, relatively easy to incorporate changes into the system, highest priority services are delivered first. Problems include: Problematic when the new system is intended to replace an existing system, hard to identify common facilities that are needed by all increments, no complete system specification until the final increment is specified which requires a new form of contract.
Program Testing
Where the system is execute using stimulated test data