what is software engineering? and why is it so hard?
Post on 19-Dec-2015
219 views
TRANSCRIPT
What is Software Engineering?
And why is it so hard?
What is Computer Science?
• Three paradigms (CACM 1/89)– Theory (math): definitions, theorems, proofs,
interpretations– Abstraction (science): hypothesize, model,
experiment, analyze data, results– Design (engineering): state requirements,
design, implement, test
What is Computer Engineering?
• The creative application of engineering principles and methods to the design and development of hardware and software systems [Government site]
• Computer Science in an Engineering School?
What is the difference between software engineering and computer science?
• Computer science is concerned with theory and fundamentals
• Software engineering is concerned with the practicalities of developing and delivering useful software
• Computer science theories are currently insufficient to act as a complete underpinning for software engineering
What is Software?
• Programs (instructions and data structures)
• Configuration files & Documentation!
• a data transformer .. or more?
• Data?
• System / Application
• Generic / Bespoke
• … Embedded, Distributed, Pervasive, …
What is Software Engineering?
• Term coined in 1967 by a NATO study group, recognizing the “software crisis”
• The Software Crisis: poor quality, budget overruns, deadlines missed
• Not really a crisis … more of a depression, or just a “problem”
• Why?
Hardware Improvements
• Software unfairly compared to hardware
• Need for software grows as hardware improves
• Changing goals
Percentage of system costs
0%
20%
40%
60%
80%
100%
55 65 75 85 95
Year
Hardware
Software
Softwaremntnance
Software complexity evolves
• 50’s - mid 60’s– batch orientation
– limited distribution
– custom software
• mid 60’s - mid 70’s– interactive
– multiuser
– realtime
– database
– product software
• mid 70’s - late 80’s– distributed systems
– high bandwidth communications
– consumer impact
• late 80’s - current– personal computers
– powerful desktops
– GUIs
– client-server
– OO technologies
– the Internet
Software is hard!
• No Silver Bullet, Fred Brooks, 1987, Essential Difficulties:– Complexity
– Conformity
– Changeability
– Invisibility
Software Engineering is …
• 1969 … the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines
• 1989 … the disciplined application of engineering, scientific, and mathematical principles and methods to the economical production of quality software
• 1991 … the systematic application of methods, tools, and technical concepts to create complex, software-intensive systems that meet technical, economic, and social objectives - it involves several disciplines including computer science, management, psychology, design, and economics.
Sommerville’s Definition
• Software engineering is an engineering discipline which is concerned with all aspects of software production
• Software engineers should:– adopt a systematic and organized approach to
their work– use appropriate tools and techniques depending
on the problem to be solved, the development constraints and the resources available
What are the key challenges facing software engineering?
• Coping with legacy systems– Old, valuable systems must be maintained and updated
• Coping with increasing diversity (heterogeneity)– Systems are distributed and include a mix of hardware
and software
• Coping with demands for fast delivery– There is increasing pressure for faster delivery of
software
Topics Include:
• Project management• Requirements
identification• Design• Testing• Maintenance• Quality• Process
• Verification• Tools• Modeling • Metrics• Risk management• Configuration
management• Reuse
Professional and ethical responsibility
• Software engineering involves wider responsibilities than simply the application of technical skills.
• Software engineers must behave in an honest and ethically responsible way if they are to be respected as professionals.
• Ethical behaviour is more than simply upholding the law.
Skills needed by Software Engineers
• “Hard” skills– Technological background– Ability to learn/adapt
• “Soft” skills– Communication– Sales and marketing– Teamwork