Beruflich Dokumente
Kultur Dokumente
principle of
software
engineering
Topic: software crisis
III YEAR
• INTRODUCTION OF CRISIS
• DEFINITION OF CRISIS
• WELL KNOWN FAILURE CASES
• TYPES OF CRISIS
• REASONS FOR SOFTWARE CRISIS
• WORKPLACE VIOLENCE
• FIGURE SHOWING SOFTWARE CRISIS
• CURRENT TRENDS IN SOFTWARE ENGINEERING
• WHAT IS CHRONIC SOFTWARE CRISIS
• SOFTWARE DEVELOPMENT
• COMPUTER SCIENCE AND THE PRODUCT
ORIENTATION
• MATURE SOFTWARE
• MANAGING SOFTWARE CRISIS
INTRODUCTION OF CRISIS
In mental health terms, a crisis refers not necessarily to a traumatic situation or event, but to a
person’s reaction to an event. One person might be deeply affected by an event, while another
individual suffers little or no ill effects. The Chinese word for crisis presents a good depiction of
the components of a crisis. The word crisis in Chinese is formed with the characters for danger
and opportunity. A crisis presents an obstacle, trauma, or threat, but it also presents an
opportunity for either growth or decline.
We often think of a crisis as a sudden unexpected disaster, such as a car accident, natural disaster,
or other cataclysmic event. However, crises can range substantially in type and severity.
Sometimes a crisis is a predictable part of the life cycle, such as the crises described in Erikson’s
Stages of Psychosocial Development. Situational crises are sudden and unexpected, such as
accidents and natural disasters. Existential crises are inner conflicts related to things such as life
purpose, direction, and spirituality.
The purpose of crisis counseling is to deal with the current status of the individual dealing with a
crisis. Chronic exposure to stress or trauma can lead to mental illness, so it is important that crisis
counselors have the skills and knowledge to help clients cope with current stressors and trauma.
Crisis counseling is not intended to provide psychotherapy, but instead to offer short-term
intervention to help clients receive assistance, support, resources, and stabilization.
DEFINITION OF CRISIS
“People are in a state of crisis when they face an obstacle to important life goals—and obstacle
that is, for a time, insurmountable by the use of customary methods of problem solving.” --
“…an upset in equilibrium at the failure of one’s traditional problem-solving approach which
results in disorganization, hopelessness, sadness, confusion, and panic.”
1. Natural disaster
2. Technological crises
3. Confrontation crises
4. Malevolence
5. Crisis of organization misdeeds
6. Crisis of skewed management value
7. Crisis of deception
8. Crisis of management misconduct
Natural crises
Natural crises, typically natural disasters considered as' acts of God,' are such environmental
phenomena as earthquakes, volcanic eruptions, tornadoes and hurricanes, floods, landslides, tidal
waves, storms, and droughts that threaten life, property, and the environment itself.
Technological crises
Technological crises are caused by human application of science and technology. Technological
accidents inevitably occur when technology becomes complex and coupled and something goes
wrong in the system as a whole (Technological breakdowns). Some technological crises occur
when human error causes disruptions (Human breakdowns). People tend to assign blame for a
technological disaster because technology is subject to human manipulation whereas they do not
hold anyone responsible for natural disaster. When an accident creates significant environmental
damage, the crisis is categorized as mega damage. Samples include software failures, industrial
accidents, and oil spills.
Confrontation crises
Confrontation crises occur when discontented individuals and/or groups fight businesses,
government, and various interest groups to win acceptance of their demands and expectations.
The common type of confrontation crises is boycotts, and other types are picketing, sit-ins,
ultimatums to those in authority, blockade or occupation of buildings, and resisting or disobeying
police.
Crises of malevolence
Crises occur when management takes actions it knows will harm or place stakeholders at risk for
harm without adequate precautions. Lerbinger specified three different types of crises of
organizational misdeeds: crises of skewed management values, crises of deception, and crises of
management misconduct.
Crises of skewed management values are caused when managers favor short-term economic gain
and neglect broader social values and stakeholders other than investors. This state of lopsided
values is rooted in the classical business creed that focuses on the interests of stockholders and
tends to view the interests of its other stakeholders such as customers, employees, and the
community.
Crises of deception
Crises of deception occur when management conceals or misrepresents information about itself
and its products in its dealing with consumers and others.
Some crises are caused not only by skewed values and deception but deliberate amorality and
illegality.
o Rolling baseline
o Failure to manage risk
o Software complexity
Rolling Baseline
Software Complexity
Rumors
False information about an organization or its products creates crises hurting the organization’s
reputation. Sample is linking the organization to radical groups or stories that their products are
contaminated.
Sudden crises
Sudden crises are circumstances that occur without warning and beyond an institution’s control.
Consequently, sudden crises are most often situations for which the institution and its leadership
are not blamed.
Smoldering crises
Smoldering crises differ from sudden crises in that they begin as minor internal issues that, due to
manager’s negligence, develop to crisis status. These are situations when leaders are blamed for
the crisis and its subsequent effect on the institution in question.
James categorizes five phases of crisis that require specific crisis leadership competencies. Each
phase contains an obstacle that a leader must overcome to improve the structure and operations of
an organization. James’s case study on crisis in the financial services sector, for example,
explores why crisis events erode public trust in leadership. James's research demonstrates how
leadership competencies of integrity, positive intent, capability, mutual respect, and transparency
impact the trust-building process.
Software is often too complex to be entirely understood by a single individual. We can try to
manage complexity by dividing the system into subsystems, but, as systems grow, the interaction
between subsystems increases non-linearly. It is notoriously difficult to establish an adequate and
stable set of requirements for a software system. Often there are hidden assumptions, there is no
analytic procedure for determining when the users have told the developers everything they need
to know, and developers and users do not have a common understanding of terms used. The
interaction between the different parts of a system makes change difficult. _ Software is
essentially thought stuff (that is, the result of a thought process) and much of what is important
about software is not manifest in the programs themselves (such as the reasons for making design
decisions). _ A requirements specification for a system contains, perhaps implicitly, an
application domain model (for example, describing the rules of air traffic). Development of
application domain theories is very difficult. All these aspects are directly related to written
communication. Managing complexity depends on an ability to document the interfaces
(parameters and functionality of the modules involved. Requirements are an important reference
for the whole process and should, therefore, be unambiguously and accessibly described for
everyone.
To keep track of changes it is important to document what exactly has been changed. Software
can be made more visible by describing non-material artifacts, such as the overall design of a
program. Domain models should, just like the requirements, be well documented. Thus, software
engineering can benefit from good techniques to describe systems (programs, subsystems, etc.).
For communication purposes, one is usually not interested in the internal details of a system. A
specification is an abstract description of a system which focuses on what it does (or should do)
rather than how it does it. The notion of “specification” is a relative one; it only indicates that it is
used as an abstract description of something.
Software crisis
Software crisis was a term used in the early days of computing science. The term was used to
describe the impact of rapid increases in computer power and the complexity of the problems
which could be tackled. In essence, it refers to the difficulty of writing correct, understandable,
and verifiable computer programs. The roots of the software crisis are complexity, expectations,
and change.
The term "software crisis" was coined by F. L. Bauer at the first NATO Software Engineering
Conference in 1968 at Garmisch , Germany. An early use of the term is in Edsger Dijkstra's
1972 ACM Turing Award Lecture:
The major cause of the software crisis is that the machines have become several orders of
magnitude more powerful! To put it quite bluntly: as long as there were no machines,
programming was no problem at all; when we had a few weak computers, programming became
a mild problem, and now we have gigantic computers, programming has become an equally
gigantic problem.
The causes of the software crisis were linked to the overall complexity of hardware and the
software development process. The crisis manifested itself in several ways:
Many of the software problems were caused by increasingly complex hardware. In his essay,
Dijkstra noted that the newer computers in his day "embodied such serious flaws that [he] felt
that with a single stroke the progress of computing science had been retarded by at least ten
years". He also believed that the influence of hardware on software was too frequently
overlooked.
Various processes and methodologies have been developed over the last few decades to "tame"
the software crisis, with varying degrees of success. However, it is widely agreed that there is no
"silver bullet" ― that is, no single approach which will prevent project overruns and failures in
all cases. In general, software projects which are large, complicated, poorly-specified, and
involve unfamiliar aspects, are still particularly vulnerable to large, unanticipated problems.
Agile
Agile software development guides software development projects that evolve rapidly
with changing expectations and competitive markets. Proponents of this method believe
that heavy, document-driven processes (like TickIT, CMM and ISO 9000) are fading in
importance. Some people believe that companies and agencies export many of the jobs
that can be guided by heavy-weight processes. Related concepts include Extreme
Programming, Scrum, and Lean software development.
Experimental
Experimental software engineering is a branch of software engineering interested in
devising experiments on software, in collecting data from the experiments, and in
devising laws and theories from this data. Proponents of this method advocate that the
nature of software is such that we can advance the knowledge on software through
experiments only.
Model-driven
Model Driven Design develops textual and graphical models as primary design artifacts.
Development tools are available that use model transformation and code generation to
generate well-organized code fragments that serve as a basis for producing complete
applications.
Is there a crisis at all? As you stroll through the aisles of neatly packaged software in your
favorite computer discount store, it wouldn’t occur to you that there’s a problem. You may be
surprised to learn that those familiar aisles of software represent only a small share of the
software market--of the $90 Billion software market, a mere 10% of software products are
"shrink wrapped" packages for personal computers. The remaining 90% of the market is
comprised of large software products developed to specific customer specifications.
By today’s definition, a "large" software system is a system that contains more than 50,000 lines
of high-level language code. It’s those large systems that bring the software crisis to light. If
you’re familiar with large software development projects, you know that the work is done in
teams consisting of project managers, requirements analysts, software engineers, documentation
experts, and programmers. With so many professionals collaborating in an organized manner on
a project, what’s the problem? Why is it that the team produces fewer than 10 lines of code per
day over the average lifetime of the project? And why are sixty errors found per every thousand
lines of code? Why is one of every three large projects scrapped before ever being completed?
And why is only 1 in 8 finished software projects considered "successful?"
• The cost of owning and maintaining software in the 1980’s was twice as expensive as
developing the software.
• During the 1990’s, the cost of ownership and maintenance increased by 30% over the
1980’s.
• In 1995, statistics showed that half of surveyed development projects were operational,
but were not considered successful.
• Three quarters of all large software products delivered to the customer are failures that are
either not used at all, or do not meet the customer’s requirements.
Software projects are notoriously behind schedule and over budget. Over the last twenty years
many different paradigms have been created in attempt to make software development more
predictable and controllable. While there is no single solution to the crisis, much has been learned
that can directly benefit today's software projects. It appears that the Software Crisis can be
boiled down to two basic sources:
Mature Software
As we have seen, most software projects do not follow a formal process. The result is a product
that is poorly designed and documented. Maintenance becomes problematic because without a
design and documentation, it’s difficult or impossible to predict what sort of effect a simple
change might have on other parts of the system.
Fortunately there is an awareness of the software crisis, and it has inspired a worldwide
movement towards process improvement. Software industry leaders are beginning to see that
following a formal software process consistently leads to better quality products, more efficient
teams and individuals, reduced costs, and better morale.
The SEI uses a Capability Maturity Model (CMM) to assess the state of an organization’s
development process. Such models are nothing new–they’ve been routinely applied to industrial
engineering disciplines. What’s new is the application to software development. The SEI
Software CMM has become a de facto standard for assessing and improving software processes.
Ratings range from Maturity Level 1, which is characterized by ad hoc development and lack of a
formal software development process, up to Maturity Level 5, at which an organization not only
has a formal process, but also continually refines and improves it. Each maturity level is further
broken down into key process areas that indicate the areas an organization should focus on to
improve its software process (e.g. requirement analysis, defect prevention, or change control).
Level 5 is very difficult to attain. In early 1995, only two projects, one at Motorola and another at
Loral (the on-board space shuttle software project), had earned Maturity Level 5. Another study
showed that only 2% of reviewed projects rated in the top two Maturity Levels, in spite of many
of those projects placing an extreme emphasis on software process improvement. Customers
contracting large projects will naturally seek organizations with high CMM ratings, and that has
prompted increasingly more organizations to investigate software process improvement.
• Multiple programmers
• Application complexity
• Maintenance
BIBLIOGRAPHY
1. Pankaj Jalote. Introduction and Software Process. An Integrated
Approach to Software Engineering, pages 1-43, 2009
3. www.google.com
4. www.wikipedia.com