software engineering
play

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


  1. Software Engineering Software Applications A.Y. 2020/2021

  2. What is software engineering?

  3. What is software engineering? 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.

  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.

  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.

  6. Why is software engineering important?

  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.

  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.

  9. Avoiding failures 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

  10. Why do software projects fail?

  11. Risks in software projects - 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

  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.

  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

  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

  15. General issues in software development

  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 older legacy systems written in different programming languages Challenge: to develop techniques for building dependable software that is flexible enough to cope with this heterogeneity

  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 of 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.

  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

  19. Software engineering fundamentals

  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.

  21. The waterfall model

  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.

  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.

  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

  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

  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

  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.

  28. Example: the Abstract Factory pattern (contd.)

  29. Example: components for a holiday-reservation app

Recommend


More recommend