Software Engineering - Topics
Software Engineering - Topics
Software Engineering - Topics
• Software engineering is concerned with theories, methods and tools for professional software
development.
• Software costs often dominate computer system costs. The costs of software on a PC are often
greater than the hardware cost.
• Software costs more to maintain than it does to develop. For systems with a long life,
maintenance costs may be several times development costs.
• Software engineering is 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.
• Engineering discipline
• Using appropriate theories and methods to solve problems bearing in mind organizational and
financial constraints.
• Not just technical process of development. Also project management and the development of
tools, methods etc. to support software production.
• Software specification, where customers and engineers define the software that is to be
produced and the constraints on its operation.
• 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.
• 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 system, the majority of costs are the costs of changing the software
after it has gone into use.
General issues
1. Heterogeneity
Increasingly, systems are required to operate as distributed systems across networks that include
different types of computer and mobile devices.
Business and society are changing incredibly quickly as emerging economies develop and new
technologies become available. They need to be able to change their existing software and to rapidly
develop new software.
As software is intertwined with all aspects of our lives, it is essential that we can trust that software.
4. Scale
Software has to be developed across a very wide range of scales, from very small embedded systems in
portable or wearable devices through to Internet-scale, cloud-based systems that serve a global
community.
Software testing
Testing stages
• Component testing
• System testing
• Customer testing
• Testing with customer data to check that the system meets the customer’s needs.
System models
• Incremental development
• In practice, most large systems are developed using a process that incorporates elements from
all of these models.
Agile Models
Agile development
• Plan-driven development
• Agile development
• Specification, design, implementation and testing are inter-leaved and the outputs
from the development process are decided through a process of negotiation during
the software development process.
Agile methods
• Dissatisfaction with the overheads involved in software design methods of the 1980s and
1990s led to the creation of agile methods. These methods:
• The aim of agile methods is to reduce overheads in the software process (e.g. by limiting
documentation) and to be able to respond quickly to changing requirements without
excessive rework.
Incremental Development
• The amount of analysis and documentation that has to be redone is much less than is
required with the waterfall model.
• It is easier to get customer feedback on the development work that has been done.
• Customers can comment on demonstrations of the software and see how much has
been implemented.
• More rapid delivery and deployment of useful software to the customer is possible.
• Customers are able to use and gain value from the software earlier than is possible with
a waterfall process.
• Unless time and money is spent on refactoring to improve the software, regular change
tends to corrupt its structure. Incorporating further software changes becomes
increasingly difficult and costly.
Waterfall
• The main drawback of the waterfall model is the difficulty of accommodating change after the
process is underway. In principle, a phase has to be complete before moving onto the next
phase.
• Inflexible partitioning of the project into distinct stages makes it difficult to respond to changing
customer requirements.
• Therefore, this model is only appropriate when the requirements are well-understood
and changes will be fairly limited during the design process.
• The waterfall model is mostly used for large systems engineering projects where a system is
developed at several sites.
• In those circumstances, the plan-driven nature of the waterfall model helps coordinate
the work.
Reuse Approach
Types of reusable software
• Stand-alone application systems (sometimes called COTS) that are configured for use in a
particular environment.
• Web services that are developed according to service standards and which are available for
remote invocation.
reuse-oriented software
Incremental Delivery
• Rather than deliver the system as a single delivery, the development and delivery is broken
down into increments with each increment delivering part of the required functionality.
• User requirements are prioritised and the highest priority requirements are included in early
increments.
• Once the development of an increment is started, the requirements are frozen though
requirements for later increments can continue to evolve.
• Incremental development
• Develop the system in increments and evaluate each increment before proceeding to
the development of the next increment;
• Incremental delivery
• Customer value can be delivered with each increment so system functionality is available earlier.
• Early increments act as a prototype to help elicit requirements for later increments.
• The highest priority system services tend to receive the most testing.
• Most systems require a set of basic facilities that are used by different parts of the system.
• The essence of iterative processes is that the specification is developed in conjunction with the
software.
• However, this conflicts with the procurement model of many organizations, where the
complete system specification is part of the system development contract.
Extreme programming
• A very influential agile method, developed in the late 1990s, that introduced a range of agile
development techniques.
• All tests must be run for every build and the build is only accepted if tests run
successfully.
• Scrum is an agile method that focuses on managing iterative development rather than specific
agile practices.
• The initial phase is an outline planning phase where you establish the general objectives
for the project and design the software architecture.
• This is followed by a series of sprint cycles, where each cycle develops an increment of
the system.
• The project closure phase wraps up the project, completes required documentation
such as system help frames and user manuals and assesses the lessons learned from the
project.
• The starting point for planning is the product backlog, which is the list of work to be done on the
project.
• The selection phase involves all of the project team who work with the customer to select the
features and functionality from the product backlog to be developed during the sprint.
• The ‘Scrum master’ is a facilitator who arranges daily meetings, tracks the backlog of work to be
done, records decisions, measures progress against the backlog and communicates with
customers and management outside of the team.
• The whole team attends short daily meetings (Scrums) where all team members share
information, describe their progress since the last meeting, problems that have arisen and what
is planned for the following day.
• This means that everyone on the team knows what is going on and, if problems arise,
can re-plan short-term work to cope with them.
Scrum benefits
• The product is broken down into a set of manageable and understandable chunks.
• The whole team have visibility of everything and consequently team communication is
improved.
• Customers see on-time delivery of increments and gain feedback on how the product works.
• Trust between customers and developers is established and a positive culture is created in
which everyone expects the project to succeed.
• Scenarios and user stories are real-life examples of how a system can be used.
• Stories and scenarios are a description of how a system may be used for a particular task.
• Because they are based on a practical situation, stakeholders can relate to them and can
comment on their situation with respect to the story.
Scenarios
Requirement engineering
• The process of establishing the services that a customer requires from a system and the
constraints under which it operates and is developed.
• The system requirements are the descriptions of the system services and constraints that are
generated during the requirements engineering process.
What is a requirement?
• It may range from a high-level abstract statement of a service or of a system constraint to a
detailed mathematical functional specification.
• May be the basis for a bid for a contract - therefore must be open to interpretation;
• May be the basis for the contract itself - therefore must be defined in detail;
Types of requirement
• User requirements
o Statements in natural language plus diagrams of the services the system provides and its
operational constraints. Written for customers.
• System requirements
Requirements Validation
• Concerned with demonstrating that the requirements define the system that the customer
really wants.
• Functional requirements
o Statements of services the system should provide, how the system should react to
particular inputs and how the system should behave in particular situations.
• Non-functional requirements
o Often apply to the system as a whole rather than individual features or services.
• Domain requirements
Functional requirements
• Depend on the type of software, expected users and the type of system where the software is
used.
• Functional user requirements may be high-level statements of what the system should do.
Non-functional requirements
• These define system properties and constraints e.g. reliability, response time and storage
requirements. Constraints are I/O device capability, system representations, etc.
• Process requirements may also be specified mandating a particular IDE, programming language
or development method.
• Non-functional requirements may be more critical than functional requirements. If these are not
met, the system may be useless.
Requirements specification
• The process of writing down the user and system requirements in a requirements document.
• User requirements have to be understandable by end-users and customers who do not have a
technical background.
• System requirements are more detailed requirements and may include more technical
information.
• Activity diagrams, which show the activities involved in a process or in data processing .
• Use case diagrams, which show the interactions between a system and its environment.
• Sequence diagrams, which show interactions between actors and the system and between
system components.
• Class diagrams, which show the object classes in the system and the associations between these
classes.
• State diagrams, which show how the system reacts to internal and external events.
• Use cases were developed originally to support requirements elicitation and now incorporated
into the UML.
• Each use case represents a discrete task that involves external interaction with a system.
• Represented diagramatically to provide an overview of the use case and in a more detailed
textual form.
Activity Diagram
Class diagram
• Class diagrams are used when developing an object-oriented system model to show the classes
in a system and the associations between these classes.
• An object class can be thought of as a general definition of one kind of system object.
• An association is a link between classes that indicates that there is some relationship between
these classes.
• When you are developing models during the early stages of the software engineering process,
objects represent something in the real world, such as a patient, a prescription, doctor, etc.
Sequence diagram
• Sequence diagrams are part of the UML and are used to model the interactions between the
actors and the objects within a system.
• A sequence diagram shows the sequence of interactions that take place during a particular use
case or use case instance.
• The objects and actors involved are listed along the top of the diagram, with a dotted line drawn
vertically from these.
• These model the behaviour of the system in response to external and internal events.
• They show the system’s responses to stimuli so are often used for modelling real-time systems.
• State machine models show system states as nodes and events as arcs between these nodes.
When an event occurs, the system moves from one state to another.
• Statecharts are an integral part of the UML and are used to represent state machine models.