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