Software Engineering
Lecture 01
Introduction
What is Software?
Software: “Computer programs and associated
documentation such as requirements, design models and
user manuals”.
Software products may be developed for a particular
customer or may be developed for a general market.
Software
Program: The program or code itself is definitely included in
the software.
Data: The data on which the program operates is also
considered as part of the software.
Documentation: Another very important thing that most of us
forget is documentation. All the documents related to the
software are also considered as part of the software.
So the software is not just the code written in Cobol, Java,
Fortran or C++. It also includes the data and all the
documentation related to the program.
Types of Software.
Custom
◦ For a specific customer
Generic
◦ Sold on open market
◦ Often called
COTS (Commercial Off The Shelf)
Embedded
◦ Built into hardware
◦ Hard to change
Types of Software
Real time software
Example. Control and monitoring systems
Must react immediately
Safety often a concern
Data processing software
Used to run businesses
Accuracy and security of data are key
Some software have both aspects
Software Products
Generic Products
◦ Stand-alone systems that are marketed and sold to any
customer who wishes to buy them.
◦ Examples – PC software such as graphics programs, project
management tools; CAD software;
◦ Customized Products
◦ Software that is commissioned by a specific customer to
meet their own needs.
◦ Examples – embedded control systems, air traffic control
software, traffic monitoring systems.
Software
Applications
1. System software: such as compilers, editors, file management utilities
2. Application software: stand-alone programs for specific needs.
3.Engineering/scientific software: Characterized by “number
crunching”algorithms. such as automotive stress analysis, molecular biology,
orbital dynamics etc
4. Embedded software resides within a product or system. (key pad control of
a microwave oven, digital function of dashboard display in a car)
5. Product-line software focus on a limited marketplace to address mass
consumer market. (word processing, graphics, database management)
6. WebApps (Web applications) network centric software. As web 2.0
emerges, more sophisticated computing environments is supported
integrated with remote database and business applications.
7. AI software uses non-numerical algorithm to solve complex problem.
Robotics, expert system, pattern recognition game playing
What is Software Engineering?
“Software engineering is an engineering discipline that is
concerned with all aspects of software production”.
Engineering discipline
◦ Using appropriate theories and methods to solve problems
bearing in mind organizational and financial constraints.
All aspects of software production
◦ Not just technical process of development. Also project
management and the development of tools, methods etc. to
support software production.
Software Engineering Definition
The seminal definition:
[Software engineering is] the establishment and use of sound engineering
principles in order to obtain economically software that is reliable and works
efficiently on real machines.
The IEEE definition:
Software Engineering: The application of a systematic, disciplined,
quantifiable approach to the development, operation, and maintenance of
software; that is, the application of engineering to software.
Software engineers should adopt a systematic and organised approach to
their work and use appropriate tools and techniques depending on the
problem to be solved, the development constraints and the resources available.
Computer Science Vs. Software Engineering
“Software Engineering is the process of utilizing our
knowledge of computer science in effective production of
software systems.”
Computer Science Software Engineering
Computer science is concerned with the theories and Software engineering is concerned with the practical
methods that underlie computers and software problems of producing software.
system.
What is the difference between
Software Engineering and Computer
Science?
“Computer science is concerned with theory and
fundamentals; while software engineering is concerned with
the practicalities of developing and delivering useful software”.
Computer science theories are still insufficient to act as a
complete underpinning (supporting) for software engineering
(unlike e.g. physics and electrical engineering).
A Software Engineering Framework
A quality focus
◦ Any engineering approach must rest on organizational commitment
to quality which fosters a continuous process improvement culture.
Process layer
◦ The foundation for software engineering is the process layer
◦ Defines a framework that must be established for effective delivery
of software engineering technology
◦ Establish a context where
Products (model, data, report, and forms) are produced
Milestones are established
Quality is ensured
Change is managed
A Software Engineering Framework
Methods
◦ Provide the technical how-to for building software
◦ Methods encompass a broad array of tasks
Communication , requirements analysis, design modeling, program
construction, testing, and support
Tools
◦ Provide automated or semi-automated support for the process and
the methods
◦ Integrated tools to support software development
Called computer aided software engineering
Importance of Software Engineering
What is a Software Process?
Software Process: “The systematic approach that is used in
software engineering is sometimes called a software process.”
“Aset of activities whose goal is the development or evolution of
software”.
Generic activities in all software processes are:
◦ Software specification
◦ Software development:
◦ Software validation:
◦ Software evolution:
Activities in Software Process?
Generic activities in all software processes are:
◦ Software Specification - what the system should do and its development constraints
where customers and engineers define the software that is to be produced and the
constraints on its operation
◦ Software Development - production of the software system
where the software is designed and programmed
◦ Software Validation - checking that the software is what the customer wants
where the software is checked to ensure that it is what the customer requires.
◦ Software Evolution - changing the software in response to changing demands
where the software is modified to reflect changing customer and market
requirements.
What is a Software Process Model?
Software Process Model: “A simplified representation of a
software process, presented from a specific perspective”.
Examples of process perspectives are:
◦ Work flow what is done when? - sequence of activities;
◦ Data flow which information flows where?
◦ Role / action who does what?
Generic process models
◦ Waterfall
◦ Iterative development
◦ Component-based software engineering.
What are Software Engineering Methods?
Software Engineering Methods: “Structured approaches to
software development which include system models, notations,
rules, design advice and process guidance" .
Model descriptions
◦ Descriptions of graphical models which should be produced
Rules
◦ Constraints applied to system models
Recommendations
◦ Advice on good design practice
Process guidance
◦ What activities to follow
What is CASE?
(Computer-Aided Software Engineering)
CASE: “Software systems that are intended to provide
automated support for software process activities”.
CASE systems are often used for method support.
Upper-CASE
◦ Tools to support the early process activities of requirements and
design;
Lower-CASE
◦ Tools to support later activities such as programming, debugging
and testing.
What are the attributes of good Software?
The software should deliver the required functionality and
performance to the user and should be maintainable,
dependable and acceptable.
Maintainability
◦ Software must evolve to meet changing needs
Dependability
◦ Software must be trustworthy
Efficiency
◦ Software should not make wasteful use of system resources
Acceptability
◦ Software must accepted by the users for which it was designed.
This means it must be understandable, usable and compatible
with other systems.
What are the key challenges facing
Software Engineering?
Key challenges are: Heterogeneity, delivery, trust and Legacy systems
Heterogeneity
◦ Developing techniques for building software that can cope with
heterogeneous platforms and execution environments.
◦ Large-scale systems are often distributed and include a mix of hardware
and software
Delivery
◦ Developing techniques that lead to faster delivery of software.
◦ There is increasing pressure for ever faster delivery of software
Trust
◦ Developing techniques that demonstrate that software can be trusted by
its users.
Legacy systems
◦ Valuable existing systems must be maintained and updated
What are Stakeholders in Software
Engineering?
Stakeholder: A stakeholder is anyone who has a stake in the
successful outcome of the project
1. Users
◦ Those who use the software
2. Customers
◦ Those who pay for the software
3. Software developers
4. Development Managers
Note: All four roles can be fulfilled by the same person
What are Difficulties and Risks in
Software Engineering?
• Complexity and large numbers of details
• Uncertainty about technology
• Uncertainty about requirements
• Uncertainty about software engineering skills
• Constant change
• Political risks
Web Software Engineering
The Web is now a platform for running application and organizations are
increasingly developing web-based systems rather than local systems
Software reuse is the dominant approach for constructing web-based
systems.
When building these systems, you think about how you can assemble
them from pre-existing software components and systems.
Web-based systems should be developed and delivered incrementally.
◦ It is now generally recognized that it is impractical to specify all the
requirements for such systems in advance.
User interfaces are constrained by the capabilities of web browsers.
◦ Technologies such as AJAX allow rich interfaces to be created within a
web browser but are still difficult to use. Web forms with local scripting
are more commonly used.