Software Engineering Lecture Notes PDF

Summary

These lecture notes cover the fundamental concepts of software engineering, including motivation, definitions, and historical context. They also discuss frequently asked questions and key points related to software.

Full Transcript

Lecture # 1: Topic: The Scope of Software Engineering: Motivation and need for software engineering, Definition of Software Engineering, Introduction to software engineering vocabulary. Why Software Engineering is Important? ◦ Financial, security, and safety critical systems rely on software ◦...

Lecture # 1: Topic: The Scope of Software Engineering: Motivation and need for software engineering, Definition of Software Engineering, Introduction to software engineering vocabulary. Why Software Engineering is Important? ◦ Financial, security, and safety critical systems rely on software ◦ The economies of all developed nations are dependent on software ◦ There is an increasing need to cost effectively develop high-quality software Motivation and need of software engineering: 1.Higher rate of change in user requirements 2.Environment on which the software is working. 3.Large software 4.Scalability 5.Cost 6.Dynamic Nature 7.Quality Management Motivation and need of software engineering:  To predict time, effort, and cost  To improve software quality  To improve maintainability  To meet increasing demands  To lower software costs  To successfully build large, complex software systems  To facilitate group effort in developing software So what is Software Engineering?  The branch of engineering associated with the development of software product using well-defined scientific principles, methods and procedures is called software engineering.  The outcome of software engineering is an efficient and reliable software product  Improve quality and Reduce costs What is Software Engineering (SE)? ◦ Software engineering is an engineering discipline that applies theories, methods, and tools to solve problems related to software production and maintenance ◦ Software engineers strive to deliver high-quality software, on time and within budget Definition of Software Engineering by IEEE: ◦ The application of a systematic, disciplined, quantifiable (measureable) approach to the development, operation and maintenance of software. ◦ We can alternatively view Software Engineering as: A systematic collection of past experience. The experience is arranged in the form of methodologies and guidelines. Two Important tools used by Software Engineering to reduce problem complexity:  1. Abstraction. The principle of abstraction implies that a problem can be simplified by omitting irrelevant details. ◦ In other words, the main purpose of abstraction is to consider only those aspects of the problem that are relevant for certain purpose and putdown other aspects that are not relevant for the given purpose. ◦ Once the simpler problem is solved, then the omitted details can be taken into consideration to solve the next lower level abstraction, and so on. Abstraction is a powerful way of reducing the complexity of the problem.  2. Decomposition. In this technique, a complex problem is divided into several smaller problems and then the smaller problems are solved one by one. History of software engineering:  The notion of ‘software engineering’ was first proposed in 1968 at a conference held to discuss what was then called the ‘software crisis’ (Naur and Randell, 1969).  It became clear that individual approaches to program development did not scale up to large and complex software systems. These were unreliable, cost more than expected, and were delivered late.  Throughout the 1970s and 1980s, a variety of new software engineering techniques and methods were developed, such as: ◦ structured programming ◦ information hiding ◦ object-oriented development. ◦ Tools and standard notations were developed and are now extensively used. Frequently Asked Questions about software: Historical Perspective (cont.)  1980s: networking, personal computing, embedded systems, parallel architectures  1990s: information superhighway, distributed systems, OO in widespread use.  2000s: virtual reality, voice recognition, video conferencing, global computing  2010s: autonomous vehicles, new security awareness,.. Hardware Costs vs Software Costs Why is software so expensive?  Hardware has made great advances  But, software has made great advances...  We do the least understood tasks in software. ◦ When task is simple & understood, encode it in hardware ◦ Why?  Demand more and more of software ◦ Consider your cell phone Size of programs continues to grow  Trivial (small): 1 month, 1 programmer, 500 LOC, ◦ Intro programming assignments  Very small: 4 months, 1 programmer, 2000 LOC ◦ Course project  Medium: 3 years, 10s of programmers, 100K LOC ◦ Optimizing compiler  Large: 5 years, 100s of programmers, 1M LOC ◦ MS Word, Excel  Very large: 10 years, 1000s of programmers, 10M LOC ◦ Air traffic control, ◦ Telecommunications, space shuttle  Very, Very Large: 15+ years, 1000s programmers, 35M LOC ◦ W2K  Ultra-Large Scale: ? years, ? developers distributed, 1000s of sensors, decision units, heterogeneous platforms, decentralized control Intelligent transportation systems; healthcare systems Whatʼs the problem?  Software cannot be built fast enough to keep up with ◦ H/W advances ◦ Rising expectations ◦ Feature explosion  Increasing need for high reliability software Whatʼs the problem? (cont)  Software is difficult to maintain “aging software”  Difficult to estimate software costs and schedules  Too many projects fail  Why ? Why is software development so difficult?  Communication ◦ Between customer and developer  Poor problem definition is largest cause of failed software projects  Within development team  More people = more communication  New programmers need training Why is software development so difficult? (cont)  Project characteristics ◦ Novelty ◦ Changing requirements  5 x cost during development up to 100 x cost during maintenance ◦ Hardware/software conjuration ◦ Security requirements ◦ Real time requirements ◦ Reliability requirements Why is software development so difficult? (cont)  Personnel characteristics ◦ Ability ◦ Prior experience ◦ Communication skills ◦ Team cooperation ◦ Training Why is software development so difficult? (cont)  Facilities and resources ◦ Identification ◦ Acquisition Why is software development so difficult? (cont)  Management issues ◦ Realistic goals ◦ Cost estimation ◦ Scheduling ◦ Resource allocation ◦ Quality assurance ◦ Version control ◦ Contracts Key Points:  Software is developed or engineering but not manufactured.  Understand the problem before you build a solution.  Software does not wear-out but it is deteriorate or decline.  Advice: if you want to reduce software deterioration, you will have to do better software design. Summary:  Motivation and Need of Software Engineering  What is Software Engineering?  Short history  Frequent questions about software  Key points