Software Engineering Software Applications A.Y. 2020/2021 What is - - PowerPoint PPT Presentation

software engineering
SMART_READER_LITE
LIVE PREVIEW

Software Engineering Software Applications A.Y. 2020/2021 What is - - PowerPoint PPT Presentation

Software Engineering Software Applications A.Y. 2020/2021 What is software engineering? What is software engineering? An engineering discipline that is concerned with all aspects of software production from the early stages of system


slide-1
SLIDE 1

Software Engineering

Software Applications A.Y. 2020/2021

slide-2
SLIDE 2

What is software engineering?

slide-3
SLIDE 3

An engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use Software engineering is a systematic approach to the production of software that takes into account practical cost, schedule, and dependability issues, as well as the needs of software customers and producers.

What is software engineering?

slide-4
SLIDE 4

Engineering discipline

Engineers apply theories, methods, and tools where these are appropriate

  • Trying to discover solutions to problems even when there are no applicable

theories and methods.

  • Recognising which solutions work to organisational and financial constraints,

i.e. engineers look for solutions within these constraints.

slide-5
SLIDE 5

All aspects of software production

Engineering is about getting results of the required quality within the schedule and budget

  • Software engineering is not just concerned with the technical processes of

software development.

  • It also includes activities such as software project management and the

development of tools, methods, and theories to support software production.

slide-6
SLIDE 6

Why is software engineering important?

slide-7
SLIDE 7

Building reliable and trustworthy systems

More and more, individuals and society rely on advanced software systems. We need to be able to produce reliable and trustworthy systems economically and quickly.

slide-8
SLIDE 8

Reducing costs

It is usually cheaper, in the long run, to use software engineering methods and techniques for software systems rather than just write the programs as if it was a personal programming project. For most types of systems, the majority of costs are the costs of changing the software after it has gone into use.

slide-9
SLIDE 9

From the analysis of 13,522 software projects

  • 66% of all projects fail without any useful product or outcome
  • 82% of all projects exceed scheduled times resulting in additional costs
  • 48% of all projects do not implement the functionalities requested by the

customers

  • 55 billion $ wasted by taking into account project in the US only

Avoiding failures

slide-10
SLIDE 10

Why do software projects fail?

slide-11
SLIDE 11
  • Lack of user’s or customer’s feedback
  • Turnover of the developing team
  • Implementation of not required functions
  • Delivery delays
  • Exceeding initial budget
  • Implementation of an unusable system
  • Bad integration with other legacy or backbone systems

Risks in software projects

slide-12
SLIDE 12

Fundamental software engineering activities

  • Software specification, where customers and engineers define the software

that is to be produced and the constraints on its operation.

  • Software development, where the software is designed and programmed.
  • Software validation, where the software is checked to ensure that it is what

the customer requires.

  • Software evolution, where the software is modified to reflect changing

customer and market requirements.

slide-13
SLIDE 13

Software engineering and Computer Science

Computer science is essential for software engineers in the same way that physics is essential for electrical engineers Computer science focuses on theory and engineering and computer science? fundamentals. Software engineering is concerned with the practicalities of developing and delivering useful software

slide-14
SLIDE 14

Software engineering and System engineering

System engineering is concerned with

  • all aspects of engineering computer-based systems development including

hardware, software, and process engineering

  • hardware development, policy and process design and system deployment,

as well as software engineering Software engineering is part of this more general process

slide-15
SLIDE 15

General issues in software development

slide-16
SLIDE 16

Heterogeneity

Systems are required to operate as distributed systems across networks that include different types of computer, mobile devices Systems integrate software written in different programming languages including

  • lder legacy systems written in different programming languages

Challenge: to develop techniques for building dependable software that is flexible enough to cope with this heterogeneity

slide-17
SLIDE 17

Business and social change

Business and society are changing incredibly quickly as emerging economies develop and new technologies become available. Many traditional software engineering techniques are time consuming and delivery

  • f new systems often takes longer than planned.

Challenge: to develop techniques so that the time required for software to deliver value to its customers is reduced.

slide-18
SLIDE 18

Security and trust

Software is intertwined with all aspects of our lives, hence it is essential that we can trust that software Challenge: design and implement software that:

  • cannot be attacked by malicious agents (i.e. users or software)
  • keep information security and integrity
slide-19
SLIDE 19

Software engineering fundamentals

slide-20
SLIDE 20

Development process

Software system should be developed using a managed and understood development process A development process allows to have have clear ideas of what will be produced and when it will be completed Different processes are used for different types of software, , e.g. iterative, agile, Scrum, etc.

slide-21
SLIDE 21

The waterfall model

slide-22
SLIDE 22

Dependability and performance

Software should behave as expected, without failures and should be available for use when it is required. Software should be safe in its operation and, as far as possible, should be secure against external attack. Software should perform efficiently and should not waste resources.

slide-23
SLIDE 23

Software specification and requirements

Software engineers have to

  • know what different customers and users of the system expect from it and
  • manage their expectations so that a useful system can be delivered within

budget and to schedule.

slide-24
SLIDE 24

Reuse

Software engineers are dwarfs standing on the shoulders of giants Whenever appropriate, reuse software that has already been developed rather than write new software

slide-25
SLIDE 25

Examples of reuse

Software libraries: authors of new programs can use the code in a software library to perform these tasks, instead of "re-inventing the wheel" Design patterns: general solutions to a recurring problem. Design patterns are more conceptual than tangible and can be modified to fit the exact need. However, abstract classes and interfaces can be reused to implement certain patterns. Software components: authors of new program can rely on existing components of third-party applications and integrate them by using the component-based architectural style

slide-26
SLIDE 26

Example: the pyGeno library

from pyGeno.Genome import * #load a genome ref = Genome(name = 'GRCh37.75') #load a gene gene = ref.get(Gene, name = 'TPST2')[0] #print the sequences of all the isoforms for prot in gene.get(Protein) : print prot.sequence

slide-27
SLIDE 27

Example: the Abstract Factory pattern

The Abstract Factory design pattern solves problems like:

  • How can an application be independent of how its objects are created?
  • How can a class be independent of how the objects it requires are created?
  • How can families of related or dependent objects be created?

The Abstract Factory design pattern describes how to solve such problems:

  • Encapsulate object creation in a separate (factory) object. That is, define an

interface (AbstractFactory) for creating objects, and implement the interface.

  • A class delegates object creation to a factory object instead of creating objects

directly.

slide-28
SLIDE 28

Example: the Abstract Factory pattern (contd.)

slide-29
SLIDE 29

Example: components for a holiday-reservation app