Introduction to Software Engineering Concepts
Introduction to Software Engineering Concepts
INTRODUCTION
A software is a computer program along with the associated documents and the
configuration data that make these programs operate correctly.
A program is a set of instructions (written in form of human-readable code) that performs a
specific task.
There are many different types of software systems from simple to complex systems.
These systems may be developed for a particular customer, like systems to support a
particular business process, or developed for a general purpose, like any software for our
computers such as word processors.
It’s the application of theories, methods, and tools to design build a software that meets the
specifications efficiently, cost-effectively, and ensuring quality.
It’s not only concerned with the technical process of building a software, it also includes
activities to manage the project, develop tools, methods and theories that support the
software production.
Not applying software engineering methods results in more expensive, less reliable software,
and it can be vital on the long term, as the changes come in, the costs will dramatically
increase.
o Cost Management
Sophistication and complexity can produce dazzling results when a system succeeds, but
they can also pose huge problems for those who must build complex systems.
The lone programmer of an earlier era has been replaced by a team of software specialists,
each focusing on one part of the technology required to deliver a complex application.
And yet, the same questions asked of the lone programmer are being asked when modern
computer-based systems are built:
• Why does it take so long to get software finished?
• Why can't we find all the errors before we give the software to customers?
1. WebApps
In the early days of the World Wide Web (circa 1990 to 1995), websites consisted of little
more than a set of linked hypertext files that presented information using text and limited
graphics.
As time passed, the augmentation of HTML by development tools (e.g., XML, Java) enabled
Web engineers to provide computing capability along with informational content.
Web-based systems and applications 5 (we refer to these collectively as WebApps ) were
born.
Today, WebApps have evolved into sophisticated computing tools that not only provide
stand-alone function to the end user, but also have been integrated with corporate
databases and business applications.
Semantic Web technologies (often referred to as Web 3.0) have evolved into sophisticated
corporate and consumer applications that encompass “semantic databases [that] provide
new functionality that requires Web linking, flexible [data] representation, and external
access APIs.”
2. Mobile Applications
The term app has evolved to connote software that has been specifically designed to reside
on a mobile platform (e.g., iOS, Android, or Windows Mobile).
In most instances, mobile applications encompass a user interface that takes advantage of
the unique interaction mechanisms provided by the mobile platform, interoperability with
Web-based resources that provide access to a wide array of information that is relevant to
the app, and local processing capabilities that collect, analyze, and format information in a
manner that is best suited to the mobile platform.
In addition, a mobile app provides persistent storage capabilities within the platform.
A mobile web application (WebApp) allows a mobile device to gain access to web-based
content via a browser that has been specifically designed to accommodate the strengths and
weaknesses of the mobile platform.
A mobile app can gain direct access to the hardware characteristics of the device (e.g.,
accelerometer or GPS location) and then provide the local processing and storage
capabilities noted earlier.
As time passes, the distinction between mobile WebApps and mobile apps will blur as
mobile browsers become more sophisticated and gain access to device level hardware and
information.
3. Cloud Computing
Referring to the figure, computing devices reside outside the cloud and have access to a
variety of resources within the cloud.
These resources encompass applications, platforms, and infrastructure.
In its simplest form, an external computing device accesses the cloud via a Web browser or
analogous software.
The cloud provides access to data that resides with databases and other data structures.
In addition, devices can access executable applications that can be used in lieu of apps that
reside on the computing device.
The implementation of cloud computing requires the development of an architecture that
encompasses front-end and back-end services.
The front-end includes the client (user) device and the application software (e.g., a browser)
that allows the back-end to be accessed.
The back-end includes servers and related computing resources, data storage systems (e.g.,
databases), server-resident applications, and administrative servers that use middleware to
coordinate and monitor traffic by establishing a set of protocols for access to the cloud and
its resident resources.
The cloud architecture can be segmented to provide access at a variety of different levels
from full public access to private cloud architectures accessible only to those with
authorization.
The Software Engineering Institute defines a software product line as “a set of software-
intensive systems that share a common, managed set of features satisfying the specific
needs of a particular market segment or mission and that are developed from a common set
of core assets in a prescribed way.”
The concept of a line of software products that are related in some way is not new.
But the idea that a line of software products, all developed using the same underlying
application and data architectures, and all implemented using a set of reusable software
components that can be reused across the product line provides significant engineering
leverage.
A software product line shares a set of assets that include requirements, architecture ,
design patterns, reusable components, test cases, and other software engineering work
products.
In essence, a software product line results in the development of many products that are
engineered by capitalizing on the commonality among all the products within the product
line.
Legacy Software
Hundreds of thousands of computer programs fall into one of the seven broad application domains
given below:
System software – They are a a collection of programs written to service other programs
(e.g., compilers, editors, and file management utilities).
Application software – They are stand-alone programs that solve a specific business need
(e.g., point-of-saletransaction processing, real-time manufacturing process control).
Engineering/scientific software - Applications range from astronomy to volcanology, from
automotive stress analysis to space shuttle orbital dynamics, and from molecular biology to
automated manufacturing.
Embedded software – It resides within a product or system and is used to implement and
control features and functions for the end user and for the system itself.
Product-line software - Product-line software can focus on a limited and esoteric
marketplace (e.g., inventory control products) or address mass consumer markets (e.g.,
word processing, spreadsheets, computer graphics, multimedia, entertainment, database
management, and personal and business financial applications).
Esoteric = (requiring or exhibiting knowledge that is restricted to a small group )
Web applications - WebApps are evolving into sophisticated computing environments that
not only provide stand-alone features, computing functions, and content to the end user,
but also are integrated with corporate databases and business applications.
Artificial intelligence software - Applications within this area include robotics, expert
systems, pattern recognition (image and voice), artificial neural networks, theorem proving,
and game playing.
Some of these are state-of-the-art software—just released to individuals, industry, and
government. But other programs are older, in some cases much older.
These older programs—often referred to as legacy software—have been the focus of
continuous attention and concern since the 1960s.
Dayani-Fard and his colleagues describe legacy software in the following way:
Legacy software systems . . . were developed decades ago and have been continually
modified to meet changes in business requirements and computing platforms. The
proliferation of such systems is causing headaches for large organizations who find them
costly to maintain and risky to evolve.
Liu and his colleagues extend this description by noting that “many legacy systems remain
supportive to core business functions and are ‘indispensable’ to the business.” Hence, legacy
software is characterized by longevity and business criticality.
Unfortunately, there is sometimes one additional characteristic that is present in legacy
software—poor quality. Legacy systems sometimes have inextensible designs, convoluted
code, poor or nonexistent documentation, test cases and results that were never archived, a
poorly managed change history—the list can be quite long.
And yet, these systems support “core business functions and are indispensable to the
business.” What to do?
The only reasonable answer may be: Do nothing, at least until the legacy system must
undergo some significant change.
If the legacy software meets the needs of its users and runs reliably, it isn’t broken and does
not need to be fixed.
However, as time passes, legacy systems often evolve for one or more of the following
reasons:
The software must be adapted to meet the needs of new computing environments or
technology.
The software must be enhanced to implement new business requirements.
The software must be extended to make it interoperable with other more modern systems
or databases.
The software must be re-architected to make it viable within a network environment.
When these modes of evolution occur, a legacy system must be reengineered so that it
remains viable into the future.
The goal of modern software engineering is to “devise methodologies that are founded on
the notion of evolution”; that is, the notion that software systems continually change, new
software systems are built from the old ones, and . . . all must interoperate and cooperate
with each other”.
Software Myths
Software myths—erroneous beliefs about software and the process that is used to build it—can
be traced to the earliest days of computing.
Today, most knowledgeable software engineering professionals recognize myths for what they
are—misleading attitudes that have caused serious problems for managers and practitioners
alike.
However, old attitudes and habits are difficult to modify, and remnants of software myths
remain.
Management myths. Managers with software responsibility, like managers in most disciplines,
are often under pressure to maintain budgets, keep schedules from slipping, and improve
quality.
Like a drowning person who grasps at a straw, a software manager often grasps at belief in a
software myth, if that belief will lessen the pressure (even temporarily).
Myth: We already have a book that’s full of standards and procedures for building software.
Won’t that provide my people with everything they need to know?
Reality: The book of standards may very well exist, but is it used? Are software practitioners
aware of its existence? Does it reflect modern software engineering practice? Is it complete? Is it
adaptable? Is it streamlined to improve time-to-delivery while still maintaining a focus on
quality? In many cases, the answer to all of these questions is “no.”
Myth: If we get behind schedule, we can add more programmers and catch up (sometimes
called the “Mongolian horde” concept).
Reality: Software development is not a mechanistic process like manufacturing. In the words of
Brooks: “adding people to a late software project makes it later.” At first, this statement may
seem counterintuitive. However, as new people are added, people who were working must
spend time educating the newcomers, thereby reducing the amount of time spent on productive
development effort. People can be added but only in a planned and well coordinated manner.
Myth: If I decide to outsource the software project to a third party, I can just relax and let that
firm build it.
Reality: If an organization does not understand how to manage and control software projects
internally, it will invariably struggle when it outsources software projects.
Customer myths. A customer who requests computer software may be a person at the next
desk, a technical group down the hall, the marketing/sales department, or an outside company
that has requested software under contract. In many cases, the customer believes myths about
software because software managers and practitioners do little to correct misinformation. Myths
lead to false expectations (by the customer) and, ultimately, dissatisfaction with the developer.
Myth: A general statement of objectives is sufficient to begin writing programs—we can fill in
the details later.
Reality: Although a comprehensive and stable statement of requirements is not always possible,
an ambiguous “statement of objectives” is a recipe for disaster. Unambiguous requirements
(usually derived iteratively) are developed only through effective and continuous communication
between customer and developer.
Myth: Software requirements continually change, but change can be easily accommodated
because software is flexible.
Reality: It is true that software requirements change, but the impact of change varies with the
time at which it is introduced. When requirements changes are requested early (before design
or code has been started), the cost impact is relatively small. However, as time passes, the cost
impact grows rapidly—resources have been committed, a design framework has been
established, and change can cause upheaval that requires additional resources and major design
modification.
Practitioner’s myths. Myths that are still believed by software practitioners have been fostered
by over 50 years of programming culture. During the early days, programming was viewed as an
art form. Old ways and attitudes die hard.
Myth: Once we write the program and get it to work, our job is done.
Reality: Someone once said that “the sooner you begin ‘writing code,’ the longer it’ll take you to
get done.” Industry data indicate that between 60 and 80 percent of all effort expended on
software will be expended after it is delivered to the customer for the first time.
Myth: Until I get the program “running” I have no way of assessing its quality.
Reality: One of the most effective software quality assurance mechanisms can be applied from
the inception of a project—the technical review. Software reviews are a “quality filter” that have
been found to be more effective than testing for finding certain classes of software defects.
Myth: The only deliverable work product for a successful project is the working program.
Reality: A working program is only one part of a software configuration that includes many
elements. A variety of work products (e.g., models, documents, plans) provide a foundation for
successful engineering and, more important, guidance for software support.
Myth: Software engineering will make us create voluminous and unnecessary documentation
and will invariably slow us down.
Reality: Software engineering is not about creating documents. It is about creating a quality
product. Better quality leads to reduced rework. And reduced rework results in faster delivery
times.
The support phase focuses on change associated with error correction, adaptations required
as the software's environment evolves, and changes due to enhancements brought about by
changing customer requirements. The support phase reapplies the steps of the definition
and development phases but does so in the context of existing software.
o Correction. Even with the best quality assurance activities, it is likely that the
customer will uncover defects in the software. Corrective maintenance changes the
software to correct defects.
o Adaptation. Over time, the original environment (e.g., CPU, operating system,
business rules, external product characteristics) for which the software was
developed is likely to change. Adaptive maintenance results in modification to the
software to accommodate changes to its external environment.
Communication.
o The intent is to understand stakeholders’ objectives for the project and to gather
requirements that help define software features and functions.
Planning.
Modelling.
o If required, you refine the sketch into greater and greater detail in an effort to better
understand the problem and how you’re going to solve it. A software engineer does
the same thing by creating models to better understand software requirements and
the design that will achieve those requirements.
Construction.
o What you design must be built. This activity combines code generation (either
manual or automated) and the testing that is required to uncover errors in the code.
Deployment.
These five generic framework activities can be used during the development of small, simple
programs, the creation of Web applications, and for the engineering of large, complex computer-
based systems. The details of the software process will be quite different in each case, but the
framework activities remain the same.
Capability Maturity Model Integration
Maturity is a measurement of the ability of an organization for continuous improvement in a
particular discipline.
A maturity model is a tool that helps people assess the current effectiveness of a person or group
and supports figuring out what capabilities they need to acquire next in order to improve their
performance.
Maturity models are structured as a series of levels of effectiveness. It's assumed that anyone in the
field will pass through the levels in sequence as they become more capable.
The Capability Maturity Model was originally developed as a tool for objectively assessing the ability
of government contractors' processes to implement a contracted software project.
Working with a maturity model begins with assessment, determining which level the subject is
currently performing in. Once you've carried out an assessment to determine your level, then you
use the level above your own to prioritize what capabilities you need to learn next. This prioritization
of learning is really the big benefit of using a maturity model. It's founded on the notion that if you
are at level 2 in something, it's much more important to learn the things at level 3 than level 4. The
model thus acts as guide to what to learn, putting some structure on what otherwise would be a
more complex process.
The vital point here is that the true outcome of a maturity model assessment isn't what level you are
but the list of things you need to work on to improve.
The Capability Maturity Model (CMM) is a methodology used to develop and refine an organization's
software development process.
The model describes a five-level evolutionary path of increasingly organized and systematically more
mature processes.
CMM was developed and is promoted by the Software Engineering Institute (SEI), a research and
development center sponsored by the U.S. Department of Defense (DoD).
SEI was founded in 1984 to address software engineering issues and, in a broad sense, to advance
software engineering methodologies.
More specifically, SEI was established to optimize the process of developing, acquiring, and
maintaining heavily software-reliant systems for the DoD.
Because the processes involved are equally applicable to the software industry as a whole, SEI
advocates industry-wide adoption of the CMM.
Capability Maturity Model Integration (CMMI) is a process level improvement training and appraisal
program.
The Capability Maturity Model Integration (CMMI) helps organizations streamline process
improvement, encouraging a productive, efficient culture that decreases risks in software, product
and service development.
The CMMI starts with an appraisal process that evaluates three specific areas: process and service
development, service establishment and management, and product and service acquisition. It’s
designed to help improve performance by providing businesses with everything they need to
consistently develop better products and services.
But the CMMI is more than a process model; it’s also a behavioural model. Businesses can use the
CMMI to tackle the logistics of improving performance by developing measurable benchmarks, but it
can also create a structure for encouraging productive, efficient behavior throughout the
organization.
The CMMI model breaks down organizational maturity into five levels. For businesses that embrace
CMMI, the goal is to raise the organization up to Level 5, the “optimizing” maturity level. Once
businesses reach this level, they aren’t done with the CMMI. Instead, they focus on maintenance
and regular improvements.
Initial: Processes are viewed as unpredictable and reactive. At this stage, “work gets completed but
it’s often delayed and over budget.” This is the worst stage a business can find itself in — an
unpredictable environment that increases risk and inefficiency.
Ad hoc activities characterize a software development organization at this level. Very few or no
processes are described and followed. Since software production processes are not limited, different
engineers follow their process and as a result, development efforts become chaotic. Therefore, it is
also called a chaotic level.
Managed: There’s a level of project management achieved. Projects are “planned, performed,
measured and controlled” at this level, but there are still a lot of issues to address.
At this level, the fundamental project management practices like tracking cost and schedule are
established. Size and cost estimation methods, like function point analysis, COCOMO, etc. are used.
Defined: At this stage, organizations are more proactive than reactive. There’s a set of “organization-
wide standards” to “provide guidance across projects, programs and portfolios.” Businesses
understand their shortcomings, how to address them and what the goal is for improvement.
Quantitatively managed: This stage is more measured and controlled. The organization is working
off quantitative data to determine predictable processes that align with stakeholder needs. The
business is ahead of risks, with more data-driven insight into process deficiencies.
Optimizing: Here, an organization’s processes are stable and flexible. At this final stage, an
organization will be in constant state of improving and responding to changes or other
opportunities. The organization is stable, which allows for more “agility and innovation,” in a
predictable environment.
Once organizations hit Levels 4 and 5, they are considered high maturity, where they are
“continuously evolving, adapting and growing to meet the needs of stakeholders and customers.”
That is the goal of the CMMI: To create reliable environments, where products, services and
departments are proactive, efficient and productive.
Except for SEI CMM level 1, each maturity level is featured by several Key Process Areas (KPAs) that
contains the areas an organization should focus on improving its software process to the next level.
The focus of each level and the corresponding key process areas are shown in the fig.
Capability Maturity Model Integration (CMMI) is a successor of CMM and is a more evolved model
that incorporates best components of individual disciplines of CMM like Software CMM, Systems
Engineering CMM, People CMM, etc. Since CMM is a reference model of matured practices in a
specific discipline, so it becomes difficult to integrate these disciplines as per the requirements. This
is why CMMI is used as it allows the integration of multiple disciplines as and when needed.
Objectives of CMMI :
Staged Representation :
Continuous Representation :
Process Models
What is it?
Software engineers and their managers adapt a process model to their needs and then
follow it.
In addition, the people who have requested the software have a role to play in the process
of defining, building, and testing it.
Why is it important?
Because process provides stability, control, and organization to an activity that can, if left
uncontrolled, become quite chaotic.
However, a modern software engineering approach must be “agile.”
It must demand only those activities, controls, and work products that are appropriate for
the project team and the product that is to be produced.
o The process model provides you with the “steps” you’ll need to perform disciplined
software engineering work.
o From the point of view of a software engineer, the work product is a customized
description of the activities and tasks defined by the process.
o However, the quality, timeliness, and long-term viability of the product you build are
the best indicators of the efficacy of the process that you use
All software process models can accommodate the generic framework activities, but each
applies a different emphasis to these activities and defines a process flow that invokes each
framework activity (as well as software engineering actions and tasks) in a different manner.
o Waterfall model
Prototyping model
o The waterfall model, sometimes called the classic life cycle , suggests a systematic,
sequential approach to software development that begins with customer specification of
requirements and progresses through planning, modelling, construction, and deployment,
culminating in ongoing support of the completed software.
o A variation in the representation of the waterfall model is called the V-model.
o The V-model depicts the relationship of quality assurance actions to the actions associated
with communication, modeling, and early construction activities.
o 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.
o 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 moves down the left side.
o In reality, there is no fundamental difference between the classic life cycle and the V-model.
o The V-model provides a way of visualizing how verification and validation actions are applied
to earlier engineering work.
But it has the following disadvantages, that is the reasons why the waterfall model sometimes fails:
1. Real projects rarely follow the sequential flow that the model proposes. Although the linear model
can accommodate iteration, it does so indirectly. As a result, changes can cause confusion as the
project team proceeds.
2. It is often difficult for the customer to state all requirements explicitly. The waterfall model
requires this and has difficulty accommodating the natural uncertainty that exists at the beginning of
many projects.
3. The customer must have patience. A working version of the program(s) will not be available until
late in the project time span. A major blunder, if undetected until the working program is reviewed,
can be disastrous.
Today, software work is fast paced and subject to a never-ending stream of changes (to features,
functions, and information content).
The waterfall model is often inappropriate for such work. However, it can serve as a useful process
model in situations where requirements are fixed and work is to proceed to completion in a linear
manner.
The RAD model is a “high-speed” adaptation of the linear sequential model in which rapid
development is achieved by using component-based construction. If requirements are well
understood and project scope is constrained, the RAD process enables a development team to
create a “fully functional system” within very short time periods (e.g., 60 to 90 days).
Business modeling.
o The information flow among business functions is modeled in a way that answers the
following questions:
o What information drives the business process?
o What information is generated? Who generates it?
o Where does the information go?
o Who processes it?
Data modeling.
o The information flow defined as part of the business modeling phase is refined into a
set of data objects that are needed to support the business.
o The characteristics (called attributes) of each object are identified and the
relationships between these objects defined.
Process modeling.
o The data objects defined in the data modeling phase are transformed to achieve the
information flow necessary to implement a business function.
Application generation.
o In all cases, automated tools are used to facilitate construction of the software.
Application generation.
o The term fourth generation techniques (4GT) encompasses a broad array of software
tools that have one thing in common: each enables the software engineer to specify
some characteristic of software at a high level.
o The tool then automatically generates source code based on the developer's
specification.
o There is little debate that the higher the level at which software can be specified to a
machine, the faster a program can be built.
o The 4GT paradigm for software engineering focuses on the ability to specify
software using specialized language forms or a graphic notation that describes the
problem to be solved in terms that the customer can understand.
o Since the RAD process emphasizes reuse, many of the program components have
already been tested.
o This reduces overall testing time. However, new components must be tested and all
interfaces must be fully exercised.
o For large but scalable projects, RAD requires sufficient human resources to create
the right number of RAD teams.
o RAD requires developers and customers who are committed to the rapid-fire
activities necessary to get a system complete in a much abbreviated time frame. If
commitment is lacking from either constituency, RAD projects will fail.
o Not all types of applications are appropriate for RAD. If a system cannot be properly
modularized, building the components necessary for RAD will be problematic. If high
performance is an issue and performance is to be achieved through tuning the
interfaces to system components, the RAD approach may not work.
o RAD is not appropriate when technical risks are high. This occurs when a new
application makes heavy use of new technology or when the new software requires
a high degree of interoperability with existing computer programs.
Process Models-Evolutionary Process Models
Business and product requirements often change as development proceeds, making a straight line
path to an end product unrealistic; tight market deadlines make completion of a comprehensive
software product impossible, but a limited version must be introduced to meet competitive or
business pressure; a set of core product or system requirements is well understood, but the details
of product or system extensions have yet to be defined.
In these and similar situations, you need a process model that has been explicitly designed to
accommodate a product that grows and changes.
They are characterized in a manner that enables you to develop increasingly more complete versions
of the software.
o Many times a customer defines a set of general objectives for software, but does not identify
detailed requirements for functions and features.
o In other cases, the developer may be unsure of the efficiency of an algorithm, the
adaptability of an operating system, or the form that human-machine interaction should
take. In these, and many other situations, a prototyping paradigm may offer the best
approach.
o Although prototyping can be used as a stand-alone process model, it is more commonly used
as a technique that can be implemented within the context of any one of the other process
models.
o Regardless of the manner in which it is applied, the prototyping paradigm assists you and
other stakeholders to better understand what is to be built when requirements are fuzzy.
o The prototyping paradigm begins with communication. You meet with other stakeholders to
define the overall objectives for the software, identify whatever requirements are known,
and outline areas where further definition is mandatory.
o A prototyping iteration is planned quickly, and modelling (in the form of a “quick design”)
occurs.
o A quick design focuses on a representation of those aspects of the software that will be
visible to end users (e.g., human interface layout or output display formats).
o The quick design leads to the construction of a prototype. The prototype is deployed and
evaluated by stakeholders, who provide feedback that is used to further refine
requirements.
o Iteration occurs as the prototype is tuned to satisfy the needs of various stakeholders, while
at the same time enabling you to better understand what needs to be done.
o If a working prototype is to be built, you can make use of existing program fragments or
apply tools that enable working programs to be generated quickly.
Both stakeholders and software engineers like the prototyping paradigm.
Users get a feel for the actual system, and developers get to build something immediately.
1. Stakeholders see what appears to be a working version of the software, unaware that the
prototype is held together haphazardly, unaware that in the rush to get it working you haven't
considered overall software quality or long-term maintainability.
When informed that the product must be rebuilt so that high levels of quality can be maintained,
stakeholders cry foul and demand that “a few fixes” be applied to make the prototype a working
product. Too often, software development management relents.
2. As a software engineer, you often make implementation compromises in order to get a prototype
working quickly.
o Each pass through the planning region results in adjustments to the project plan.
o Cost and schedule are adjusted based on feedback derived from the customer after delivery.
In addition, the project manager adjusts the planned number of iterations required to
complete the software.
o Unlike other process models that end when software is delivered, the spiral model can be
adapted to apply throughout the life of the computer software. Therefore, the first circuit
around the spiral might represent a “concept development project” that starts at the core of
the spiral and continues for multiple iterations until concept development is complete.
o If the concept is to be developed into an actual product, the process proceeds outward on
the spiral and a “new product development project” commences. The new product will
evolve through a number of iterations around the spiral.
o Later, a circuit around the spiral might be used to represent a “product enhancement
project.” In essence, the spiral, when characterized in this way, remains operative until the
software is retired.
o There are times when the process is dormant, but whenever a change is initiated, the
process starts at the appropriate entry point (e.g., product enhancement).
o 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.
o 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.
o The spiral model demands a direct consideration of technical risks at all stages of the project
and, if properly applied, should reduce risks before they become problematic. But in this
model it may be difficult to convince customers (particularly in contract situations) that the
evolutionary approach is controllable.
o It demands considerable risk assessment expertise and relies on this expertise for success. If
a major risk is not uncovered and managed, problems will occur.
Component-Based Development
o Commercial off-the-shelf (COTS) software components, developed by vendors who offer
them as products, provide targeted functionality with well-defined interfaces that enable
the component to be integrated into the software that is to be built.
o The component-based development model incorporates many of the characteristics of the
spiral model. It is evolutionary in nature, demanding an iterative approach to the creation of
software.
o However, the component based development model comprises applications from pre-
packaged software components.
o Modeling and construction activities begin with the identification of candidate components.
These components can be designed as either conventional software modules or object-
oriented classes or packages of classes.
o Regardless of the technology that is used to create the components, the component-based
development model incorporates the following steps (implemented using an evolutionary
approach):
o The component-based development model leads to software reuse, and reusability provides
software engineers with a number of measurable benefits including a reduction in
development cycle time and a reduction in project cost if component reuse becomes part of
your organization’s culture.
o Formal methods enable you to specify, develop, and verify a computer-based system by
applying a rigorous, mathematical notation. A variation on this approach, called cleanroom
software engineering, is currently applied by some software development organizations.
o When formal methods are used during development, they provide a mechanism for
eliminating many of the problems that are difficult to overcome using other software
engineering paradigms.
o Ambiguity, incompleteness, and inconsistency can be discovered and corrected more easily
—not through ad-hoc review, but through the application of mathematical analysis.
o When formal methods are used during design, they serve as a basis for program verification
and therefore enable you to discover and correct errors that might otherwise go
undetected.
o Yet, there are concerns about its applicability in a business environment which include:
o • The development of formal models is currently quite time consuming and expensive.
o • Because few software developers have the necessary background to apply formal
methods, extensive training is required.
o These concerns notwithstanding, the formal methods approach has gained adherents
among software developers who must build safety-critical software (e.g., developers of
aircraft avionics and medical devices) and among developers that would suffer severe
economic hardship should software errors occur.
o user interfaces,
o collaborative work,
o distribution,
o persistency,
o memory management,
o transaction processing,
o security,
o Each aspect detail has a number of properties, relating to functional and/or non-functional
characteristics of the aspect detail. A distinct aspect-oriented process has not yet matured.
However, it is likely that such a process will adopt characteristics of both evolutionary and
concurrent process models.
o The evolutionary model is appropriate as aspects are identified and then constructed.
o The parallel nature of concurrent development is essential because aspects are engineered
independently of localized software components and yet, aspects have a direct impact on
these components. Hence, it is essential to instantiate asynchronous communication
between the software process activities applied to the engineering and construction of
aspects and components.