0% found this document useful (0 votes)
6 views17 pages

SE Summary

Software engineering is crucial for modern society, underpinning government, businesses, and daily life through software-controlled systems. Challenges include increasing complexity and the need for better engineering methods, as many organizations neglect formal software engineering practices. Good software should be dependable, maintainable, and efficient, and software engineering encompasses all aspects of software production from conception to maintenance.

Uploaded by

9g64dyjwh6
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views17 pages

SE Summary

Software engineering is crucial for modern society, underpinning government, businesses, and daily life through software-controlled systems. Challenges include increasing complexity and the need for better engineering methods, as many organizations neglect formal software engineering practices. Good software should be dependable, maintainable, and efficient, and software engineering encompasses all aspects of software production from conception to maintenance.

Uploaded by

9g64dyjwh6
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

Software engineering

 Software engineering is essential for the functioning of government, society, and


national and international businesses and institutions
 We can’t run the modern world without software.
 National infrastructures and utilities are controlled by computer-based systems
and most electrical products include a computer and controlling software.
 More than 75% of the world’s population have a software-controlled mobile
phone.
 There are many different types of software system, ranging from simple
embedded systems to complex, worldwide information systems.
Software failures
• 1-Increasing system complexity: As new software engineering techniques help
us to build larger, more complex systems, the demands change. Systems have
to be built and delivered more quickly; larger, even more complex systems are
required; and systems have to have new capabilities that were previously thought
to be impossible. New software engineering techniques have to be developed to
meet new the challenges of delivering more complex software.
• 2-Failure to use software engineering methods: It is fairly easy to write
computer programs without using software engineering methods and techniques.
Many companies have drifted into software development as their products and
services have evolved. They do not use software engineering methods in their
everyday work. Consequently, their software is often more expensive and less
reliable than it should be. We need better software engineering education and
training to address this problem.
Professional software development
• Lots of people write programs. People in business write spreadsheet programs to
simplify their jobs;.
• scientists and engineers write programs to process their experimental data.
• hobbyists write programs for their own interest and enjoyment.
• However, most software development is a professional activity in which software
is developed for business purposes, for inclusion in other devices, or as software
products such as information systems and computer-aided design systems.
• Software engineering is intended to support professional software
development rather than individual programming.
Question Answer
What is software? Computer programs and associated documentation. Software
products may be developed for a particular customer or may be
developed for a general market.
What are the attributes of good Good software should deliver the required functionality and
software? performance to the user and should be maintainable, dependable
and usable.
What is software engineering? Software engineering is an engineering discipline that is
concerned with all aspects of software production from initial
conception to operation and maintenance.
What are the fundamental software Software specification, software development, software validation
engineering activities? and software evolution.
What is the difference between Computer science focuses on theory and fundamentals; software
software engineering and computer engineering is concerned with the practicalities of developing and
science? delivering useful software.
What is the difference between System engineering is concerned with all aspects of computer-
software engineering and system based systems development including hardware, software and
engineering? process engineering. Software engineering is part of this more
general process.
What are the key challenges facing Coping with increasing diversity, demands for reduced delivery
software engineering? times and developing trustworthy software.
What are the costs of software Roughly 60% of software costs are development costs, 40% are
engineering? testing costs. For custom software, evolution costs often exceed
development costs.
What are the best software While all software projects have to be professionally managed
engineering techniques and and developed, different techniques are appropriate for different
methods? types of system. For example, games should always be
developed using a series of prototypes whereas safety critical
control systems require a complete and analyzable specification
to be developed. There are no methods and techniques that are
good for everything.
What differences has the Internet Not only has the Internet led to the development of massive,
made to software engineering? highly distributed, service-based systems, it has also supported
the creation of an "app" industry for mobile devices which has
changed the economics of software.

software product
• Generic products :These are stand-alone systems that are produced by a
development organization and sold on the open market to any customer who is
able to buy them. Examples of this type of product include apps for mobile
devices, software for PCs such as databases, word processors, drawing
packages, and project management tools.
• Customized software These are systems that are commissioned by and
developed for a particular customer. A software contractor designs and
implements the software especially for that customer. Examples of this type of
software include control systems for electronic devices, systems written to
support a particular business process, and air traffic control systems.
• The critical distinction between these types of software is that, in generic
products, the organization that develops the software controls the software
specification, This means that if they run into development problems, they
can rethink what is to be developed.
• For custom products, the specification is developed and controlled by the
organization that is buying the software. The software developers must
work to that specification.
• 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
• In this definition, there are two key phrases:
1-Engineering discipline Engineers make things work. They apply theories, methods,
and tools where these are appropriate. However, they use them selectively
2-All aspects of software production 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 development.
Essential attributes of good software
Product characteristic Description

Acceptability Software must be acceptable to the type of users for which it is designed.
This means that it must be understandable, usable, and compatible with
other systems that they use.
Dependability and Software dependability includes a range of characteristics including
security reliability, security, and safety. Dependable software should not cause
physical or economic damage in the event of system failure. Software has
to be secure so that malicious users cannot access or damage the system.
Efficiency Software should not make wasteful use of system resources such as
memory and processor cycles. Efficiency therefore includes
responsiveness, processing time, resource utilization, etc.
Maintainability Software should be written in such a way that it can evolve to meet the
changing needs of customers. This is a critical attribute because software
change is an inevitable requirement of a changing business environment

• Software engineering is important for two reasons:


• 1. 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.
• 2. It is usually cheaper, in the long run, to use software engineering methods and
techniques for professional software systems rather than just write programs as
systematic approach
The systematic approach that is used in software engineering is sometimes called a
software process. A software process is a sequence of activities that leads to the
production of a software product. Four fundamental activities are common to all
software processes.
1. Software specification, where customers and engineers define the software
that is to be produced and the constraints on its operation.
2. Software development, where the software is designed and programmed.
3. Software validation, where the software is checked to ensure that it is what
the customer requires.
4. Software evolution, where the software is modified to reflect changing
customer and market requirements.

computer science and systems engineering


• Software engineering is related to both computer science and systems
engineering
• Computer science is concerned with the theories and methods that underlie
computers and software systems, whereas software engineering is concerned
with the practical problems of producing software.
• System engineering is concerned with all aspects of the development and
evolution of complex systems where software plays a major role. System
engineering is therefore concerned with hardware development, policy and
process design, and system deployment, as well as software engineering.
System engineers are involved in specifying the system, defining its overall
architecture, and then integrating the different parts to create the finished system.
different types of software:
• Heterogeneity Increasingly: systems are required to operate as distributed
systems across networks that include different types of computer and mobile
devices. As well as running on general-purpose computers, software may also
have to execute on mobile phones and tablets.
• Business and social: change Businesses 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.
• Security and trust: As software is intertwined with all aspects of our lives, it is
essential that we can trust that software. This is especially true for remote
software systems accessed through a web page or web service interface.
• 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 engineering diversity
• 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. The specific methods, tools,
and techniques used depend on the organization developing the software, the
type of software, and the people involved in the development process
types of application
• Stand-alone applications :These are application systems that run on a personal
computer or apps that run on a mobile device. They include all necessary
functionality and may not need to be connected to a network.
• Examples of such applications are office applications on a PC, CAD programs,
photo manipulation software, travel apps, productivity apps, and so on.
• Interactive transaction-based applications These are applications that
execute on a remote computer and that are accessed by users from their own
computers, phones, or tablets. Obviously, these include web applications such as
e-commerce applications where you interact with a remote system to buy goods
and services. This class of application also includes business systems, where a
business provides access to its systems through a web browser or special-
purpose client program and cloud-based services, such as mail and photo
sharing. Interactive applications often incorporate a large data store that is
accessed and updated in each transaction.
• Embedded control systems These are software control systems that control
and manage hardware devices. Numerically, there are probably more embedded
systems than any other type of system. Examples of embedded systems include
the software in a mobile (cell) phone, software that controls antilock braking in a
car, and software in a microwave oven to control the cooking process.
• Batch processing systems These are business systems that are designed to
process data in large batches. They process large numbers of individual inputs to
create corresponding outputs. Examples of batch systems are periodic billing
systems, such as phone billing systems, and salary payment systems.
• Entertainment systems These are systems for personal use that are intended
to entertain the user. Most of these systems are games of one kind or another,
which may run on special-purpose console hardware. The quality of the user
interaction offered is the most important distinguishing characteristic of
entertainment systems.
• Systems for modeling and simulation These are systems that are developed
by scientists and engineers to model physical processes or situations, which
include many separate, interacting objects. These are often computationally
intensive and require high-performance parallel systems for execution.
• Data collection and analysis systems Data collection systems are systems
that collect data from their environment and send that data to other systems for
processing. The software may have to interact with sensors and often is installed
in a hostile environment such as inside an engine or in a remote location. “Big
data” analysis may involve cloud-based systems carrying out statistical analysis
and looking for relationships in the collected data.
• Systems of systems These are systems, used in enterprises and other large
organizations, that are composed of a number of other software systems. Some
of these may be generic software products, such as an (ERP) Enterprise
resource planning system type of software system that helps organizations
automate and manage core business processes for optimal performance..
software engineering fundamentals
• there are software engineering fundamentals that apply to all type of
software systems:
 They should be developed using a managed and understood development
process. The organization developing the software should plan the
development process and have clear ideas of what will be produced and
when it will be completed. Of course, the specific process that you should
use depends on the type of software that you are developing.
 Dependability and performance are important for all types of system.
Software should behave as expected, without failures, and should be
available for use when it is required. It should be safe in its operation and,
as far as possible, should be secure against external attack. The system
should perform efficiently and should not waste resources.
 Understanding and managing the software specification and requirements
(what the software should do) are important. You have to know what different
customers and users of the system expect from it, and you have to manage
their expectations so that a useful system can be delivered within budget
and to schedule.
 You should make effective use of existing resources. This means that, where
appropriate, you should reuse software that has already been developed
rather than write new software.

Software engineering ethics


• Like other engineering disciplines, software engineering is carried out within a
social and legal framework that limits the freedom of people working in that area.
As a software engineer, you must accept that your job involves wider
responsibilities than simply the application of technical skills. You must also
behave in an ethical and morally responsible way if you are to be respected as a
professional engineer. It goes without saying that you should uphold normal
standards of honesty and integrity.
Some of professional responsibility.
• 1.Confidentiality You should normally respect the confidentiality of your
employers or clients regardless of whether or not a formal confidentiality
agreement has been signed.
• 2. Competence You should not misrepresent your level of competence. You
should not knowingly accept work that is outside your competence.
• 3. Intellectual property rights You should be aware of local laws governing the
use of intellectual property such as patents and copyright. You should be careful
to ensure that the intellectual property of employers and clients is protected.
• 4.Computer misuse You should not use your technical skills to misuse other
people’s computers. Computer misuse ranges from relatively trivial (game
playing on an employer’s machine) to extremely serious (dissemination of viruses
or other malware).
Case studies
• To illustrate software engineering concepts, I use examples from four different
types of system. I have deliberately not used a single case study, as one of the
key messages in this book is that software engineering practice depends on the
type of systems being produced. I therefore choose an appropriate example
when discussing concepts
• such as safety and dependability, system modeling, reuse, etc
• These studies are:
• An embedded system :This is a system where the software controls some
hardware device and is embedded in that device. Issues in embedded systems
typically include physical size, responsiveness, and power management, etc. The
example of an embedded system that I use is a software system to control an
insulin pump for people who have diabetes.
• An information system :The primary purpose of this type of system is to
manage and provide access to a database of information. Issues in information
systems include security, usability, privacy, and maintaining data integrity. The
example of an information system used is a medical records system.
• A sensor-based data collection system This is a system whose primary
purposes are to collect data from a set of sensors and to process that data in
some way. The key requirements of such systems are reliability, even in hostile
environmental conditions, and maintainability. The example of a data collection
system that I use is a wilderness weather station.
• A support environment. This is an integrated collection of software tools that
are used to support some kind of activity. Programming environments, such as
Eclipse (Vogel 2012) will be the most familiar type of environment for readers of
this book. I describe an example here of a digital learning environment that is
used to support students’ learning in schools.
The key features of the system :
• 1. Individual care management Clinicians can create records for patients, edit
the information in the system, view patient history, and so on. The system
supports data summaries so that doctors who have not previously met a patient
can quickly learn about the key problems and treatments that have been
prescribed.
• 2. Patient monitoring The system regularly monitors the records of patients that
are involved in treatment and issues warnings if possible problems are detected.
Therefore, if a patient has not seen a doctor for some time, a warning may be
issued.
• One of the most important elements of the monitoring system is to keep track of
patients who have been sectioned and to ensure that the legally required checks
are carried out at the right time.
• Administrative reporting The system generates monthly management reports
showing the number of patients treated at each clinic, the number of patients who
have entered and left the care system, the number of patients sectioned, the
drugs prescribed and their costs,
• Two different laws affect the system: laws on data protection that govern the
confidentiality of personal information and mental health laws that govern the
compulsory detention of patients deemed to be a danger to themselves or others.
Mental health is unique in this respect as it is the only medical speciality that can
recommend the detention of patients against their will. This is subject to strict
legislative safeguards.
• One aim of the Mentcare system is to ensure that staff always act in accordance
with the law and that their decisions are recorded for judicial review if necessary.
As in all medical systems, privacy is a critical system requirement. It is essential
that patient information is confidential and is never disclosed to anyone apart
from authorized medical staff and the patient themselves. The Mentcare system
is also a safety-critical system.

Key Points:
Software process
A software process is a set of related activities that leads to the production of a software
system
Software process models
 The waterfall model :This takes the fundamental process activities of
specification, development, validation, and evolution and represents them as
separate process phases such as requirements specification, software design,
implementation, and testing.
 Incremental development :This approach interleaves the activities of
specification, development, and validation. The system is developed as a series
of versions (increments), with each version adding functionality to the previous
version
 Integration and configuration: This approach relies on the availability of
reusable components or systems. The system development process focuses on
configuring these components for use in a new setting and integrating them into
a system.

The majority of practical software processes are based on a general model but often
incorporate features of other models. This is particularly true for large systems
engineering. For large systems, it makes sense to combine some of the best features of
all of the general processes.
 You need to have information about the essential system requirements to design
a software architecture to support these requirements. You cannot develop this
incrementally. Subsystems within a larger system may be developed using
different approaches.

Waterfall model
The first published model of the software development process was derived from
engineering process models used in large military systems engineering (Royce 1970). It
presents the software development process as a number of stages, as shown in last
Figure. Because of the cascade from one phase to another, this model is known as the
waterfall model or software life cycle. The waterfall model is an example of a plan-driven
process. In principle at least, you plan and schedule all of the process activities before
starting software development.

The stages of waterfall model


 Requirements analysis and definition The system’s services, constraints, and
goals are established by consultation with system users. They are then defined in
detail and serve as a system specification.
 System and software design The systems design process allocates the
requirements to either hardware or software systems. It establishes an overall
system architecture. Software design involves identifying and describing the
fundamental software system abstractions and their relationships.
 Implementation and unit testing During this stage, the software design is
realized as a set of programs or program units. Unit testing involves verifying that
each unit meets its specification.
 Integration and system: testing The individual program units or programs are
integrated and tested as a complete system to ensure that the software
requirements have been met. After testing, the software system is delivered to
the customer.
 Operation and maintenance: Normally, this is the longest life-cycle phase. The
system is installed and put into practical use. Maintenance involves correcting
errors that were not discovered in earlier stages of the life cycle, improving the
implementation of system units, and enhancing the system’s services as new
requirements are discovered.
 In principle, the result of each phase in the waterfall model is one or more
documents that are approved (“signed off”).
- The following phase should not start until the previous phase has finished.
For hardware development, where high manufacturing costs are involved,
this makes sense.
- However, for software development, these stages overlap and feed
information to each other.
- During design, problems with requirements are identified; during coding
design problems are found, and so on.
- The software process, in practice, is never a simple linear model but
involves feedback from one phase to another

Incremental development
 Incremental development is based on the idea of developing an initial
implementation, getting feedback from users and others, and evolving the
software through several versions until the required system has been developed
Figure below . Specification, development, and validation activities are
interleaved rather than separate, with rapid feedback across activities.

Incremental development has three major advantages over the waterfall model:
 The cost of implementing requirements changes is reduced. The amount of
analysis and documentation that has to be redone is significantly 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. Customers find it difficult to judge progress from
software design documents.
 Early delivery and deployment of useful software to the customer is possible,
even if all of the functionality has not been included. Customers are able to use
and gain value from the software earlier than is possible with a waterfall process
Process activities types
 Software specification: Software specification or requirements engineering is
the process of understanding and defining what services are required from the
system.
 Software design and implementation: The implementation stage of software
development is the process of developing an executable system for delivery to
the customer
 Software validation: Software validation or, more generally, verification and
validation (V & V) is intended to show that a system both conforms to its
specification and meets the expectations of the system customer.
 Software evolution: The flexibility of software is one of the main reasons why
more and more software is being incorporated into large, complex systems

Prototyping
A prototype is an early version of a software system that is used to demonstrate
concepts, try out design options, and find out more about the problem and its possible
solutions. Rapid, iterative development of the prototype is essential so that costs are
controlled and system stakeholders can experiment with the prototype early in the
software process.
A software prototype can be used in a software development process to help anticipate
changes that may be required:
1. In the requirements engineering process, a prototype can help with the elicitation
and validation of system requirements
2. In the system design process, a prototype can be used to explore software
solutions and in the development of a user interface for the system.

Process improvement
The stages in this process are:
1) Process measurement You measure one or more attributes of the software
process or product. These measurements form a baseline that helps you decide
if process improvements have been effective. As you introduce improvements,
you re-measure the same attributes, which will hopefully have improved in some
way.
2) Process analysis: the current process is assessed, and process weaknesses
and bottlenecks are identified. Process models (sometimes called process maps)
that describe the process may be developed during this stage. The analysis may
be focused by considering process characteristics such as rapidity and
robustness.
3) Process change : Process changes are proposed to address some of the
identified process weaknesses. These are introduced, and the cycle resumes to
collect data about the effectiveness of the changes.
Agile methods
 In the 1980s and early 1990s, there was a widespread view that the best way to
achieve better software was through careful project planning, formalized quality
assurance, use of analysis and design methods supported by software tools, and
controlled and rigorous software development processes.
 This plan-driven approach was developed for software developed by large
teams, working for different companies. Teams were often geographically
dispersed and worked on the software for long periods of time. An example of
this type of software is the control systems for a modern aircraft, which might
take up to 10 years from initial specification to deployment. Plan- driven
approaches involve a significant overhead in planning, designing, and
documenting the system.
 Rapid software development became known as agile development or agile
methods. These agile methods are designed to produce useful software quickly.
 The philosophy behind agile methods is reflected in the agile manifesto issued by
the leading developers of these methods.

The principles of agile methods

Agile methods success for:


 Product development where a software company is developing a small or
medium-sized product for sale .Virtually all software products and apps are now
developed using an agile approach.
 Custom system development within an organization, where there is a clear
commitment from the customer to become involved in the development process
and where there are few external stakeholders and regulations that affect the
software
Agile characteristics:
 The processes of specification, design and implementation are interleaved.
 The system is developed in a series of increments. End-users and other system
stakeholders are involved in specifying and evaluating each increment.
 Extensive tool support is used to support the development process

Plan-driven and agile development

 Agile methods are incremental development methods in which the increments


are small, and, typically, new releases of the system are created and made
available to customers every two or three weeks
 Agile approaches to software development consider design and implementation
to be the central activities in the software process

Agile development techniques


 The ideas underlying agile methods were developed around the same time by a
number of different people in the 1990s
 However, perhaps the most significant approach to changing software
development culture was the development of Extreme Programming
 (XP).
The XP release cycle

the agile manifesto


 Incremental development is supported through small, frequent releases of the
system.
 Customer involvement is supported through the continuous engagement of the
customer in the development team.
 People, not process, are supported through pair programming, collective
ownership of the system code, and a sustainable development process that does
not involve excessively long working hours.
 Change is embraced through regular system releases to customers, test- first
development, refactoring to avoid code degeneration, and continuous integration
of new functionality.
 Maintaining simplicity is supported by constant refactoring that improves code
quality and by using simple designs that do not unnecessarily anticipate future
changes to the system.

User stories
 Software requirements always change. To handle these changes, agile methods
do not have a separate requirements engineering activity. Rather, they integrate
requirements elicitation with development. To make this easier, the idea of “user
stories” was developed where a user story is a scenario of use that might be
experienced by a system user.

Refactoring
A fundamental precept of traditional software engineering is that you should design for
change. That is, you should anticipate future changes to the software and design it so
that these changes can be easily implemented. Extreme programming, however has
discarded this principle on the basis that designing for change is often waste effort. It
isn’t worth taking time to add generality to a program to cope with change Often the
changes anticipated never materialize, or completely different change requests may
actually be made.
Test-first development
 •Extreme Programming developed a new approach to program testing to address
the difficulties of testing without a specification. Testing is automated and is
central to the development process, and development cannot proceed until all
tests have been successfully executed.

The key features of testing in XP are:


1. test-first development,
2. incremental test development from scenarios,
3. user involvement in the test development and validation, and
4. the use of automated testing frameworks.

Agile project management


• In any software business, managers need to know what is going on and whether
or not a project is likely to meet its objectives and deliver the software on time
with the proposed budget.
• Like every other professional software development process, agile development
has to be managed so that the best use is made of the time and resources
available to the team.

Scaling agile methods


• Agile methods were developed for use by small programming teams that could
work together in the same room and communicate informally. They were
originally used by for the development of small and medium-sized systems and
software products. Small companies, without formal processes or bureaucracy,
were enthusiastic initial adopters of these methods.

Practical problems with agile methods


• agile methods may not be suitable for other types of software development, such
as embedded systems engineering or the development of large and complex
systems.
an agile approach presents a number of problems:

• The informality of agile development is incompatible with the legal approach to


contract definition that is commonly used in large companies.
• Agile methods are most appropriate for new software development rather than
for software maintenance.
• Agile methods are designed for small co-located teams, yet much software
development now involves worldwide distributed teams.
Agile principles and organizational practice

Agile and plan-driven methods


• A fundamental requirement of scaling agile methods is to integrate them
with plan driven approaches.

Agile methods across organizations


• Small software companies that develop software products have been among the
most enthusiastic adopters of agile methods. These companies are not
constrained by organizational bureaucracies or process standards, and they can
change quickly to adopt new ideas.

It can be difficult to introduce agile methods into large companies for a number of
reasons:
• Project managers who do not have experience of agile methods may be reluctant
to accept the risk of a new approach
• Large organizations often have quality procedures and standards that all projects
are expected to follow
• Agile methods seem to work best when team members have a relatively high skill
level
• There may be cultural resistance to agile methods, especially in those
organizations that have a long history of using conventional systems engineering
processes.
Key Points

You might also like