Unit-I SEPM
Unit-I SEPM
AND PROJECT
MANAGEMENT
SCHEME
“The old-school view of software—you buy it, you own it, and
it’s your job to manage it—that’s coming to an end.
Today, with Web 2.0 and pervasive computing we’re see a
completely different generation of software. It’ll be delivered via
the Internet and will look exactly like it’s residing on each user’s
computing device . . . but it’ll reside on a far-away server.”
Why is it important? Software is important because it affects
nearly every aspect of our lives and has become pervasive in
our commerce, our culture, and our everyday activities.
Software engineering is important because it enables us to build
complex systems in a timely manner and with high quality
What is software?
Defining Software
Software is: (1) instructions (computer programs)
that when executed provide desired features,
function, and performance; (2) data structures
that enable the programs to effectively
manipulate information, and (3) descriptive
information in both hard copy and virtual forms
that describes the operation and use of the
programs.
Software Engineering
System software
a collection of programs written to service other programs. Some
system software (e.g., compilers, editors, and file management
utilities) processes complex, but determinate, information structures.
Other systems applications (e.g., operating system components,
drivers, networking software, telecommunications processors)
process largely indeterminate data.
the systems software area is characterized by heavy interaction with
computer hardware
Application software
stand-alone programs that solve a specific business need.
Applications in this area process business or technical data in a way
that facilitates business operations or management/technical
decision making
Engineering/scientific software
characterized by “number crunching” algorithms. Applications
range from astronomy to volcanology, from automotive stress
analysis to space shuttle orbital dynamics, and from molecular
biology to automated manufacturing. Computer-aided design,
system simulation, and other interactive applications have
begun to take on real-time and even system software
characteristics.
Embedded software
software—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. (e.g., key pad control for a microwave
Product-line software
designed to provide a specific capability for use by many
different customers. Product-line software can focus on a limited
and esoteric marketplace (e.g., inventory control products) (e.g.,
word processing, spreadsheets, computer graphics,
multimedia, database management, and personal and business
financial applications).
Web applications
called “WebApps,” this network-centric software category
spans a wide array of applications. In their simplest form,
WebApps can be little more than a set of linked hypertext files
that present information using text and limited graphics
Artificial intelligence
software
- makes use of nonnumerical algorithms to
solve complex problems that are not
amenable to computation or straightforward
analysis.
Applications within this area include robotics,
expert systems, pattern recognition and game
playing.
Legacy software
Modeling
creating models to better understand software requirements
and the design that will achieve requirements.
Construction
This activity combines code generation (either manual or
automated) and the testing that is required to uncover errors in
the code.
Deployment
The software (as a complete entity or as a partially completed
increment) is delivered to the customer who evaluates the
delivered product and provides feedback based on the evaluation
umbrella activities
David Hooker [Hoo96] has proposed seven principles that focus on software
engineering practice as a whole.
General Principles
1. The Reason It All Exists
-A software system exists for one reason: to provide value to its users . “Does this
add real value to the system?” If the answer is “no,” don’t do it.
2. Keep It Simple, Stupid(KISS)
All design should be as simple as possible, but no simpler. This facilitates having a
more easily understood and easily maintained system. The payoff is software that is
more maintainable and less error-prone.
3. Maintain the Vision
A clear vision is essential to the success of a software project Having an empowered
architect who can hold the vision and enforce compliance helps ensure a very
successful software project.
4. What You Produce, Others Will Consume
Always specify, design, and implement knowing someone else will
have to understand what you are doing
5. Be Open to the Future
system with a long lifetime has more value. systems must be
ready to adapt to these and other changes. Never design yourself
into a corner. Always ask “what if,” and prepare for all possible
answers by creating systems that solve the general problem.
6. Plan Ahead for Reuse
Reuse saves time and effort. Achieving a high level of reuse is
arguably the hardest goal to accomplish in developing a software
system. Planning ahead for reuse reduces the cost and increases
the value of both the reusable components and the systems into
which they are incorporated.
7. 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. You also gain knowledge about how
to do it right again
Software Myths - erroneous beliefs about software
and the process
A software process
framework
A GENERIC PROCESS
MODEL
Process flow
A GENERIC PROCESS
MODEL
4. Concurrent Models
called concurrent engineering, allows a
software team to represent iterative and
concurrent elements of any of the process
models.
All software engineering activities exist
concurrently but reside in different states.
Concurrent modeling defines a series of
events that will trigger transitions from state
to state for each of the software engineering
activities, actions, or tasks .
Concurrent modeling is applicable to all types
of software development and provides an
accurate picture of the current state of a
project.
SPECIALIZED PROCESS
MODELS
these models tend to be applied when a specialized or narrowly
defined software engineering approach is chosen.
Component-Based Development
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.
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.
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.
leads to software reuse, and reusability
provides software engineers with a number of
measurable benefits.
The Formal Methods Model
encompasses a set of activities that leads to formal mathematical
specification of computer software. 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
The development of formal models is currently quite time
consuming and expensive.
• Because few software developers have the necessary background
to apply formal methods, extensive training is required.
• It is difficult to use the models as a communication mechanism for
technically unsophisticated customers.
Aspect-Oriented Software Development
provides a process and methodological approach for defining,
specifying, designing, and constructing aspects—“mechanisms
beyond subroutines and inheritance for localizing the expression of
a crosscutting concern”.
Common, systemic aspects include user interfaces, collaborative
work, distribution, persistency, memory management, transaction
processing, security, integrity and so on. Components may provide
or require one or more “aspect details” relating to a particular
aspect
PERSONAL AND TEAM
PROCESS MODELS