Software Engineering
Software Applications A.Y. 2020/2021
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
Software Applications A.Y. 2020/2021
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.
Engineers apply theories, methods, and tools where these are appropriate
theories and methods.
i.e. engineers look for solutions within these constraints.
Engineering is about getting results of the required quality within the schedule and budget
software development.
development of tools, methods, and theories to support software production.
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.
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.
From the analysis of 13,522 software projects
customers
that is to be produced and the constraints on its operation.
the customer requires.
customer and market requirements.
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
System engineering is concerned with
hardware, software, and process engineering
as well as software engineering Software engineering is part of this more general process
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
Challenge: to develop techniques for building dependable software that is flexible enough to cope with this heterogeneity
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
Challenge: to develop techniques so that the time required for software to deliver value to its customers is reduced.
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:
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.
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.
Software engineers have to
budget and to schedule.
Software engineers are dwarfs standing on the shoulders of giants Whenever appropriate, reuse software that has already been developed rather than write new software
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
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
Example: the Abstract Factory pattern
The Abstract Factory design pattern solves problems like:
The Abstract Factory design pattern describes how to solve such problems:
interface (AbstractFactory) for creating objects, and implement the interface.
directly.