Identify Customer Segments to Create Customer Offers for Each Segment - Appli...
Introduction to Software engineering ch03
1. Topics in Computing
Lecture 3
Introduction to Software Engineering
College of Computers and Information Systems
2. 1. Objectives
2. Background
3. Main Concepts of Software Engineering
4. Importance of Software Engineering
5. History of Software Engineering
6. Software Process
7. Different Types of Process Models
8. Example of Software Engineering Tools
9. Ethical Aspects
10. Careers and Challenges
11. Activity
Outline
3. Objectives
The objectives of this week is :
1. Understand the main software engineering concepts, principles, and
essential processes of the SDLC
2. Understand the development of different types of software
3. Understand ethical and issues that are important for software engineers
4. Able to learn about a set of examples and challenges
4. Background
• 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
• There are many different types of a software system, ranging from simple
embedded systems to complex, worldwide information systems
5. Main Concepts
• Engineering: is the application of scientific and practical knowledge in order to invent,
design, build, maintain, and improve systems, process, etc.
• Engineering: is about getting results of the required quality within schedule and budget.
This often involves making compromises—engineers cannot be perfectionists.
• People writing programs for themselves, however, can spend as much time as they
wish on the program development.
• Software: is the collection of integrated programs.
• Software: consists of carefully organized instructions and code written by
programmers in any of various special computer languages.
6. Main Concepts
• Software Engineering: According to IEEE’s software engineering can be
defined as the application of systematic, disciplined, quantifiable approach to
the development , operation, and maintenance of software, and the study of
these approaches, that is the application of engineering to software.
• Software Development Method: is a method or technique used when
developing software. It is a broad concept that includes various software
development phases such as design, development and testing. This is also
known as the Systems Development Life Cycle (SDLC).
7. The difference between software engineering , computer science, and
?computer engineering
• Computer science focuses on theory and fundamentals;
• Software engineering is concerned with the practicalities of developing and delivering
useful software.
• Computer engineering is concerned with all aspects of computer- based systems
development including hardware, software and process engineering.
Software engineering is part of this more general process.
8. Importance of Software Engineering
Software engineering is intended to support professional software development rather
than individual programming. It includes techniques that support program specification,
design, and evolution, none of which are normally relevant for personal software
development.
Software engineering is essential for two reasons:
1.More and more, individuals and society rely on advanced software systems. We need
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 writing programs as a
personal programming project.
3.Failure to use the software engineering method leads to higher costs for testing,
quality assurance, and long-term maintenance.
9. History of Software Engineering
• The notion of software engineering was first proposed in 1968 at a conference
held to discuss what was then called the software crisis (Naur and Randell
1969).
• Throughout the 1970s and 1980s, a variety of new software engineering
techniques and methods were developed, such as structured programming,
information hiding, and object-oriented development.
• Tools and standard notations were developed which are the basis of today’s
software engineering.
10. Software Process Activities
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.
11. Type of Software 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.
• Integration and configuration
• The system is assembled from existing configurable components. May be plan-driven or
agile.
• In practice, most large systems are developed using a process that
incorporates elements from all of these models.
13. Waterfall model
• There are separate identified phases in the waterfall model:
• Requirements analysis and definition
• System and software design
• Implementation and unit testing
• Integration and system testing
• Operation and maintenance
• 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.
14. Waterfall model
• 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.
• Few business systems have stable requirements.
• 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.
15. Incremental (Agile) Model
• Rapid development and delivery is now often the most important requirement for
software systems
• Businesses operate in a fast-changing requirement, and it is practically impossible
to produce a set of stable software requirements
• Software has to evolve quickly to reflect changing business needs.
• Plan-driven development is essential for some types of system but does not meet
these business needs.
• Agile development methods emerged in the late 1990s whose aim was to radically
reduce the delivery time for working software systems
16. Incremental (Agile) Model
• Program specification, design and implementation are inter-leaved
• The system is developed as a series of versions or increments with
stakeholders involved in version specification and evaluation
• Frequent delivery of new versions for evaluation
• Extensive tool support (e.g. automated testing
development.
tools) used to support
• Minimal documentation – focus on working code
18. Plan-Driven vs Agile Development
• Plan-driven development
• A plan-driven approach to software engineering is based around separate
development stages with the outputs to be produced at each of these
stages planned in advance.
• Not necessarily waterfall model – plan-driven, incremental development is
possible
• Iteration occurs within activities.
• 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.
20. Agile Development types (cont.)
Scrum Cycle :
• Sprints are fixed length, normally 2–4 weeks.
• 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.
21. Agile Development types (cont.)
2. Extreme programming (XP)
• A very influential agile method, developed in the late 1990s, that introduced a range of
agile development techniques.
• Extreme Programming (XP) takes an ‘extreme’ approach to iterative development.
• New versions may be built several times per day;
• Increments are delivered to customers every 2 weeks;
• All tests must be run for every build and the build is only accepted if tests run successfully.
23. Application types
1. Stand-alone applications
• These are application systems that run on a local computer, such as a PC.
They include all necessary functionality and do not need to be connected to a
network.
2. Interactive transaction-based applications
• Applications that execute on a remote computer and are accessed by users
from their own PCs or terminals. These include web applications such as e-
commerce applications.
24. Application types
3. 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.
Batch processing systems. 4
These are business systems that are designed to process data in large batches.
.They process large numbers of individual inputs to create corresponding outputs
25. Application types
Entertainment systems .5
These are systems that are primarily for personal use, and which are intended to
. entertain the user
Systems for modelling and simulation. 6
These are systems that are developed by scientists and engineers to model
.physical processes or situations, which include many, separate, interacting objects
26. Application types
7. Data collection systems
These are systems that collect data from their environment using a set of sensors
and send that data to other systems for processing.
8. Systems of systems
These are systems that are composed of a number of other software systems.
27. Software development tools
Software development tools are programs that are used to support software
engineering process activities. These tools include requirements management
tools, design editors, refactoring support tools, compilers, debuggers, bug
trackers, and system building tools.
Software tools provide process support by automating some process activities
and by providing information about the software that is being developed.
28. Software development tools
For example:
• The development of graphical system models as part of the requirements
specification or the software design.
• The generation of code from these graphical models.
• The generation of user interfaces from a graphical interface description that is
created interactively by the user.
• Program debugging through the provision of information about an executing
program.
29. Software development tools
• The automated translation of programs written using an old version of a
programming language to a more recent version.
✔ Tools may be combined within a framework called an Interactive Development
Environment or IDE. This provides a common set of facilities that tools can use
so that it is easier for tools to communicate and operate in an integrated way.
31. Software Engineering Ethics
• 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. You should not use your skills and abilities to behave in a dishonest
way or in a way that will bring disrepute to the software engineering profession.
• However, there are areas where standards of acceptable behavior are not
bound by laws but by the more tenuous notion of professional responsibility.
32. Software Engineering Ethics
Some of ethical areas are:
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.
33. Software Engineering Ethics
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).
34. Challenges
1. The rapid advancement of technology
2. Increasing customer demands in the development stage
3. Time limitation
4. Limited infrastructure/ resources
5. Understanding the large and complex system requirements is difficult
6. Undefined system boundaries
7. Customers are not clear about their needs
35. Challenges
8. Conflicting requirements
9. Partitioning the system suitably to reduce complexity
10. Validating and tracing requirements
11. Identifying critical requirements
12. Resolving the "to be determined" requirements
13. Proper documentation, proper meetings time, and budget constraints
•
37. Discussion Group
From your opinion
After you understand the different types of software methods, what is the most
successful and appropriate method we should apply in our project?
38. Summary of the Chapter
• Software processes are the activities involved in producing a software system.
Software process models are abstract representations of these processes.
• General process models describe the organization of software processes.
• Examples of these general models include the ‘waterfall’ model, incremental
development, and reuse-oriented development.
39. Summary of the Chapter
• Software engineering is an engineering discipline that is concerned with all
aspects of software production.
• Agile methods are incremental development methods that focus on rapid
software development, frequent releases of the software, reducing process
overheads by minimizing documentation and producing high-quality code.
• Some points of the confidentiality for business owners that affect the level of
project efficiency
• Some challenges of software engineering.