Se - Module 1
Se - Module 1
MODULE 1
Chapter 1: Software and Software Engineering
Software and Software Engineering: The Nature of Software, The Unique Nature of WebApps,
Software Engineering, The Software Process, Software Engineering Practice, Software
Myths,How it all starts
Engineering on the other hand,is all about developing products, using well-defined,
scientific principles and methods.
Definitions
Defining Software
Software is defined as
1. Instructions:Programs that when executed provide desired function,
features, and performance
1. System software:
Inorder to build software that is ready to meet the challenges of the twenty-first
century, you must recognize a few simple realities
Problem should be understood before software solution is developed
These simple realities lead to one conclusion.Software in all of its forms and
across all of its application domains should be engineered.
The foundation for software engineering is the process layer. The software
engineering process is the glue that holds the technology layers together and enables
rational and timely development of computer software. Process defines a framework that
must be established for effective delivery of software engineering technology.
An action encompasses a set of tasks that produce a major work product (e.g.,
an architectural design model).
task focuses on a small, but well-defined objective (e.g., conducting a unit test)
that produces a tangible outcome.
A process framework establishes the foundation for a complete software
engineering process by identifying a small number of framework activities that are
applicable to all software projects, regardless of their size or complexity. In addition,
the process framework encompassesa set of umbrella activities that are applicable
across the entire software process.
A generic process framework for software engineering encompasses five activities:
Software General Principles The dictionary defines the word principle as “an important
underlying law or assumption required in a system of thought.” David Hooker has
proposed seven principles that focus on software engineering practice.
The First Principle: The Reason It All Exists A software system exists for one reason:
to provide value to its users.
The Second Principle: KISS (Keep It Simple, Stupid!) Software design is not a
haphazard process. There are many factors to consider in any design effort. All design
should be as simple as possible, but no simpler.
The Third Principle: Maintain the Vision A clear vision is essential to the success of a
software project. Without one, a project almost unfailingly ends up being “of two [or
more] minds” about itself.
Always specify, design, and implement knowing someone else will have to understand
what you are doing.
The Sixth Principle: Plan Ahead for Reuse Reuse saves time and effort. Planning ahead
for reuse reduces the cost and increases the value of both the reusable components and the
systems into which they are incorporated.
The Seventh Principle: Think! Placing clear, complete thought before action almost
always produces better results. When you think about something, you are more likely to
do it right.
Software Myths
Software Myths-beliefs about software and the process used to build it –can be traced
to the earliest days of computing. Myths have a number of attributes that have made
them insidious. For instance, myths appear to be reasonable statements of fact, they
have an intuitive feel, and they are often promulgated by experienced practitioners
who “know the score”
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.
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 :
Myth: If we get behind schedule, we can add more programmers and catch up.
Myth:If we decide to out source the software project to a third party, I can just
relax and let that firm build it.
Reality:If an organization does not underst and how to manage and control
software project internally, it will invariably struggle when it out sources
software project.
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 led to false expectations and ultimately, dissatisfaction with the
developers.
Myth :A general statement of objectives is sufficient to begin writing programs-we can fill
in details later.
Practitioner's myths.
Myths that are still believed by software practitioners have been fostered by 50 years
of programming culture. During the early days of software, programming was viewed
as an art form. Old ways and attitudes die hard.
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 Iget 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 formal 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.Documentation provides 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
quality. Better quality leads to reduced rework. And reduced rework results in faster
delivery times. Many software professionals recognize the fallacy of the myths just
described. Regrettably, habitual attitudes and methods foster poor management and
technical practices,even when reality dictates a better approach. Recognition of
A generic process framework for software engineering A linear process flow executes
each of the five framework activities in sequence, beginning with communication and
culminating with deployment.
An iterative process flow repeats one or more of the activities before proceeding to the
next. An evolutionary process flow executes the activities in a “circular” manner. Each
circuit through the five activities leads to a more complete version of the software. A
parallel process flow executes one or more activities in parallel with other activities
(e.g., modeling for one aspect of the software might be executed in parallel with
construction of another aspect of the software).
A software team would need significantly more information before it could properly
execute any one of these activities as part of the software process. Therefore, you are
faced with a key question: What actions are appropriate for a framework activity, given
the nature of the problem to be solved, the characteristics of the people doing the work,
and the stakeholders who are sponsoring the project?
Identifying a TaskSet
Different projects demand different task sets. The software team chooses the
task set based on problem and project characteristics. A task set defines the actual work
to be done to accomplish the objectives of a software engineering action.
ProcessPatterns
A process pattern describes a process-related problem that is encountered
duringsoftware engineering work, identifies the environment in which the problem has
been encountered, and suggests one or more proven solutions to the problem. Stated in
more general terms, a process pattern provides you with a template —a consistent
method for describing problem solutions within the context of the software
process.
Patterns can be defined at any level of abstraction. a pattern might be used to
describe a problem (and solution) associated with a complete process model (e.g.,
prototyping). In other situations, patterns can be used to describe a problem (and
Pattern Name. The pattern is given a meaningful name describing it within the context
of the software process (e.g., TechnicalReviews).
Forces. The environment in which the pattern is encountered and the issues that make
the problem visible and may affect its solution.
Related Patterns. Provide a list of all process patterns that are directly related to this one.
This may be represented as a hierarchy or in some other diagrammatic form.
Known Uses and Examples. Indicate the specific instances in which the pattern is
applicable.
Process
Models
Prescriptive Specialized
Models Process Models
Component-
Waterfall Incremental Evolutionary
Based
Models Process Models Process Models
Development
The Formal
Proto typing
Methods Model
Aspect-Oriented
Spiral model Software
Development
Concurrent
development
model
TheWaterfall Model
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, modeling,
construction, and deployment.
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 that validate each of the
models created as the team moved down the left side. The V-model provides a way of
visualizing how verification and validation actions are applied to earlier engineering
work.
The waterfall model is the oldest paradigm for software engineering. The
problems that are sometimes encountered when the waterfall model is applied are:
1. Real projects rarely follow these quential 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.Thewaterfall 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)
IncrementalProcessModels
The incremental model delivers a series of releases, called increments, that
provide progressively more functionality for the customer as each increment is
delivered.
The incremental model combines elements of linear and parallel process flows
.The incremental model applies linear sequences in a staggered fashion as calendar time
progresses. Each linear sequence produces deliverable “increments” of the software in a
manner that is similar to the increments produced by an evolutionary process flow.
For example, word-processing software developed using the incremental
paradigm might deliver basic file management, editing, and document production
functions in the first increment; more sophisticated editing and document production
capabilities in the second increment; spelling and grammar checking in the third
increment; and advanced page layout capability inthe fourth increment.
When an incremental model is used, the first increment is often a core product. That is,
basic requirements are addressed but many supplementary features remain undelivered.
The core product is used by the customer. As a result of use and/or evaluation, a plan is
developed for the next increment. The plan addresses the modification of the core
product to better meet the needs of the customer and the deliveryof additional features
and functionality. This process is repeated following the delivery of each increment,
until the complete product is produced.
EvolutionaryProcessModels
Evolutionary models are iterative.They are characterized in a manner that
enables you to develop increasingly more complete versions of the software with each
iteration. There are two common evolutionary process models.
Prototyping Model : Often, a customer defines a set of general objectives for
software, but does not identify detailed requirements for functions and features. 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.
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 process models. 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
Fig:prototyping paradigm
Fig:TheSpiral Model
Fig:Concurrentdevelopmentmodel
Component-Based Development
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. However, the component-based development
model constructs applications from prepackaged software components.
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. Regardless of the
technologythat is used to create the components, the component-based development
model incorporates the following steps
1. Available component-based products are researched and evaluated for the application
domain in question.
2. Component integration issues are considered.
3. A software architecture is designed to accommodate the components.
4. Components are integrated into the architecture.
5. Comprehensive testing is conducted to ensure proper functionality.
When formal methods are used during development, they provide a mechanism
for eliminatingmanyofthe problems that aredifficult to overcome using othersoftware
engineering paradigms. Ambiguity, incompleteness, and inconsistency can be
discovered and corrected more easily, but through the application of mathematical
analysis.
DrawBacks: