Object Oriented Software Engineering (3)
Object Oriented Software Engineering (3)
Engineering
Chapter 1: Introduction
Computer Software
Computer software is the product that software professionals build and
then support over the long term.
A textbook description of software might take the following form:
Software is:
● By the 1980's the software cost of a system had risen to 80%, and many
experts pronounced the field "in crisis" because the software development
face the problem of not delivered on time, over budget, unmaintainable
due to poor design and documentation, and unreliable due to poor system
analysis and testing. Increase the use of object-oriented programming
● Java is developed and released in the mid-1990s. Increasing
attention paid to notions of software architecture. Client-server
distributed architectures are increasingly used. The UML is
proposed.
● Today, the use of integrated development environments becomes
more common. Use of stand-alone CASE tools declines. Use of the
UML becomes widespread. Increasing use of scripting languages
such as Python and PERL for software development. C# developed
as a competitor to Java.
Types of Software
Software is the collection of computer programs, procedures and
documentation that performs different tasks on a computer system.
The term 'software' was first used by John Tukey in 1958. At the very
basic level, computer software consists of a machine language that
comprises groups of binary values, which specify processor instructions.
Thus, the software engineering includes overall activities performed during the
production of software such as requirement analysis, planning, designing,
estimation, scheduling and module development, combination of modules for
overall product, testing the deliverables, delivery to the owner, and finally
feedback from the customers.
Now, the same cycle repeats again in response to the feedback for making the
software product more energetic and more perfect as the user requirement.
Role of Software Engineering in System Design
Software Process
Thus, a process is a collection of activities, actions, and tasks that are performed
when some work product is to be created. In the context of software engineering,
a process is not a rigid prescription for how to build computer software.
Rather, it is an adaptable approach that enables the people doing the work (the
software team) to pick and choose the appropriate set of work actions and tasks.
The intent is always to deliver software in a timely manner and with sufficient
quality to satisfy those who have sponsored its creation and those who will use it.
Role of Software Engineering in System Design
In addition, the process framework encompasses a set of umbrella activities that are
applicable across the entire software process.
In general, umbrella activities are applied throughout a software project and help a
software team manage and control progress, quality, change, and risk.
Thus, the umbrella activities occur throughout the software process to their need and then
follow it. In addition, the people who have requested the software help to management,
Generic Process Model
A generic process framework for software engineering defines five
framework activities—communication, planning, modeling, construction,
and deployment.
Now, one important aspect of the software process has not yet been
discussed, called process flow that describes how the framework
activities and the actions and tasks that occur within each framework
activity are organized with respect to sequence and time.
Generic Process Model
(a) Linear Process Flow
As a software team moves down the left side of the V, basic problem
requirements are refined into progressively more detailed and technical
representations of the problem and its solution.
Once code has been generated, the team moves up the right side of the V,
essentially performing a series of tests (quality assurance actions) that
validate each of the models created as the team moved down the left side
Perspective Process Models
b. V Model
Perspective Process Models
b. Rapid Application Development (RAD) Model:
i. Prototyping
The spiral model was originally proposed by Barry Boehm, is an evolutionary software
process model that couples the iterative nature of prototyping with the controlled and
systematic aspects of the waterfall model.
It provides the potential for rapid development of increasingly more complete versions of
the software.
The spiral model is a realistic approach to the development of large-scale systems and
software.
Because software evolves as the process progresses, the developer and customer better
understand and react to risks at each evolutionary level.
The spiral model uses prototyping as a risk reduction mechanism but, more important,
enables you to apply the prototyping approach at any stage in the evolution of the
product.
It maintains the systematic stepwise approach suggested by the classic life cycle but
incorporates it into an iterative framework that more realistically reflects the real world.
The spiral model demands a direct consideration of technical risks at all stages of the
ii. The Spiral Model.
Specialized Process Models
Specialized process models is applied when a specialized or narrowly defined
software engineering approach is chosen.
These model have the characteristics of one or more of the traditional models
presented above.
a. Component-Based Development
The UML may be used to visualize, specify, construct, and document the
artifacts of a softwareintensive system, as well as for business modeling
and other non-software systems.
The UML is called a modeling language, not a method. Most methods consist, at least in
principle, of both a modeling language and a process.
The modeling language is the (mainly graphical) notation that methods use to express
designs. The process is their advice on what steps to take in doing a design.
Unified: Combines main preceding OO methods (Booch by Grady Booch, OMT by James
Rumbaugh and OOSE by Ivar Jacobson).
Modeling: Primarily used for visually modeling systems. Many system views are supported
by appropriate model.
The UML is a language for:
● Visualizing: The UML is more than just a bunch of graphical symbols.
Rather, behind each symbol in the UML notation is a well-defined
semantics. In this manner, one developer can write a model in the UML,
and another developer, or even another tool, can interpret that model
unambiguously
● Specifying: means building models that are precise, unambiguous, and
complete.
● Constructing: the UML is not a visual programming language, but its
models can be directly connected to a variety of programming languages
● Documenting: a healthy software organization produces all sorts of
artifacts in addition to raw executable code. These artifacts include:
Requirements, Architecture, Design, Source code, Project plans, Tests,
Prototypes, and Releases.
Unified Process
UML provided the necessary technology to support object-oriented software
engineering practice, but it did not provide the process framework to guide
project teams in their application of the technology.
Over the next few years, Jacobson, Rumbaugh, and Booch developed the Unified
Process, a framework for objectoriented software engineering using UML.
The phases of unified process are similar to the generic framework activities as
shown in figure.
Today, the Unified Process (UP) and UML are widely used on object-oriented
projects of all kinds.
The iterative, incremental model proposed by the UP can and should be adapted
to meet specific project needs.
System Flowchart
A system flowchart shows the path taken by data in a system and
the decisions made during different levels.
An agile team fosters communication and collaboration among all who serve on it.
● For many types of software, design and construction are interleaved. That is, both
activities should be performed in tandem so that design models are proven as they are
created. It is difficult to predict how much design is necessary before construction is used
to prove the design.
● Analysis, design, construction, and testing are not as predictable (from a planning point of
view) as we might like.
These three assumptions indicates the problem of unpredictability on software
engineering process and hence an agile process must be adapt the hidden
changes.
An agile software process adapt incrementally with the help of regular customer
feedback.
The Agile Alliance defines 12 agility principles for those who want to achieve agility:
1. Our highest priority is to satisfy the customer through early and continuous
delivery of valuable software.
4. Business people and developers must work together daily throughout the project.
5. Build projects around motivated individuals. Give them the environment and
support they need, and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within a
development team is face-to-face conversation.
2. Agility Principles
10. Simplicity—the art of maximizing the amount of work not done—is essential.
11. The best architectures, requirements, and designs emerge from self-organizing
teams.
12. At regular intervals, the team reflects on how to become more effective, then
tunes and adjusts its behavior accordingly.
3. Agile Process Models
The history of software engineering taught the lesion that “The “winners” evolve into
best practice, while the “losers” either disappear or merge with the winning models.”
With the introduction of a wide array of agile process models (all follows the principle
and paradigms of Agile Software Development), the most common are:
● Extreme Programming (XP),
● Adaptive Software Development (ASD),
● Scrum,
● Dynamic Systems Development Method (DSDM),
● Crystal,
● Feature Drive Development (FDD),
● Lean Software Development (LSD),
● Agile Modeling (AM), and
● Agile Unified Process (AUP).
A. Extreme Programming (XP)
The ideas and methods associated with XP was written by Kent Beck
during the late 1980s.
Demos—deliver the software increment to the customer so that functionality that has been
implemented can be demonstrated and evaluated by the customer.
Scrum
D. DSDM (Dynamic System Development Method)
Feasibility study—establishes the basic business requirements and constraints associated with the
application to be built and then assesses whether the application is a viable candidate for the DSDM process.
Business study—establishes the functional and information requirements that will allow the application to
provide business value.
Functional model iteration—produces a set of incremental prototypes that demonstrate functionality for the
customer. The intent during this iterative cycle is to gather additional requirements by eliciting feedback
from users as they exercise the prototype.
Design and build iteration—revisits prototypes built during functional model iteration to ensure that each
has been engineered in a manner that will enable it to provide operational business value for end users. In
some cases, functional model iteration and design and build iteration occur concurrently.
E. Feature Driven Development(FDD)
FDD was originally conceived by Peter Coad as a practical process model for object-
oriented software engineering and then extended and improved using agile process. This
model can applied to moderately sized and larger software projects. FDD adopts a
philosophy that
(2) manages problem and project complexity using feature-based decomposition followed
by the integration of software increments, and
(3) communication of technical detail using verbal, graphical, and text-based means.
2. Assessing the cost and schedule impact of any newly requested requirement,
6. Reducing the time required to request and get a decision that affects the software or the process that is
applied to create it, and
7. Streamlining the manner in which information is transmitted to all stakeholders involved in the process.