Chapter 1- Introduction

advertisement
CS 360
Lecture 1
 Definition:
 Software engineering covers technical aspects of building software systems, along with
management issues such as directing programming teams, scheduling, and budgeting.
 More and more systems are software controlled
 National infrastructures: utilities, communication, navigation
 Entertainment: music, movie/television, games
 Residential: community design, landscaping
 Science/Data Collection: biology, chemistry, physics, engineering, …
 Social Interactions: email, social networks, text messaging
 Computer Science:
 Study design of algorithms, languages, hardware and software architectures, and
complexities such as space and time.
 Foundation based on mathematics and theory.
 Why does it work?
 Software Engineering:
 Study design of creating high quality software that provides a solution to a given problem
using controlled, systematic, and efficient design techniques.
 Foundation based on problem solving.
 How does it work?
 The economies of ALL developed nations are dependent on software.
 Software represents a significant fraction of GDP in all developed countries.
 1997: $149 billion
 1.7% U.S. GDP
 2012: $526 billion
 3.2% U.S. GDP
 The use of software has also increased the productivity of other industries.
 15% increase in all U.S. labor productivity from 2004 to 2012.
 Software accounted for $101 billion in overall production in 2012.
 Software Jobs:




1990:
1995:
2010:
2014:
778,000
1,083,000
2,095,000
2,501,000
 Software jobs growing faster than any other jobs.
 2014: 2.2% of all U.S. employment
 Software industry directly responsible for ~3.65 million U.S. jobs
 Software industry employment grows on average by 3.1% Every Year.
 Average salary for new employees in the software industry:
$86,457
 Average salary per person in the U.S.: $27,000
 Software costs often dominate computer system costs.
 The costs of software on a PC are often greater than the hardware cost.
 The apparent problem of incomplete, poorly written software became
referred to as "the software crisis".
 Computers (both software and hardware) were created as 'one-off' items for particular
applications.
 With the emergence of large and powerful general purpose mainframes (such
as the IBM 360, and now distributed/virtualized cloud architectures) large
and complex systems became possible.
 People began to ask why project failures were so much more common than with other
large projects.
 The late 1960s introduced the new discipline of Software Engineering.
 A number of fundamental problems with the process of software development were
identified:
1.
Frequently, software was never completed, even after further significant
investment had been made.
2.
The amount of work involved in removing flaws and bugs from "completed"
software, to make it useable, often took a considerable amount of time - often
more than had been spent in the writing it in the first place.
3.
The functionality of the software seldom matched the requirements of the endusers.
4.
Once created, software was almost impossible to maintain; the developer's
ability to understand what they had written appeared to decrease rapidly over
time.
 Software costs more to maintain than it does to develop. For systems with a long
life, maintenance costs may be several times development costs.
 Software engineering is concerned with cost-effective software development.
 First determine the needs of the user.
 Then design, construct, test, and maintain the software system.
 Role of the software engineer:
1.
Research – the software engineer should seek new principles and processes by
employing mathematical and scientific concepts, experimental techniques, and
inductive reasoning.
2.
Design – the software engineer selects methods and materials to satisfy technical
requirements and to meet performance specifications.
3.
Development – the software engineer applies the results of research to useful
purposes. Ingenious and creative application of new knowledge may result in a
working software prototype.
4.
Construction – the software engineer determines procedures that will economically
and safely yield the desired software product.
5.
Management – the software engineer may be responsible for deciding how assets
are used, project team management, determining economic feasibility, and resolving
problems.
 Generic products
 Stand-alone systems that are marketed and sold to any customer who wishes to buy them.
 Examples –
 PC software such as graphics programs, games
 Project management tools
 CAD software
 Software for specific markets such as appointments systems for dentists, doctors
 Customized products
 Software that is commissioned by a specific customer to meet their own needs.
 Examples –
 Embedded control systems
 Air traffic control systems
 Traffic monitoring systems
12
 Generic products
 The specification of what the software should do is owned by the software developer.
 Microsoft Office 365
 Google Gmail
 Android OS
 Customized products
 The specification of what the software should do is owned by the customer.
 Embedded system control for automated manufacturing
 Hospital systems for storing patient data
 Billing systems for super markets and gas stations
13
 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 are the attributes of good software?
 Good software should deliver the required functionality and performance to the
user and should be maintainable, dependable and usable.
 What is software engineering?
 Software engineering is an engineering discipline that is concerned with all
aspects of software production.
14
 What are the key challenges facing software engineering?
 Coping with increasing diversity
 Demands for reduced delivery times
 Developing trustworthy software
15
Product characteristic
Description
Maintainability
Software should be written in such a way so that it can evolve to meet the
changing needs of customers. This is a critical attribute because software
change is an inevitable requirement of a changing business environment.
Dependability and security
Software dependability includes a range of characteristics including
reliability, security and safety. 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.
Efficiency
Software should not make wasteful use of system resources such as
memory and processor cycles. Efficiency therefore includes
responsiveness, processing time, memory utilisation, etc.
Acceptability
Software must be acceptable to the type of users for which it is designed.
This means that it must be understandable, usable and compatible with
other systems that they use.
16
 More and more, individuals and society rely on advanced software systems..
 Education
 Social media
 Smart home devices
 Communication
 It is usually cheaper, in the long run, to use software engineering methods
and techniques for developing software systems rather than ad-hoc software
development.
 67% of the software system’s life spent in maintenance phase.
 Who’s maintaining the software?
17
 Software specification:
 where clients and engineers define the software that is to be produced and the
constraints on its operation.
 Performed by: clients and software engineering team
 Software development:
 where the software is designed and programmed.
 Performed by: software engineering team
 Software validation:
 where the software is checked to ensure that it is what the customer requires.
 Performed by: clients and software engineering team
 Software evolution:
 where the software is modified to reflect changing customer and market requirements.
 Performed by: software engineering team
18
 Heterogeneity
 Increasingly, systems are required to operate as distributed systems across networks that
include different types of computer and mobile devices.
 Mobile devices
 Business and social change
 Business need to be able to change their existing software and to rapidly develop new
software.
 Security and trust
 As software is intertwined with all aspects of our lives, it is essential that we can trust that
software.
 Fitness monitoring software
 Banking software
 Cloud enabled software
19
 There are many different types of software systems.
 There is no universal set of software techniques that is applicable to all of these.
 Ex: Techniques for building the embedded software system for autonomous robots versus
techniques for building software systems used for metadata harvesting.
 The software engineering methods and tools used depend on:
 The type of application being developed
 The requirements of the client
 The background of the development team
 In this class, the teams will be diverse, and the client’s requests may change over time.
20
 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.
 These are becoming increasingly uncommon
 Example?
 Interactive transaction-based applications
 Applications that execute on a remote computer and are accessed by users from their
own PCs or terminals.
 Email
 Dropbox
 Embedded control systems
 These are software control systems that control and manage hardware devices.
Numerically, the most common type of system.
 Traffic control systems
 Automotive control systems
 HVAC control systems
21
 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.
 Bank transaction systems
 Inventory tracking systems
 Entertainment systems
 These are systems that are primarily for personal use and which are intended to entertain the
user.
 Gaming systems
 DVD/Blue-Ray systems
 Systems for modeling and simulation
 These are systems that are developed by scientists and engineers to model physical processes
or situations.
 CloudSim
 NS2
22
 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.
 Hobo environmental sensor systems
 Inventory tracking with RFID
23
Download