Introduction to SOFTWARE ENGINEERING

advertisement
INTRODUCTION TO SOFTWARE ENGINEERING
Have you ever noticed how the invention of one technology can have profound and
unexpected effects on other seemingly unrelated technologies, on commercial enterprises, on
people and even on culture as a whole? This phenomenon often called:“THE LAW OF UNINTENDED CONSEQUENCES”.
Today, computer software is the single most important technology on the world stage, and
software is also a prime example of the “Law of Unintended Consequences”.
No one could have foreseen that over the past 50 years, software become embedded in system
of all kinds. i.e. Banking, Medical, Transportation, Entertainment and so on. And if we
believe in the Law of Unintended Consequences, there are many more effects that we can not
yet predict!
As software’s importance has grown, the software community has continually attempted to
develop technologies that will make it easier, faster and less expensive to build and maintain
high quality computer programs.
Some of the Software technologies are targeted at a Specific Application Domain (e.g. Web
site design and implementation). Others focus on a Technology Domain (e.g. O.O System
and programming) and still these are Broad-based software Applications domain (e.g.
Operating Systems such as Linux),
However we have yet to develop a Software technology that targeted to all the likelihood of
one arising in the future is small.
WHAT IS COMPUTER SOFTWARE?
Computer Software is the product that Software professionals (Software Engineers) build and
then support over the long term. It encompasses programs that execute within a computer of
any size and architecture, content that is presented as the computer program executes and
documents in both hardcopy and virtual forms that encompasses all forms of electronic media.
The intent of SOFTWARE ENGINEERING is to provide a framework for building ‘’Higher
Quality Software.”
WHY IS SOFTWARE IMPORTANT?
Software affects nearly every aspect of our lives and has become pervasive in our commerce,
our culture and our everyday activities.
THE EVOLVING ROLE OF SOFTWARE:
The role of computer software has undergone significant change over a span of little more
than 50 years. Dramatic improvements in Hardware performance profound change in
Computing architectures, vast increases in Memory and Storage capacity and a wide variety
of exotic input and output options have all precipitated more sophisticated and complex
computer based system.
Today, a huge software industry has become a dominant factor in the economies of the
industrialized world.
1
The “LONE PROGRAMMER” of the earlier Software era has been replaced by teams of
Software Specialists, each focusing on one part of the technology required to deliver a
complex application. And yet the questions that were asked at the “Lone programmer” era
are the same questions that are asked when modern Computer-based Systems are built:





Why does it take so long to get software finished?
Why are development costs so high?
Why can’t we find all errors before we give the software to our customers?
Why do we spend so much time and effort maintaining existing programs?
Why do we still have difficulties in measuring progress as software is being developed
and maintained?
These questions and many others demonstrate the Software industry’s concern and the
manner in which it is developed, a concern that has lead to the adoption of Software
Engineering practice.
To gain and understanding software, it is important to examine the Characteristics of
Software that makes it different from other things than human beings build.
Considering that software is a Logical rather than Physical system element, the Software
has characteristics that are considerable different than those of hardware.
SOFTWARE CHARACTERISTICS:
1) Software is Developed or Engineered. It is not manufactured in the classical
sense. Although some similarities exist between software development and
hardware manufacturing, yet the two activities are fundamentally different.
2) Software does not wear out but deteriorates due to changes.

Software is not susceptible to the environment maladies that cause
hardware to wear out. Software undergoes changes during its life. As
changes are made, it is likely that errors will be introduced; causing the
failure and thus increased failure rate indicates the decoration of software
as a result of change.

Another aspect of Software and Hardware differences caused by wear-out
is that:When a Hardware component wears out, It is replaced by a spare part.
There are no software spare parts. Every Software failure indicates an
error in design, or in program coding, therefore, Software
maintenance involves considerably more complexity than Hardware
maintenance.
3) Most Software continues to be Custom built.
Although the industry is moving towards Component-based construction, most
software continues to be custom built.
In hardware industry the components parts are designed to be reusable and can be
ordered off the shelf. These are called Standard Design Components. Component
use is a natural part of the Hardware engineering process.
2
However in the Software world, it has only begun to be achieved on a broad scale..
A Software component should be designed and implemented so that it can be
“Reused” in many different programs. ”Reusable Objects”
or ‘’Reusable Software Components’’ enable the Software Engineers to create
new applications from reusable parts.
THE CHANGING NATURE OF SOFTWARE
Seven categories of Computer Software present continuing challenges for Software Engineers.
Each of these challenges will undoubtedly obey the ‘’Law of Unintended Consequences’’
and have effects that can not be predicted today.
However Software Engineers can prepare a process that is agile and adoptable enough to
accommodate dramatic changes in Technology and Business rules that are sure to come in the
next decade.
SEVEN BROAD SOFTWARE CATAGORIES
1)
2)
3)
4)
5)
6)
7)
System Software
Application Software
Engineering/Scientific Software
Embedded Software
Product-line Software
Web Application (WebApps)
Artificial Intelligence Software (AI Software)
SYSTEM SOFTWARE:
System Software is a collection of Programs written to service other Programs.( e.g
Compilers, Editors, File management utilities, etc) These software are process complex but
determinate information structure.
Other system software, like Operating Systems, Drivers, Networking software,
Telecommunications processors, process largely intermediate data.
Caharacteristics of System Software
System Software area is characterized by heavy interaction with Computer hardware, heavy
usage by multiple users, concurrent operation that regain scheduling, resource sharing and
sophisticated process management, complex data structure and multiple external interface.
APPLICATION SOFTWARE
Application software consists of standalone programs that solve specific business need.
Application software processes business data in a way to facilitate business operation or
Management decision making. (Hotel Management System, Decision Support Systems etc)
3
ENGINEERING / SCIENTIFIC SOFTWARE
Formerly, characterized by “Number crunching” algorithms. Engineering and Scientific
Applications range from Astronomy to Volcanology, from Automotive stress analysis to
Space shuttle orbital dynamics and from Molecular Biology to Automated manufacturing.
EMBEDDED SOFTWARE
Embedded software resides within a product or system and is used to implement and control
features and functions for the end-uses and for the system itself.(e.g: Keypad control for a
microwave oven, digital function in an Automobile such as fuel control, Anti-braking system
(ABS) etc.
PRODUCT-LINE SOFTWARE (SOFTWARE PACKAGE PROGRAMS)
Designed to provide a specific capability for use by many different customers. It can focus on
a limited and esoteric marketplace.(e.g: Inventory control products, Database Management
System, Personal and Business Functional Applications, Word processing, Computer graphics
etc)
WEB APPLICATIONS (WEB APPS)
WebApps in their simplest form can be little more than a set of linked hypertext files that
present information using text and limited graphics. However as e-commerce and B2B
(business to business) applications grow in importance, webApps are evolving into
sophisticated computing environment. WebApps not only provide standalone features,
computing functions and content to end-users, but also are integrated with Corporate
databases and Business applications.
ARTIFICIAL INTELLIGENCE SOFTWARE (AI SOFTWARE)
(AI) software makes use of “NON NUMERICAL ALGORITHMS” to solve complex
problems that are not amenable to computation or straight forward analysis. (e.g Robotics,
Expert systems, Pattern recognition, Image or Voice recognition) , Artificial Neural networks,
Theorem proving and Game playing.)
Millions of Software Engineers worldwide are hard at work on Project in one or more of the
above mentioned 7 software categories.
In some cases new Computer System are being built, but in others, Existing Software
Application are being corrected, adapted and enhanced. It is common for a young Software
Engineer to work on a program that is older than he/she is!
Past generation of Software Engineers have left behind a “Legacy” in each of the Seven
Software categories. Hopefully the Legacy left behind by the Present (Current t) Software
Engineers will ease the burden of Future Software Engineers.
4
THE NEW SOFTWARE CHALLENGES ON THE HORIZON
The following new Software challenges have appeared on the horizon:




Ubiquitous computing
Net sourcing
Open source
The New Economy (Dot.com)
UBIQUITOUS COMPUTING
The rapid growth of ‘’Wireless Networking’’ may soon lead to true Distributed Computing.
The challenge to current Software Engineers is to develop System and Applications software
that will allow “Small Device”, Personal Computers and Enterprise System to communicate
across vast networks.
NET SOURCING
(WWW) is rapidly becoming a Computing Engine as well as a Content Provider. The
challenge for current Software Engineers is to architect simple and sophisticated application
that provide benefit to targeted end-user markets world wide (e.g. personal financial planning
applications)
OPEN SOURCE
A growing trend that results in “Distribution of Source Code) for Software applications
(e.g. Operating systems, Database and Development environments) so that customers can
make Local modification. The challenges for current generation Software Engineers is to
build Source code that is “Self- descriptive”, but more importantly, to develop techniques that
will enable both customers and developers to know what changes have been made and how
those changes manifest themselves within the software.
THE NEW ECONOMY (DOT COM)
The DOT COM) gripped Financial markets during late 1990’s and the bust that followed have
lead many Business people to believe that the New Economy is dead. The New Economy is
alive and well but it will evolve slowly. The New Economy will be characterized by mass
Communication and Distribution.
The challenge for current Software Engineers is to built Application and Mass Product
Distribution using concepts that are only forming now.
LEGACY SOFTWARE
Hundreds of thousands of Computer Programs fall into one of the Seven broad Application
categories as mentioned above. Some of these Programs are State-of-the-art Software; but
other programs are older programs often referred to as Legacy Software.
Legacy Software have been developed decades ago and continually modified to meet
changes in business requirements and computing platforms. The proliferation of such system
is causing headaches for large organizations who find them costly to maintain and risky to
5
evolve. Still many Legacy Systems remain supportive to core business functions and are
indispensable to the business.
Hence, Legacy Software is characterized by ‘’Longevity and Business critically’’.
Unfortunately, there is one additional characteristic that can be present in Legacy software;
that is “Poor quality”. Legacy software system in many cases have inextensible design,
code, poor or nonexistent document, test cases and results that were never archived, a poorly
managed change history and so on,,,,. Yet these systems are expected to support “Core
business functions and are indispensable to the business.
What can be done about Legacy Systems?
The reasonable answer may be to do nothing as long as it meets the needs of its users
and run reliable; it is not broken and does not need to be fixed.
However, as time passes Legacy System often evolve for one or more of the following
reasons and needs to undergo some significant changes.




The software must be adapted to meet the needs of new computing environments or
technology.
The software must be enhanced to implement new business requirement.
The software must be extended to make it inter operational with more modern system
and database.
The software must be re-architectured to make it viable within a network environment.
When these models of evolution occur, a Legacy System must be Reengineered.
SOFTWARE EVOLUTION
Regardless of its Application domain, Size or Complexity, Compute Software will evolve
over time.
Change (often referred to as Software Maintenance) drives this process and occurs
when:-
Errors are corrected.
Software is adopted to a new environment,
Customer requests new feature on functions
Application is reengineered to provide benefit in a modern context.
6
SOFTWARE MYTHS
Software Myths are 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 (sometimes containing an element of
truth);
- Have an intuitive feel and are often promulgated by experienced Software Professional
who “know the score”.
Today most knowledgeable Software Engineering Professionals recognize Myths for
being “Misleading attitudes’’ that have caused serious problems for both managers and
technical people alike.
Nevertheless, old attitudes and habits are difficult to modify and remounts of software myths
are still believed.
MANAGEMENTS MYTHS
Managers with software responsibilities are often under pressures to maintain budgets, keep
project schedules from slipping and improve quality.
Like a drawing person who grasps at a straw, a Software Manager often grasps at belief in a
Software myth, even if that belief will lesson the pressure even temporarily.
Management Myths Examples:Myth:If we get behind the Project schedules, we can catch up by adding more programmers to the
Project team.
Reality:
This is called the “Mongolian Horde Concept”. Software development is not a mechanistic
process like manufacturing. Addition of Programmers to a late Software Project makes it later!
At first this statement seems counterintuitive. However, as new people are added, people who
were working must spend time to educate the new comers, there by reducing the amount of
time spend on productive development effort. .
People can be added to a Project 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 be invariable struggle when it outsource Software Project.
7
CUSTOMER MYTHS
A Customer who requests Computer Software may be a person within one of the department
within the company (i.e Marketing department, Sales department etc) or from an outside
company, requesting the software under a contract. In many cases Customer believes myths
about Software become Software Managers and Software Professionals do little to correct
misinformation.
Myths lead to false expectations (by the Customer) and ultimately cause Customer
dissatisfaction with Software Developers.
Customer Myths Examples:
Myth:
Project 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 Requirement changes are requested early (before Design or
Coding has been started) cost impact is relatively small. However as time passes, cost impact
grows rapidly – resources have been committed, as Design framework has been established,
and change can cause upheaval that requires additional resources and major Design
modifications.
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.
SOFTWARE PROFESSIONALS MYTHS
Myths are still believed by Software Practitioners have been fostered by over 50 years of
programming culture. During the early days of Software, programming was viewed as an art
form.
Many Software Professionals recognize the fallacy of Software Myths. Regrettable, habitual
attitudes and methods foster poor management and poor technical practices, even when reality
dictates a better approach.. Recognition of software realities is the first step toward
formulation of practical solutions for Software Engineering.
8
Software Practitioner’s Myth Examples:
Myth:
Once we write the program and get it to work, our job is done!
Reality
Someone once said that sooner you begin to writing Program codes, the longer it will
take you to get finish it!
Industry data indicates that between 60 – 80 % of all effort expended on Software will be
expended after it is ‘’Delivered’’ to the customer for the first time.
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 importantly,
guidance for Software Support.
--------------------------------------------------------------------------------------------.
9
Download