Software Engineering I Session 1 Introduction to Software




































- Slides: 36
Software Engineering I Session 1 Introduction to Software Engineering
Engineering • Engineering is the utilisation of processes, methods, techniques and tools to design, build, and maintain objects. • An engineer is a professional who – applies processes, methods, techniques and tools – to solve problems within a specific domain (e. g. chemical engineering, aeronautical engineering, software engineering, etc. ).
Characteristic of engineering • Engineers make things work – They apply theories, methods, and tools where these are appropriate – They try to discover solutions to problems even when there are no applicable theories or methods – Work within organisational and financial constraints • In summary – Get results of required quality within schedule and budget. – Often involves compromises---not perfectionists, no ideologists
Software • Software is a set of instructions for a computer to perform a specific task or tasks? • Software is variously referred to as a program, a script or an application • However … • When we are talking about software engineering, software means – Program + configuration files + – Associated documentation (system and user documents), libraries, support websites, configuration data
Software Engineering • Software engineering is the engineering discipline that is concerned with all aspects of software production, from system inception through to system use and maintenance. • The systematic application of scientific and technological knowledge, methods, and experience to the design, implementation, testing, and documentation of software. —IEEE Systems and software engineering • The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software —IEEE Standard Glossary of Software Engineering Terminology
A bit of history • The 40 th International Conference on Software Engineering (ICSE 2018) celebrates 50 years of "Software Engineering" ! • Software crisis: – – – Projects running over-budget/time Software was very inefficient, of low quality, Software often did not meet requirements Projects were unmanageable and code difficult to maintain Software was never delivered Software production rate was too low • The causes of the software crisis were linked to the overall complexity of hardware and the software development process.
Remarks • Engineering discipline – It is the aggregation of processes, methodologies, techniques and tools that have evolved in the field of software development over the past fifty years. • All aspects of software production – Not just concerned with the technical processes of software development • A software engineer is a professional who is concerned with all or most aspects of software development (designing, building, testing and maintaining software) – systems analyst, a programmer, or a software tester.
Software Engineering and Project Management • Software engineering, as a discipline, is concerned with both the technical and project management aspects of software development. • The technical aspect of software engineering is focused on individual technical skills, such as system modelling and programming. • The project management aspect of software engineering is focused on activities with project wide scope, such as planning, risk management, people management, budget control, etc.
What is unique about SE • Software engineering is different from other types of engineering in a number of ways: – The product is intangible – Large software projects are often one-off projects • Rapid technological changes in computers and communications can make experience obsolete – Software processes are variable and organisation-specific
Importance of Software – Software helps us confront many of the challenges facing us as a species (e. g. climate change mitigation, disease prevention, food production, etc. ) – Software permeates and controls almost every aspect of our daily lives. – Software defines “everything” • Software-defined network, Software-defined radio, Io. T
Importance of Software Engineering • Individuals and society rely on advanced software systems – Good software engineering practices help to ensure reliability, security and safety. – Reliable and trustworthy system economically and quickly • It is cheaper, in the long run, to use software engineering methods and techniques for professional software systems • Failure to use software engineering methods leads to higher costs for testing, quality assurance and long-term maintenance.
Challenges of Software Engineering • Software engineers face significant challenges in the quest to design and build successful software. These include: How to deal with the growing number of application types, devices and platforms. Complexity How to effectively produce larger and more complex systems. Interoperability How to make diverse, distributed, systems flexible enough to work together. Legacy Systems How to update, replace or maintain ageing systems. Diversity Business demands Ethics How to produce software quickly and in a cost effective manner. How to meet the evolving ethical challenges posed by the prevalence of digital technologies.
Software Engineering Diversity • There is no single software engineering approach that is applicable to all systems. • The software engineering approach used will depend on: – The type of application being developed. • Software controlling a jumbo jet. • An interactive game app for IOS devices. • An accounts management system for a mobile phone company. – – The specific requirements of the customer. The size and scope of the system being developed. The expertise of the development team. The approach being employed (e. g. COTS, software reuse, bespoke, software as a service).
Different classes of software • Two kinds of software product – Generic product vs customised product • 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, project management tools; CAD software; software for specific markets (e. g. appointments systems for dentists) • Customised products – Software commissioned by a specific customer to meet their own needs. – Examples: embedded control systems, air traffic control software, traffic monitoring systems.
Application types (I) • Stand-alone applications – application systems that run on a local computer. They include all necessary functionality and do not need to be connected to a network. • Interactive transaction-based applications – Applications that execute on a remote computer and are accessed by users from their own PCs or terminals. These include web applications such as ecommerce applications. • Embedded control systems – software control systems that control and manage hardware devices. Numerically, there are probably more embedded systems than any other type of system (surprising? ) • Data collection systems – systems that collect data from their environment using a set of sensors and send that data to other systems for processing. (Big data analytics platform)
Application types (II) • Batch processing systems – business systems that are designed to process data in large batches. They process large numbers of individual inputs to create corresponding outputs. ( E. g. Phone billing systems, salary payment systems) • Entertainment systems – systems that are primarily for personal use and which are intended to entertain the user. • Systems for modelling and simulation – systems that are developed by scientists and engineers to model physical processes or situations, which include many, separate, interacting objects. • Systems of systems – systems that are composed of a number of other software systems.
Software engineering fundamentals • Some fundamental principles apply to all types of software system, irrespective of the development techniques used: – Systems should be developed using a managed and understood development process – Dependability and performance are important for all types of system – Understanding and managing the software specification and requirements (what the software should do) are important – Where appropriate, reuse software that has already been developed rather than write new software
processes, methods, techniques, tools
Software Engineering Processes • A software process is an abstract representation of the activities needed for the development of a software product. • There are several distinct software process models in software engineering (e. g. waterfall, incremental, iterative etc. ). • Four fundamental phases common to all software process models. Software specification Defining the software and specifying constraints on its use. Software Designing and building the software. development Software validation Testing the software to ensure it meets requirements, and is safe, secure, dependable and reliable. Software evolution Modifying the software to meet changes in the business or organisational context.
Software Engineering Methodologies • A software engineering methodology is a detailed set of guidelines for developing software – Usually refers to the general framework, principles, or paradigm • A software engineering methodology specifies elements such as: – – – The required inputs and outputs of the software process phases. The documents that need to be produced during the development process. The techniques to be used for performing individual tasks. The tools to be used for completing tasks. Team roles and responsibilities in the development process. • Examples of software engineering methodologies include Scrum, Unified Process, and Extreme Programming.
Software Engineering Techniques • In software engineering, a technique refers to a set of detailed guidelines for how an individual task should be performed. Task Technique Requirements Specification FURPS, Use Cases Data Modelling Entity Relationship Modelling, UML Class Diagram Process Modelling Data Flow Diagram, UML Activity Diagram User Interface Modelling UX Design, Scenarios
Software Engineering Tools • Software engineering tools are computer programs – intended to assist the software development process. • Tools can be applied at any stage of the development process – e. g. specification, development, etc. • Tools allow repetitive, well-defined actions to be automated – reducing the cognitive load on the software engineer • Commercially available tools range in size and complexity – from simple code editors to complex integrated development environments (IDEs), capable of supporting an entire software project.
Characteristics of Successful Software • Successful software will display the following characteristics: Maintainability Software should be sufficiently flexible so that it can adapt to a rapidly changing organisational context. Reliability Software should perform to expectations. It should be fault free. Safety Software should not pose a threat to the physical or mental well-being of users. Security Software should be resilient to malicious attacks. Efficiency Software should not waste system resources such as memory and processor cycles. Acceptability Software must be acceptable to users. It must be understandable, usable and compatible with other systems in the same class.
Software Failure • There are countless examples of successful software projects. • But there also MANY examples of failures. – – – Heathrow Terminal 5 Baggage System Nissan Airbags Ariane 5 RBS NHS Patient Record System • The failure rate for software projects is significantly higher than in other engineering disciplines.
Impact of Software Failure • Software failure can have diverse and significant impacts: – Social impact • Loss of life • Injury – Economical impact • Loss of investment • Loss of revenue • Loss of customer confidence • Erosion of reputation/brand image
Measuring Software Performance • Some software projects are obviously and unquestionably failures. • However, the success or failure of the majority of software systems is more difficult to ascertain. • To ascertain success or failure we use a range of software metrics. • Example software metrics (or criteria) include: – – – – User satisfaction The extent to which a program meets pre-stated success criteria Cost effectiveness Application crash rate Code complexity Number of reported bugs Mean time between failures (MTBF)
Reasons for Software Project Failure • Software failure almost always stems from – Increasing system complexity; new SE techniques have to developed to meet the new challenges – inadequacies in software engineering practices • Examples of inadequate software engineering practice that contribute to failure include: – – – – Poorly defined system requirements Poor communication among customers, developers, and users Inadequate testing Unmanaged risks Unrealistic project goals Poor development practices Poor project management
We now turn to the non-technical part of SE…
The Context of Software Engineering • Software engineering involves wider responsibilities than simply the application of technical skills. • Software engineers have a responsibility to operate within existing legal, ethical and social frameworks. • Ethical behaviour is more than simply upholding the law but involves following a set of principles that are morally correct.
Professional responsibility • Confidentiality – respect the confidentiality of their employers or clients irrespective of whether or not a formal confidentiality agreement has been signed. • Competence – not misrepresent their level of competence. They should not knowingly accept work which is outside their competence • Intellectual property rights – be aware of local laws governing the use of intellectual property such as patents, copyright, etc. They should be careful to ensure that the intellectual property of employers and clients is protected. • Computer misuse – not use their technical skills to misuse other people’s computers. Computer misuse ranges from relatively trivial (game playing on an employer’s machine, say) to extremely serious (dissemination of viruses).
The Legal Context of Software Engineering • Software professionals have a responsibility to be aware of and to abide by the legislation which affects their practice. • Significant pieces of legislation that relates to the development and use of software are: Act of Parliament Data Protection Act The Computer Misuse Act The Digital Economy Act The Protection from Harassment Act Year 1998 1990 2010 1997 Focus Privacy Hacking, phishing, etc. Copyright, piracy, etc. Cyberstalking • Failure to abide by legislation can lead to stiff penalties for organisations and individuals.
The Ethical Context of Software Engineering • Software professionals should also be aware of their ethical responsibilities and avoid unethical behaviours. For example: – – Making false promises to customers Overstating qualifications and experience Charging for work not done Knowingly presenting substandard work. • Ethical expectations for software engineers are set out in the codes of conduct of relevant professional bodies : – British Computer Society. – ACM/IEEE
Portfolio Task… • Topic: Software Failure • Submission Format: Narrated Presentation • You are required to research a case study of a notable software failure from the past ten years, and to create a narrated presentation based on the case study.
Portfolio Task… • Meltdown – instruction reordering and speculative execution – allow arbitrary information leaks from the kernel (linux, NT, and Mach are all vulnerable, whether running on Intel, AMD or ARM processors) – The summary • Speculative execution, which processors use to improve performance, can leak the values of conditional guards to an attacker. Notably, this allows information to escape from inside containers and VMs, so malicious programs running in the cloud can use these exploits to reveal data stored in a different virtualized guest on the same physical machine. • https: //spectreattack. com/ • https: //en. wikipedia. org/wiki/Meltdown_(security_vulnerability)
Class activities … • Discussion – How does software engineering differ from other engineering disciplines? • Case Studies – Choose any two from the case studies for the module (Sommerville pp 31 – 39): • • An Insulin Pump Control System A Patient Information System for Mental Health Care A Wilderness Weather Station A Digital Learning Environment for Schools • Exercises
Case studies • A personal insulin pump – An embedded system in an insulin pump used by diabetics to maintain blood glucose control. • A mental health case patient management system – Mentcare. A system used to maintain records of people receiving care for mental health problems. • A wilderness weather station – A data collection system that collects data about weather conditions in remote areas. • i. Learn: a digital learning environment – A system to support learning in schools