12. 12
Software Engineering FAQ
● What is software?
Computer programs and associated artifacts
(e.g documentation).
Software products may be developed for a
particular customer or may be developed for a
general market.
14. 14
Software Engineering FAQ
● What is software engineering?
An engineering discipline concerned
with all aspects of software production.
15. 15
Software Engineering FAQ
● What is software engineering?
An engineering discipline concerned
with all aspects of software production.
Computer science is concerned with
theory and fundamentals; software
engineering is concerned with the
practicalities of developing and
delivering useful software.
17. 17
Software Engineering FAQ
● What is a software process?
A set of activities whose goal is the
development or evolution of software.
High-level activities of software specification,
development, validation and evolution are part
of all software processes.
18. 18
Software Engineering FAQ
● What is a software process model?
A simplified representation of a software
process, presented from a specific perspective.
19. 19
Software Engineering FAQ
Software process models
- The waterfall model
Plan-driven model. Separate and distinct phases of specification and
development.
- Incremental development
Specification, development and validation are interleaved. May be plan-driven or
agile.
- Reuse-oriented software engineering
The system is assembled from existing components.
In practice, most large systems are developed using a process that
incorporates elements from all of these models.
20. 20
Software Engineering FAQ
● What are software engineering methods?
Structured approaches to software
development which include system models,
notations, rules, design advice and process
guidance.
22. 22
Software Engineering FAQ
What is software architecture?
● A software architecture is a description of how a software
system is organized.
● Architectural design decisions include decisions on the
type of application, the distribution of the system, the
architectural styles to be used.
● Shared understanding of a system design by the expert
developers on a project
● Decisions developers wish they could get right early on
● Decisions perceived as hard to change
24. 24
Software Engineering FAQ
Enterprise Application
● Accounting software
● Business intelligence
● Business process management
● Content management system (CMS)
● Customer relationship management (CRM)
● Enterprise resource planning (ERP)
● ...
25. 25
Software Engineering FAQ
Enterprise Application
● Lots of long living data, accessed concurently
● Multiple systems, dissonance in integration
technologies and data interpretation
● Business “illogic”
● Specific patterns
27. 27
Trends of Software Engineering
I. Increasing complexity of software
– business complexity
– domain complexity
– scale complexity
– artificial complexity
● Guided by requirements
● Results in periodic paradigm shift
● Followed by Moore's Law
–
29. 29
Trends of Software Engineering
I. Increasing complexity of software
Moore's law is the observation that over the history of
computing hardware, the number of transistors on integrated
circuits doubles approximately every two years
● capabilities of many digital electronic devices are strongly linked to
Moore's law: processing speed, memory capacity, sensors
● describes a driving force of technological and social change
● used in the semiconductor industry to guide long-term planning
30. 30
Trends of Software Engineering
I. Increasing complexity of software
Complexity
Time
Fortran, Basic
Symbols, expression
Pascal, C
Structured programming
C++
Objects
Java
Virtual machines
Python, XML
31. 31
Trends of Software Engineering
II. Raising the level of abstraction
– Abstract to reduce (hide) complexity
– From machine codes to high level languages
32. 32
Trends of Software Engineering
II. Raising the level of abstraction
Machine code or machine language is a set of
instructions executed directly by a computer's
central processing unit (CPU).
33. 33
Trends of Software Engineering
II. Raising the level of abstraction
● High-level language is a programming
language with strong abstraction from the
details of the computer.
May use natural language elements, making the process
of developing a program simpler and more
understandable.
34. 34
Trends of Software Engineering
II. Raising the level of abstraction
● Executable Models (e.g. xUML) allow graphically specify a
system at the next higher level of abstraction.
● allows for true separation of concerns
● significantly increases ease of reuse and lowers the cost of
software development
● enables domains to be cross-platform and not tied to any specific
programming language, platform or technology
36. 36
Trends of Software Engineering
III. Continuous improvement of development
process
- Automation and improvement of software
maintainability
- Iterative approach to software development is
becoming increasingly used as the standard
development technique
37. 37
Trends of Software Engineering
III. Continuous improvement of development
process
- Shift to agile methods to focus on incremental
specification design and system
implementation, that involve the customer
directly in the development process
- Development of automated tests before a
program feature is created, adoption of
continious integration and continious delivery
processes
38. 38
Trends of Software Engineering
IV. Ability to deal with changes in
requirements
– Businesses now operate in a global,
rapidly changing environment
– It is often practically impossible to derive a
complete set of stable software
requirements
39. 39
Trends of Software Engineering
IV. Ability to deal with changes in
requirements
– Welcome changing requirements, even
late in development
– Customer collaboration over contract
negotiation
40. 40
Trends of Software Engineering
IV. Ability to deal with changes in
requirement
– Deliver working software frequently, from a
couple of weeks to a couple of months,
with a preference to the shorter timescale
– Business people and developers must
work together daily throughout the project
41. 41
Trends of Software Engineering
Manifesto Agile Software Development
We are uncovering better ways of developingsoftware by doing it and
helping others do it. Through this work we have come to value:
● Individuals and interactions over processes and tools
● Working software over comprehensive documentation
● Customer collaboration over contract negotiation
● Responding to change over following a plan
That is, while there is value in the items on the right, we value the
items on the left more
42. 42
Software Engineering Trends
V. Reusing experience to address
recurring problems successfully
– Design process in most engineering disciplines is based
on reuse of existing systems or components
– Reuse is recognized as an important mechanism to
improve software quality and development productivity
– Advantages of software reuse are lower costs, faster
software development and lower risks. System
dependability is increased and specialists can be used
more effectively by concentrating their expertise on the
design of reusable components.
44. 44
Software reuse
➢ The process of creating software systems from
existing software rather than building them from
scratch
➢ An important mechanism to improve software
quality and development productivity
45. 45
Software reuse
Different published rates about reuse
➢up to 60% of design and code is reusable in business applications
➢up to 75% of functions are common to more than one application
➢up to 85% - theoretical reuse potential
46. 46
• Reusability
– the property of a software asset, that indicates
its probability of reuse
– often understood as one of software quality and
development productivity factors
• Reusable asset (artefact)
– reusable software or software knowledge
– different software life cycle products
• Systematic software reuse
– based on the defined processes and rules
– without relying on individual initiative or luck 46
Software reuse
47. 47
Benefits of reuse
– Gains in quality
error fixes accumulated from reuse
– Gains in reliability
reuse increases the chance of errors to be detected
– Gains in productivity
less design and code, less testing efforts
– Gains in performance
effort invested in optimizations
– Reduction of maintenance costs
fewer defects and maintenance costs with proven quality components
– Reduction of product time to market
– Support for rapid prototyping
47
Software reuse
48. 48
Obstacles of reuse
Managerial and organizational obstacles
support of top-level management is needed
lack of management incentives
Economic obstacles
requires up-front investments
Conceptual and technical obstacles
difficulty of finding reusable software
non-reusability of legacy components
modification effects on the component
48
Software reuse
49. 49
• Software reuse is multidisciplinary
– organizational aspects
managerial and technological infrastructure
centralized or distributed organizational
approaches
– economic aspects
proactive or reactive capital investments
metrics, reuse cost estimation techniques, return-
on-investment models
– technical aspects
49
Software reuse
50. 50
• Reuse-in-the-large is a problem too hard to be
solved in general way.
– works best in families of related systems
– domain-dependent
• The final goal is to ingrain reuse into an
organization’s entire software production
process
50
Software reuse