se - UNIT 1
se - UNIT 1
Software is:
(1) instructions (computer programs) that when executed provide desired features,
function, and performance
(2) data structures that enable the programs to adequately manipulate information, and
(3)descriptive information in both hard copy and virtual forms that describes the
operation and use of the programs.
(4) Software is a logical rather than a physical system element. Therefore, software has
one fundamental characteristic that makes it considerably different from hardware.
The above Figure depicts failure rate as a function of time for hardware. The
relationship, often called the “bathtub curve,” indicates that hardware exhibits relatively
high failure rates early in its life. defects are corrected and the failure rate drops to a
steady-state level (hopefully, quite low) for some period of time. As time passes,
however, the failure rate rises again as hardware components suffer from the
cumulative effects of dust.
In theory, therefore, the failure rate curve for software should take the form of the
“idealized curve” shown in the following Figure.
Before the curve can return to the original steady-state failure rate, another change is
requested, causing the curve to spike again. Slowly, the minimum failure rate level
begins to rise—the software is deteriorating due to change.
LEGACY SOFTWARE:
Hundreds of thousands of computer programs fall into one of the seven broad
application domains discussed in the preceding subsection. 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.
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 extended to make it interoperable with other more modern
systems or databases.
WEBAPPS:
WebApps have evolved into sophisticated computing tools that not only provide
stand-alone functions to the end user, but also have been integrated with corporate
databases and business applications. WebApps “involve[d] a mixture between print
publishing and software development, between marketing and computing, between
internal communications and external relations, and between art and technology.” But
today, they provide full computing potential in many of the application categories.
MOBILE APPLICATIONS:
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.
CLOUD COMPUTING:
Process Adaptation:-
• Overall flow of activities, actions, and tasks and the interdependencies among them.
• Degree to which actions and tasks are defined within each framework activity.
• Degree to which work products are identified and required.
• Manner in which quality assurance activities are applied.
• Manner in which project tracking and control activities are applied.
• Overall degree of detail and rigor with which the process is described.
• Degree to which the customer and other stakeholders are involved with the project.
• Level of autonomy given to the software team.
• Degree to which team organization and roles are prescribed.
The Essence of Practice:-
The essence of software engineering practice:
1. Understand the problem (communication and analysis)
2. Plan a solution (modeling and software design)
3. Carry out the plan (code generation)
. 4. Examine the result for accuracy (testing and quality assurance)
General Principles:-
1.The First Principle: The Reason It All Exists:- A software system exists for one
reason: to provide value to its users. All decisions should be made with this in mind.
Before specifying a system requirement, before noting a piece of system functionality,
before determining the hardware platforms or development processes
2.The Second Principle: KISS (Keep It Simple, Stupid!):- All design should be as
simple as possible, but no simpler. This facilitates having a more easily understood and
easily maintained system. This is not to say that features, even internal features, should
be discarded in the name of simplicity
3. 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. Compromising the architectural vision of a software system
weakens and will eventually break even the well-designed systems. Having an
empowered architect who can hold the vision and enforce compliance helps ensure a
very successful software project.
4.The Fourth Principle: What You Produce, Others Will Consume:- . In some way or
another, someone else will use, maintain, document, or otherwise depend on being able
to understand your system. So, always specify, design, and implement knowing
someone else will have to understand what you are doing. The audience for any
product of software development is potentially large.
5.The Fifth Principle: Be Open to the Future:- Never design yourself into a corner.
Always ask “what if,” and prepare for all possible answers by creating systems that
solve the general problem, not just the specific one. 6 This could very possibly lead to
the reuse of an entire system.
6.The Sixth Principle: Plan Ahead for Reuse:- Reuse saves time and effort. 7
Achieving a high level of reuse is arguably the hardest goal to accomplish in developing
a software system. The reuse of code and designs has been proclaimed as a major
benefit of using object-oriented technologies. However, the return on this investment is
not automatic.
7.The Seventh Principle: Think!:- This last Principle is probably the most overlooked.
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. If you do think about something and still do it
wrong, it becomes a valuable experience. A side effect of thinking is learning to
recognize when you don’t know something, at which point you can research the answer.
When clear thought has gone into a system, value comes out
5) PROCESS PATTERN:
● A process pattern describes a process-related problem that is encountered
during software 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 [Amb98]—a consistent method for describing problem solutions within
the context of the software process. By combining patterns, a software team can
solve problems and construct a process that best meets the needs of a project.
Pattern Name. The pattern is given a meaningful name describing it within the
context of the software process (e.g. Technical Reviews).
Forces. The environment in which the pattern is encountered and the issues that
make the problem visible and may affect its solution.
Type : The pattern type is specified. Ambler suggests three types:
1. Stage pattern—
defines a problem associated with a framework activity for the process. Since a
framework activity encompasses multiple actions and work tasks, a stage pattern
incorporates multiple task patterns (see the following) that are relevant to the
stage (framework activity).
2. Task pattern—defines a problem associated with a software engineering
action or work task and relevant to successful software engineering practice (e.g.
Requirements Gathering is a task pattern).
3. Phase pattern—define the sequence of framework activities that occurs within
the process, even when the overall flow of activities is iterative in nature. An
example of a phase pattern might be Spiral Model or Prototyping.
Initial Context. Describes the conditions under which the pattern applies. Prior
to the initiation of the pattern:
(1) What organizational or team-related activities have already occurred?
(2) What is the entry state for the process?
(3) What software engineering information or project information already exists?
Problem. The specific problem to be solved by the pattern.
Solution. Describes how to implement the pattern successfully. This section
describes how the initial state of the process (that exists before the pattern is
implemented) is modified as a consequence of the initiation of the pattern. It also
describes how software engineering information or project information that is
available before the initiation of the pattern is transformed as a consequence of
the successful execution of the pattern.
Resulting Context. Describes the conditions that will result once the pattern has
been successfully implemented. Upon completion of the pattern:
(1) What organizational or team-related activities must have occurred?
(2) What is the exit state for the process?
(3) What software engineering information or project information has been
developed? 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. For example, the stage pattern Communication
encompasses the task patterns: Project Team, Collaborative Guidelines, Scope
Isolation, Requirements Gathering, Constraint Description, and Scenario
Creation.
6) PROCESS ASSESSMENT AND IMPROVEMENT:
Standard CMMI Assessment Method for Process Improvement (SCAMPI)—
provides a five-step process assessment model that incorporates five phases:
initiating, diagnosing, establishing, acting, and learning. The SCAMPI
method uses the SEI CMMI as the basis for assessment [SEI00].
CMM-Based Appraisal for Internal Process Improvement (CBA IPI)—
provides a diagnostic technique for assessing the relative maturity of a software
organization; uses the SEI CMM as the basis for the assessment [Dun01].
SPICE (ISO/IEC15504)—a standard that defines a set of requirements for
software process assessment. The intent of the standard is to assist
organizations in developing an objective evaluation of the efficacy of any defined
software process [ISO08].
ISO 9001:2000 for Software—a generic standard that applies to any
organization that wants to improve the overall quality of the products, systems, or
services that it provides. Therefore, the standard is directly applicable to software
organizations and companies [Ant06].
Chapter- 4 Process Model:
Process models were originally proposed to bring order to the chaos of software
development.
A process model provides a specific roadmap for software engineering work. It defines
the flow of all activities, actions and tasks, the degree of iteration, the work products,
and the organization of the work that must be done.
THE WATERFALL PROCESS MODEL:
There are times when the requirements for a problem are well understood—when work
flows from communication through deployment in a reasonably linear fashion. This
situation is sometimes encountered when well-defined adaptations or enhancements to
an existing system must be made (e.g., an adaptation to accounting software that has
been mandated because of changes to government regulations). It may also occur in a
limited number of new development efforts but only when requirements are well defined
and reasonably stable.
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.
INCREMENTAL PROCESS MODEL:
There are many situations in which initial software requirements are reasonably well
defined, but the overall scope of the development effort precludes a purely linear
process. In addition, there may be a compelling need to provide a limited set of software
functionality to users quickly and then refine and expand on that functionality in later
software releases. In such cases, you can choose a process model that is designed to
produce the software in increment.
EVOLUTIONARY PROCESS MODELS:
Evolutionary models are iterative. They are characterized in a manner that enables you
to develop increasingly more complete versions of the software.
Two common evolutionary process models are :
Prototyping Model
Spiral Model
Prototyping Process 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.
The Spiral Models : The spiral development model is a risk-driven process model
generator that is used to guide multi-stakeholder concurrent engineering of software
intensive systems. It has two main distinguishing features. One is a cyclic approach for
incrementally growing a system’s degree of definition and implementation while
decreasing its degree of risk. The other is a set of anchor point milestones for ensuring
stakeholder commitment to feasible and mutually satisfactory system solutions. A spiral
model is divided into a set of framework activities defined by the software engineering
team. For illustrative purposes, we use the generic framework activities discussed
earlier.
CONCURRENT MODEL:
The concurrent development model, sometimes called concurrent engineering, allows a
software team to represent iterative and concurrent elements of any of the process
models described in this chapter. For example, the modeling activity defined for the
spiral model is accomplished by invoking one or more of the following software
engineering actions: prototyping, analysis and design.
What is Agile?
Agile is an iterative approach to project management and software development that
helps teams deliver value to their customers faster and with fewer headaches. Instead
of betting everything on a "big bang" launch, an agile team delivers work in small, but
consumable, increments.
What is “Agility”?
● Agility can be applied to any software process.
● Effective (rapid and adaptive) response to change (team members, new
technology, requirements).
● Effective communication in structure and attitudes among all team members,
technological and business people, software engineers and managers.
● Drawing the customer onto the team.
● Organizing a team so that it is in control of the work performed.
Yielding…
● Rapid, incremental delivery of software.
Agile Principles
● The highest priority of this process is to satisfy the customer.
● Acceptance of changing requirements even late in development.
● Frequently deliver working software in a small time span.
● Throughout the project business people and developers work together on a daily
basis.
● Projects are created around motivated people if they are given the proper
environment and support.
● Face to face interaction is the most efficient method of moving information in the
development team.
● Primary measure of progress is working software.
● The Agile process helps in sustainable development.
● Continuous attention to technical excellence and good design increases agility.
● From self organizing teams the best architecture, design and requirements
emerged.
● Simplicity is necessary in development.
The XP Process
The XP process comprises four framework activities:
1. Planning
● Planning starts with the requirements gathering which enables the XP team to
understand the rules for the software.
● The customer and developer work together for the final requirements.
2. Design
● The XP design follows the 'keep it simple' principle.
● A simple design always prefers the more difficult representation.
3. Coding
● The coding is started after the initial design work is over.
● After the initial design work is done, the team creates a set of unit tests which
can test each situation that should be a part of the release.
● The developer is focused on what must be implemented to pass the test.
● Two people are assigned to create the code. It is an important concept in
coding activity.
4. Testing
● Validation testing of the system occurs on a daily basis. It gives the XP team a
regular indication of the progress.
● 'XP acceptance tests' are known as the customer test.
XP values
1. Communication
● Building a software development process needs communication between the
developer and the customer.
● Communication is important for requirement gathering and discussing the
concept.
2) Simplicity
The simple design is easy to implement in code.
3.Feedback
Feedback guides the development process in the right direction.
4.Courage
In every development process there will always be a pressure situation. The courage or
the discipline to deal with it surely makes the task easy.
5.Respect
The Agile process should inculcate the habit to respect all team members, other
stakeholders and customers.
Agile Modeling
Agile Modeling (AM) is a practice-based methodology for effective modeling and
documentation of software-based systems. Simply put, Agile Modeling (AM) is a
collection of values, principles, and practices for modeling software that can be applied
on a software development project in an effective and light-weight manner. Agile
models are more effective than traditional models because they are just barely good,
they don’t have to be perfect.
Agile modeling adopts all of the values that are consistent with the agile manifesto. The
agile modeling philosophy recognizes that an agile team must have the courage to
make decisions that may cause it to reject a design and refactor. The team must also
have the humility to recognize that technologists do not have all the answers and that
business experts and other stakeholders should be respected and embraced.
A “team” in the Agile sense is a small group of people, assigned to the same project
or effort, nearly all of them on a full-time basis. A small minority of team members
may be part-time contributors, or may have competing responsibilities.
The XP teams:
Software engineers make use of a variety of social media tools to coordinate with one
another, to communicate with and learn from users, to become informed about new
technologies and to create informal documentation.
Global teams: