Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Published by:
Global Media
1819, Bhagirath Palace,
Chandni Chowk, Delhi-110 006
Email: globalmedia@dkpd.com
Table of Contents
1. Introduction
The new Airbus A380 uses a substantial amount of software to create a "paperless"
cockpit. Software engineering successfully maps and plans the millions of lines of code
comprising the plane's software
The term software engineering first appeared in the 1968 NATO Software Engineering
Conference and was meant to provoke thought regarding the current "software crisis" at
the time. Since then, it has continued as a profession and field of study dedicated to
creating software that is of higher quality, more affordable, maintainable, and quicker to
build. Since the field is still relatively young compared to its sister fields of engineering,
there is still much debate around what software engineering actually is, and if it conforms
to the classical definition of engineering. It has grown organically out of the limitations
of viewing software as just programming. "Software development" is a much used term
in industry which is more generic and does not necessarily subsume the engineering
paradigm. Although it is questionable what impact it has had on actual software
development over the last more than 40 years, the field's future looks bright according to
Money Magazine and Salary.com who rated "software engineering" as the best job in
America in 2006.
Chapter-1
History of software engineering
& software Engineering as a Profession
History of software engineering
History of computing
Artificial intelligence
Computer science
Operating systems
Programming languages
Software engineering
Internet
Personal computers
Laptops
Video games
Timeline of computing
In the history of software engineering the software engineering has evolved steadily
from its founding days in the 1940s until today in the 2000s. Applications have evolved
continuously. The ongoing goal to improve technologies and practices, seeks to improve
the productivity of practitioners and the quality of applications to users.
Overview
There are a number of areas where the evolution of software engineering is notable:
The field was so new that the idea of management by schedule was non-existent. Making
predictions of a project's completion date was almost impossible. Computer hardware
was application-specific. Scientific and business tasks needed different machines. Due to
the need to frequently translate old software to meet the needs of new machines, high-
order languages like FORTRAN, COBOL, and ALGOL were developed. Hardware
vendors gave away systems software for free as hardware could not be sold without
software. A few companies sold the service of building custom software but no software
companies were selling packaged software.
The notion of reuse flourished. As software was free, user organizations commonly gave
it away. Groups like IBM's scientific user group SHARE offered catalogs of reusable
components. Academia did not yet teach the principles of computer science. Modular
programming and data abstraction were already being used in programming.
Cost and Budget Overruns: The OS/360 operating system was a classic example.
This decade-long project from the 1960s eventually produced one of the most
complex software systems at the time. OS/360 was one of the first large (1000
programmers) software projects. Fred Brooks claims in The Mythical Man Month
that he made a multi-million dollar mistake of not developing a coherent
architecture before starting development.
Property Damage: Software defects can cause property damage. Poor software
security allows hackers to steal identities, costing time, money, and reputations.
Life and Death: Software defects can kill. Some embedded systems used in
radiotherapy machines failed so catastrophically that they administered lethal
doses of radiation to patients. The most famous of these failures is the Therac 25
incident.
Peter G. Neumann has kept a contemporary list of software problems and disasters. The
software crisis has been slowly fizzling out, because it is unrealistic to remain in crisis
mode for more than 20 years. SEs are accepting that the problems of SE are truly difficult
and only hard work over many decades can solve them.
In 1986, Fred Brooks published the No Silver Bullet article, arguing that no individual
technology or practice would ever make a 10-fold improvement in productivity within 10
years.
Debate about silver bullets raged over the following decade. Advocates for Ada,
components, and processes continued arguing for years that their favorite technology
would be a silver bullet. Skeptics disagreed. Eventually, almost everyone accepted that
no silver bullet would ever be found. Yet, claims about silver bullets pop up now and
again, even today.
Some interpret no silver bullet to mean that software engineering failed. The search for a
single key to success never worked. All known technologies and practices have only
made incremental improvements to productivity and quality. Yet, there are no silver
bullets for any other profession, either. Others interpret no silver bullet as proof that
software engineering has finally matured and recognized that projects succeed due to
hard work.
However, it could also be said that there are, in fact, a range of silver bullets today,
including lightweight methodologies (see "Project management"), spreadsheet
calculators, customized browsers, in-site search engines, database report generators,
integrated design-test coding-editors with memory/differences/undo, and specialty shops
that generate niche software, such as information websites, at a fraction of the cost of
totally customized website development. Nevertheless, the field of software engineering
appears too complex and diverse for a single "silver bullet" to improve most issues, and
each issue accounts for only a small portion of all software problems.
The growth of browser usage, running on the HTML language, changed the way in which
information-display and retrieval was organized. The widespread network connections
led to the growth and prevention of international computer viruses on MS Windows
computers, and the vast proliferation of spam e-mail became a major design issue in e-
mail systems, flooding communication channels and requiring semi-automated pre-
screening. Keyword-search systems evolved into web-based search engines, and many
software systems had to be re-designed, for international searching, depending on Search
Engine Optimization (SEO) techniques. Human natural-language translation systems
were needed to attempt to translate the information flow in multiple foreign languages,
with many software systems being designed for multi-language usage, based on design
concepts from human translators. Typical computer-user bases went from hundreds, or
thousands of users, to, often, many-millions of international users.
Aspects
Aspects help software engineers deal with quality attributes by providing tools to
add or remove boilerplate code from many areas in the source code. Aspects
describe how all objects or functions should behave in particular circumstances.
For example, aspects can add debugging, logging, or locking control into all
objects of particular types. Researchers are currently working to understand how
to use aspects to design general-purpose code. Related concepts include
generative programming and templates.
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.
Software Product Lines
Software Product Lines is a systematic way to produce families of software
systems, instead of creating a succession of completely individual products. This
method emphasizes extensive, systematic, formal code reuse, to try to
industrialize the software development process.
The Future of Software Engineering conference (FOSE), held at ICSE 2000, documented
the state of the art of SE in 2000 and listed many problems to be solved over the next
decade. The FOSE tracks at the ICSE 2000 and the ICSE 2007 conferences also help
identify the state of the art in software engineering.
The profession is trying to define its boundary and content. The Software Engineering
Body of Knowledge SWEBOK has been tabled as an ISO standard during 2006 (ISO/IEC
TR 19759).
In 2006, Money Magazine and Salary.com rated software engineering as the best job in
America in terms of growth, pay, stress levels, flexibility in hours and working
environment, creativity, and how easy it is to enter and advance in the field.
Profession
Software engineer
A software engineer is a person who applies the principles of software engineering to
the design, development, testing, and evaluation of the software and systems that make
computers or anything containing software, such as chips, work.
Overview
Prior to the mid-1990s, most software practitioners called themselves programmers or
developers, regardless of their actual jobs. Many people prefer to call themselves
software developer and programmer, because most widely agree what these terms mean,
while software engineer is still being debated.
The term programmer has often been used as a pejorative term to refer to those without
the tools, skills, education, or ethics to write good quality software. In response, many
practitioners called themselves software engineers to escape the stigma attached to the
word programmer. In many companies, the titles programmer and software developer
were changed to software engineer, for many categories of programmers.
These terms cause confusion, because some denied any differences (arguing that
everyone does essentially the same thing with software) while others use the terms to
create a difference (because the terms mean completely different jobs).
Regulatory classification
The U.K. has seen the alignment of the Information Technology Professional and the
Engineering Professionals.
Software engineering in Canada has seen some contests in the courts over the use of the
title "Software Engineer" The Canadian Council of Professional Engineers (C.C.P.E. or
"Engineers Canada") will not grant a "Professional Engineer" status/license to anyone
who has not completed a recognized academic engineering program. Engineers qualified
outside Canada are similarly unable to obtain a "Professional Engineer" license. Since
2001, the Canadian Engineering Accreditation Board has accredited several university
programs in software engineering, allowing graduates to apply for a professional
engineering licence once the other prerequisites are obtained, although this does nothing
to help IT professionals using the title with degrees in other fields (such as computer
science).
Some of the United States of America regulate the use of terms such as "computer
engineer" and even "software engineer". These states include at least Texas and Florida.
Texas even goes so far as to ban anyone from writing any real-time code without an
engineering license.
Education
About half of all practitioners today have computer science degrees. A small, but
growing, number of practitioners have software engineering degrees. In 1987 Imperial
College London introduced the first three year software engineering Bachelor's degree in
the UK and the world, in the following year the University of Sheffield established a
similar programme. In 1996, Rochester Institute of Technology established the first
software engineering Bachelor's degree program in the United States, however, it did not
obtain ABET until 2003, the same time as Clarkson University, Milwaukee School of
Engineering and Mississippi State University.
Since then, software engineering undergraduate degrees have been established at many
universities. A standard international curriculum for undergraduate software engineering
degrees was recently defined by the CCSE. As of 2004, in the U.S., about 50 universities
offer software engineering degrees, which teach both computer science and engineering
principles and practices. The first software engineering Master's degree was established at
Seattle University in 1979. Since then graduate software engineering degrees have been
made available from many more universities. Likewise in Canada, the Canadian
Engineering Accreditation Board (CEAB) of the Canadian Council of Professional
Engineers has recognized several software engineering programs.
In 1998, the US Naval Postgraduate School (NPS) established the first doctorate program
in Software Engineering in the world. Additionally, many online advanced degrees in
Software Engineering have appeared such as the Master of Science in Software
Engineering (MSE) degree offered through the Computer Science and Engineering
Department at California State University, Fullerton. Steve McConnell opines that
because most universities teach computer science rather than software engineering, there
is a shortage of true software engineers. ETS University and UQAM were mandated by
IEEE to develop the SoftWare Engineering BOdy of Knowledge SWEBOK, which has
become an ISO standard describing the body of knowledge covered by a software
engineer.
Other degrees
Profession
Employment
There is considerable debate over the future employment prospects for Software
Engineers and other IT Professionals. For example, an online futures market called the
Future of IT Jobs in America attempts to answer whether there will be more IT jobs,
including software engineers, in 2012 than there were in 2002.
Certification
Most successful certification programs in the software industry are oriented toward
specific technologies, and are managed by the vendors of these technologies. These
certification programs are tailored to the institutions that would employ people who use
these technologies.
The ACM had a professional certification program in the early 1980s, which was
discontinued due to lack of interest. . As of 2006, the IEEE had certified over 575
software professionals. In Canada the Canadian Information Processing Society has
developed a legally recognized professional certification called Information Systems
Professional (ISP).
Impact of globalization
Many students in the developed world have avoided degrees related to software
engineering because of the fear of offshore outsourcing (importing software products or
services from other countries) and of being displaced by foreign visa workers. Although
government statistics do not currently show a threat to software engineering itself; a
related career, computer programming does appear to have been affected. Often one is
expected to start out as a computer programmer before being promoted to software
engineer. Thus, the career path to software engineering may be rough, especially during
recessions.
Some career counselors suggest a student also focus on "people skills" and business skills
rather than purely technical skills because such "soft skills" are allegedly more difficult to
offshore. It is the quasi-management aspects of software engineering that appear to be
what has kept it from being impacted by globalization.
Prizes
The CODiE awards is a yearly award issued by the Software and Information
Industry Association for excellence in software development the software
industry.
Jolt Awards are awards in the software industry.
Stevens Award is a software engineering award given in memory of Wayne
Stevens.
Some people believe that software engineering implies a certain level of academic
training, professional discipline, and adherence to formal processes that often are not
applied in cases of software development. A common analogy is that working in
construction does not make one a civil engineer, and so writing code does not make one a
software engineer. It is disputed by some - in particular by the Canadian Professional
Engineers Ontario (PEO) body, that the field is mature enough to warrant the title
"engineering". The PEO's position was that "software engineering" was not an
appropriate name for the field since those who practiced in the field and called
themselves "software engineers" were not properly licensed professional engineers, and
that they should therefore not be allowed to use the name.
The word engineering within the term software engineering causes a lot of confusion.
The wrangling over the status of software engineering (between traditional engineers and
computer scientists) can be interpreted as a fight over control of the word engineering.
Traditional engineers question whether software engineers can legally use the term.
Traditional engineers (especially civil engineers and the NSPE) claim that they have
special rights over the term engineering, and for anyone else to use it requires their
approval. In the mid-1990s, the NSPE sued to prevent anyone from using the job title
software engineering. The NSPE won their lawsuit in 48 states. However, SE
practitioners, educators, and researchers ignored the lawsuits and called themselves
software engineers anyway. The U.S. Bureau of Labor Statistics uses the term software
engineer, too. The term engineering is much older than any regulatory body, so many
believe that traditional engineers have few rights to control the term. As things stand at
2007, however, even the NSPE appears to have softened its stance towards software
engineering and following the heels of several overseas precedents, is investigating a
possibility of licensing software engineers in consultation with IEEE, NCEES and other
groups "for the protection of the public health safety and welfare" .
In Canada, the use of the words 'engineer' and 'engineering' are controlled in each
province by self-regulating professional engineering organizations, often aligned with
geologists and geophysicists, and tasked with enforcement of the governing legislation.
The intent is that any individual holding themselves out as an engineer (or geologist or
geophysicist) has been verified to have been educated to a certain accredited level, and
their professional practice is subject to a code of ethics and peer scrutiny. This system
was originally designed for the practise of engineering where public safety is a concern,
but extends to other branches of engineering as well, including electronics and software.
In New Zealand, IPENZ, the professional engineering organization entrusted by the New
Zealand government with legal power to license and regulate chartered engineers
(CPEng), recognizes software engineering as a legitimate branch of professional
engineering and accepts application of software engineers to obtain chartered status
provided he or she has a tertiary degree of approved subjects. Software Engineering is
included but Computer Science is normally not.
Employment
In 2004, the U. S. Bureau of Labor Statistics counted 760,840 software engineers holding
jobs in the U.S.; in the same time period there were some 1.4 million practitioners
employed in the U.S. in all other engineering disciplines combined. Due to its relative
newness as a field of study, formal education in software engineering is often taught as
part of a computer science curriculum, and as a result most software engineers hold
computer science degrees.
There is considerable debate over the future employment prospects for software
engineers and other IT professionals. For example, an online futures market called the
"ITJOBS Future of IT Jobs in America" attempts to answer whether there will be more IT
jobs, including software engineers, in 2012 than there were in 2002.
Certification
The ACM had a professional certification program in the early 1980s, which was
discontinued due to lack of interest. The ACM examined the possibility of professional
certification of software engineers in the late 1990s, but eventually decided that such
certification was inappropriate for the professional industrial practice of software
engineering. As of 2006, the IEEE had certified over 575 software professionals. In the
U.K. the British Computer Society has developed a legally recognized professional
certification called Chartered IT Professional (CITP), available to fully qualified
Members (MBCS). In Canada the Canadian Information Processing Society has
developed a legally recognized professional certification called Information Systems
Professional (ISP). The Software Engineering Institute offers certification on specific
topic such as Security, Process improvement and Software architecture.
Most certification programs in the IT industry are oriented toward specific technologies,
and are managed by the vendors of these technologies. These certification programs are
tailored to the institutions that would employ people who use these technologies.
Impact of globalization
Many students in the developed world have avoided degrees related to software
engineering because of the fear of offshore outsourcing (importing software products or
services from other countries) and of being displaced by foreign visa workers. Although
government statistics do not currently show a threat to software engineering itself; a
related career, computer programming does appear to have been affected. Often one is
expected to start out as a computer programmer before being promoted to software
engineer. Thus, the career path to software engineering may be rough, especially during
recessions.
Some career counselors suggest a student also focus on "people skills" and business skills
rather than purely technical skills because such "soft skills" are allegedly more difficult to
offshore. It is the quasi-management aspects of software engineering that appear to be
what has kept it from being impacted by globalization.
Education
A knowledge of programming is the main pre-requisite to becoming a software engineer,
but it is not sufficient. Many software engineers have degrees in Computer Science due to
the lack of software engineering programs in higher education. However, this has started
to change with the introduction of new software engineering degrees, especially in post-
graduate education. A standard international curriculum for undergraduate software
engineering degrees was defined by the CCSE.
Steve McConnell opines that because most universities teach computer science rather
than software engineering, there is a shortage of true software engineers. In 2004 the
IEEE Computer Society produced the SWEBOK, which has become an ISO standard
describing the body of knowledge covered by a software engineer.
The European Commission within the Erasmus Mundus Programme offers a European
master degree called European Master on Software Engineering for students from Europe
and also outside Europe. This is a joint program (double degree) involving 4 universities
in Europe.
Chapter-2
Software design & Modeling languages
for software design
Software design
Software development process
Requirements · Specification
Architecture · Design
Implementation · Testing
Deployment · Maintenance
Models
Supporting disciplines
Configuration management
Documentation
Quality assurance (SQA)
Project management
User experience design
Tools
Overview
The software requirements analysis (SRA) step of a software development process yields
specifications that are used in software engineering. If the software is "semiautomated" or
user centered, software design may involve user experience design yielding a story board
to help determine those specifications. If the software is completely automated (meaning
no user or user interface), a software design may be as simple as a flow chart or text
describing a planned sequence of events. There are also semi-standard methods like
Unified Modeling Language and Fundamental modeling concepts. In either case some
documentation of the plan is usually the product of the design.
The design concepts provide the software designer with a foundation from which more
sophisticated methods can be applied. A set of fundamental design concepts has evolved.
They are:
Design considerations
There are many aspects to consider in the design of a piece of software. The importance
of each should reflect the goals the software is trying to achieve. Some of these aspects
are:
Compatibility - The software is able to operate with other products that are
designed for interoperability with another product. For example, a piece of
software may be backward-compatible with an older version of itself.
Extensibility - New capabilities can be added to the software without major
changes to the underlying architecture.
Fault-tolerance - The software is resistant to and able to recover from component
failure.
Maintainability - The software can be restored to a specified condition within a
specified period of time. For example, antivirus software may include the ability
to periodically receive virus definition updates in order to maintain the software's
effectiveness.
Modularity - the resulting software comprises well defined, independent
components. That leads to better maintainability. The components could be then
implemented and tested in isolation before being integrated to form a desired
software system. This allows division of work in a software development project.
Packaging - Printed material such as the box and manuals should match the style
designated for the target market and should enhance usability. All compatibility
information should be visible on the outside of the package. All components
required for use should be included in the package or specified as a requirement
on the outside of the package.
Reliability - The software is able to perform a required function under stated
conditions for a specified period of time.
Reusability - the modular components designed should capture the essence of the
functionality expected out of them and no more or less. This single-minded
purpose renders the components reusable wherever there are similar needs in
other designs.
Robustness - The software is able to operate under stress or tolerate unpredictable
or invalid input. For example, it can be designed with a resilience to low memory
conditions.
Security - The software is able to withstand hostile acts and influences.
Usability - The software user interface must be intuitive (and often aesthetically
pleasing) to its target user/audience. Default values for the parameters must be
chosen so that they are a good choice for the majority of the users. In many cases,
online help should be included and also carefully designed.
Modeling language
A modeling language is any artificial language that can be used to express information or
knowledge or systems in a structure that is defined by a consistent set of rules. The rules
are used for interpretation of the meaning of components in the structure. A modeling
language can be graphical or textual. Examples of graphical modelling languages for
software design are:
Business Process Modeling Notation (BPMN, and the XML form BPML) is an
example of a Process Modeling language.
EXPRESS and EXPRESS-G (ISO 10303-11) is an international standard general-
purpose data modeling language.
Extended Enterprise Modeling Language (EEML) is commonly used for business
process modeling across a number of layers.
Flowchart is a schematic representation of an algorithm or a stepwise process,
Fundamental Modeling Concepts (FMC) modeling language for software-
intensive systems.
IDEF is a family of modeling languages, the most notable of which include
IDEF0 for functional modeling, IDEF1X for information modeling, and IDEF5
for modeling ontologies.
Jackson Structured Programming (JSP) is a method for structured programming
based on correspondences between data stream structure and program structure
LePUS3 is an object-oriented visual Design Description Language and a formal
specification language that is suitable primarily for modelling large object-
oriented (Java, C++, C#) programs and design patterns.
Unified Modeling Language (UML) is a general modeling language to describe
software both structurally and behaviorally. It has a graphical notation and allow
for extension with a Profile (UML).
Alloy (specification language) is a general purpose specification language for
expressing complex structural constraints and behavior in a software system. It
provides a concise language based on first-order relational logic.
Overview
The Business Process Modeling Notation (BPMN) is a standard for business process
modeling, and provides a graphical notation for specifying business processes in a
Business Process Diagram (BPD), based on a flowcharting technnique very similar to
activity diagrams from Unified Modeling Language (UML). The objective of BPMN is to
support business process management for both technical users and business users by
providing a notation that is intuitive to business users yet able to represent complex
process semantics. The BPMN specification also provides a mapping between the
graphics of the notation to the underlying constructs of execution languages, particularly
Business Process Execution Language.
Currently there are several competing standards for business process modeling languages
used by modeling tools and processes. Widespread adoption of the BPMN will help unify
the expression of basic business process concepts (e.g., public and private processes,
choreographies), as well as advanced process concepts (e.g., exception handling,
transaction compensation).
BPMN topics
Scope
BPMN will be constrained to support only the concepts of modeling that are applicable to
business processes. This means that other types of modeling done by organizations for
non-business purposes will be out of scope for BPMN. For example, the modeling of the
following will not be a part of BPMN:
Organizational structures
Functional breakdowns
Data models
In addition, while BPMN will show the flow of data (messages), and the association of
data artifacts to activities, it is not a data flow diagram.
Elements
The modeling in BPMN is made by simple diagrams with a small set of graphical
elements. It should make it easy for business users as well as developers to understand
the flow and the process. The four basic categories of elements are as follows:
Flow Objects
Events, Activities, Gateways
Connecting Objects
Sequence Flow, Message Flow, Association
Swimlanes
Pool, Lane
Artifacts (Artefacts)
Data Object, Group, Annotation
These four categories of elements give us the opportunity to make a simple business
process diagram (BPD). It is also allowed in BPD to make your own type of a Flow
Object or an Artifact to make the diagram more understandable.
Flow objects are the main describing elements within BPMN, and consist of three core
elements (Events, Activities, and Gateways):
Event
An Event is represented with a circle and denotes something that happens (rather
than Activities which are something that is done). Icons within the circle denote
the type of event (e.g. envelope for message, clock for time). Events are also
classified as Catching (as in, they might catch an incoming message to Start the
process) or Throwing (as in, they might throw a message at the End of the
process).
Start event
Acts as a trigger for the process; indicated by a single narrow border; and can
only be Catch, so is shown with an open (outline) icon.
End event
Represents the result of a process; indicated by a single thick or bold border; and
can only Throw, so is shown with a solid icon.
Intermediate event
Represents something that happens between the start and end events; is indicated
by a tramline border; and can Throw or Catch (using solid or open icons as
appropriate) - for example, a task could flow to an event that throws a message
across to another pool and a subsequent event waits to catch the response before
continuing.
Activity
An Activity is represented with a rounded-corner rectangle and describes the kind
of work which must be done.
Task
A task represents a single unit of work that is not or cannot be broken down to a
further level of business process detail without diagramming the steps in a
procedure (not the purpose of BPMN)
Sub-process
Used to hide or reveal additional levels of business process detail - when
collapsed a sub-process is indicated by a plus sign against the bottom line of the
rectangle; when expanded the rounded rectangle expands to show all flow objects,
connecting objects, and artefacts.
Has its own self-contained start and end events, and sequence flows from the
parent process must not cross the boundary.
Transaction
A form of sub-process in which all contained activities must be treated as a
whole, i.e., they must all be completed to meet an objective, and if any one of
them fails they must all be compensated (undone). Transactions are differentiated
from expanded sub-processes by being surrounded by a tramline border.
Gateway
A Gateway is represented with a diamond shape and will determine forking and
merging of paths depending on the conditions expressed.
Flow objects are connected to each other using Connecting objects, which consist of
three types (Sequences, Messages, and Associations):
Sequence Flow
A Sequence Flow is represented with a solid line and arrowhead and shows in
which order the activities will be performed. The sequence flow may be also have
a symbol at its start, a small diamond indicates one of a number of conditional
flows from an activity while a diagonal slash indicates the default flow from a
decision or activity with conditional flows.
Message Flow
A Message Flow is represented with a dashed line, an open circle at the start, and
an open arrowhead at the end. It tells us what messages flow across organisational
boundaries (i.e., between pools). A message flow can never be used to connect
activities or events within the same pool.
Association
An Association is represented with a dotted line. It is used to associate an Artifact
or text to a Flow Object, and can indicate some directionality using an open
arrowhead (toward the artifact to represent a result, from the artifact to represent
an input, and both to indicate it is read and updated). No directionality would be
used when the Artifact or text is associated with a sequence or message flow (as
that flow already shows the direction).
Annotation
Swimlanes Groups
Data objects
Swim lanes are a visual mechanism of organising and categorising activities, based on
cross functional flowcharting, and in BPMN consist of two types:
Pool
Represents major participants in a process, typically separating different
organisations. A pool contains one or more lanes (like a real swimming pool). A
pool can be open (i.e., showing internal detail) when it is depicted as a large
rectangle showing one or more lanes, or collapsed (i.e., hiding internal detail)
when it is depicted as an empty rectangle stretching the width or height of the
diagram.
Lane
Used to organise and categorise activities within a pool according to function or
role, and depicted as a rectangle stretching the width or height of the pool. A lane
contains the Flow Objects, Connecting Objects and Artifacts.
Artifacts allow developers to bring some more information into the model/diagram. In
this way the model/diagram becomes more readable. There are three pre-defined Artifacts
and they are:
Data Objects
Data Objects show the reader which data is required or produced in an activity.
Group
A Group is represented with a rounded-corner rectangle and dashed lines. The
Group is used to group different activities but does not affect the flow in the
diagram.
Annotation
An Annotation is used to give the reader of the model/diagram an understandable
impression.
Within and between these three BPMN sub-models, many types of Diagrams can be
created. The following are the types of business processes that can be modeled with
BPMN (those with asterisks may not map to an executable language):
BPMN is designed to allow all the above types of Diagrams. However, it should be
cautioned that if too many types of sub-models are combined, such as three or more
private processes with message flow between each of them, then the Diagram may
become too hard for someone to understand. Thus, we recommend that the modeler pick
a focused purpose for the BPD, such as a private process, or a collaboration process.
BPMN 2.0
The Business Process Model and Notation is the name of the working proposal for
BPMN 2.0 The vision of BPMN 2.0 is to have one single specification for a new
Business Process Model and Notation that defines the notation, metamodel and
interchange format but with a modified name that still preserves the "BPMN" brand. The
proposed features include
Aligning BPMN with the business process definition meta model BPDM to form
a single consistent language
Enabling the exchange of business process models and their diagram layouts
among process modeling tools to preserve semantic integrity
Expand BPMN to allow model orchestrations and choreographies as stand-alone
or integrated models
Support the display and interchange of different perspectives on a model that
allow a user to focus on specific concerns
Serialize BPMN and provide XML schemes for model transformation and to
extend BPMN towards business modeling and executive decision support.
Weaknesses of BPMN
The weaknesses of BPMN could relate to:
Fig 1. Requirements of a database for an audio compact disc (CD) collection, presented
in EXPRESS-G notation.
Overview
Data models formally define data objects and relationships among data objects for a
domain of interest. Some typical applications of data models include supporting the
development of databases and enabling the exchange of data for a particular area of
interest. Data models are specified in a data modeling language. EXPRESS is a data
modeling language defined in ISO 10303-11, the EXPRESS Language Reference
Manual..
An EXPRESS data model can be defined in two ways, textually and graphically. For
formal verification and as input for tools such as SDAI the textual representation within
an ASCII file is the most important one. The graphical representation on the other hand is
often more suitable for human use such as explanation and tutorials. The graphical
representation, called EXPRESS-G, is not able to represent all details that can be
formulated in the textual form.
EXPRESS-G
Simple example
SCHEMA Family;
ENTITY Person
ABSTRACT SUPERTYPE OF (ONEOF (Male, Female));
name: STRING;
mother: OPTIONAL Female;
father: OPTIONAL Male;
END_ENTITY;
ENTITY Female
SUBTYPE OF (Person);
END_ENTITY;
ENTITY Male
SUBTYPE of (Person);
END_ENTITY;
END_SCHEMA;
The data model is enclosed within the EXPRESS schema Family. It contains a supertype
entity Person with the two subtypes Male and Female. Since Person is declared to be
ABSTRACT only occurrences of either (ONEOF) the subtype Male or Female can exist.
Every occurrence of a person has a mandatory name attribute and optionally attributes
mother and father. There is a fixed style of reading for attributes of some entity type:
EXPRESS offers a series of datatypes, with specific data type symbols of the EXPRESS-
G notation:
Entity data type: This is the most important datatype in EXPRESS. It is covered
below in more details. Entity datatypes can be related in two ways, in a sub-
supertype tree and/or by attributes.
Enumeration data type: Enumeration values are simple strings such as red, green,
and blue for an rgb-enumeration. In the case that an enumeration type is declared
to be extensible it can be extended in other schemas.
Defined data type. They can be used to specialize other datatypes further on. E.g.
it is possible to define the datatype positive which is of type integer with a value >
0.
Aggregation data type: The possible kinds of aggregation_types are SET, BAG,
LIST and ARRAY. While SET and BAG are unordered, LIST and ARRAY are
ordered. A BAG may contain a particular value more than once, this is not
allowed for SET. An ARRAY is the only aggregate which may contain unset
members. This is not possible for SET, LIST, BAG. The members of an aggregate
may be of any other data type
Entity-Attribute
Entity attributes allow to add "properties" to entities and to relate one entity with another
one in a specific role. The name of the attribute specifies the role. Most datatypes can
directly serve as type of an attribute. This includes aggregation as well.
There are three different kinds of attributes, explicit, derived and inverse attributes. And
all these can be re-declared in a subtype. In addition an explicit attribute can be re-
declared as derived in a subtype. No other change of the kind of attributes is possible.
Explicit attributes are those which have direct values visible in a STEP-File.
Derived attributes get their values from an expression. In most cases the
expression refers to other attributes of THIS instance. The expression may also
use EXPRESS functions.
Inverse attributes do not add "information" to an entity, but only name and
constrain an explicit attribute to an entity from the other end.
Specific attribute symbols of the EXPRESS-G notation:
An entity instance can be constructed for either a single entity (if not abstract) or for a
complex combination of entities in such a sub-supertype graph. For the big graphs the
number of possible combinations is likely to grow in astronomic ranges. To restrict the
possible combinations special supertype constraints got introduced such as ONEOF and
TOTALOVER. Furthermore an entity can be declared to be abstract to enforce that no
instance can be constructed of just this entity but only if it contains a non-abstract
subtype.
Algorithmic constraints
Entities and defined data types may be further constraint with WHERE rules. WHERE
rules are also part of global rules. A WHERE rule is an expression, which must evaluate
to TRUE, otherwise a population of an EXPRESS schema, is not valid. Like derived
attributes these expression may invoke EXPRESS functions, which may further invoke
EXPRESS procedures. The functions and procedures allow formulating complex
statements with local variables, parameters and constants - very similar to a programming
language.
The EXPRESS language can describe local and global rules. For example:
ENTITY area_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 2) AND
(SELF\named_unit.dimensions.mass_exponent = 0) AND
(SELF\named_unit.dimensions.time_exponent = 0) AND
(SELF\named_unit.dimensions.electric_current_exponent = 0) AND
(SELF\named_unit.dimensions.
thermodynamic_temperature_exponent = 0) AND
(SELF\named_unit.dimensions.amount_of_substance_exponent = 0)
AND
(SELF\named_unit.dimensions.luminous_intensity_exponent = 0);
END_ENTITY; -- area_unit
This example describes that area_unit entity must have square value of length. For this
the attribute dimensions.length_exponent must be equal to 2 and all other exponents of
basic SI units must be 0.
Another example:
And so, you can describe some rules to your entities. More details on the given examples
can be found in ISO 10303-41
Overview
Extended Enterprise Modeling Language (EEML) is modelling language, which
combines structural modeling, business process modeling, goal modeling with goal
hierarchies, and resource modeling. It is used in practice to bridge the type of goal
modeling used in common requirements engineering to other modeling approaches. The
process logic in EEML is mainly expressed through nested structures of tasks and
decision points. The sequencing of tasks is expressed by the flow relation between
decision points. Each task has an input port and the output port being decision points for
modeling process logic.
History
Extended Enterprise Modeling Language (EEML) is end 1990s developed in the EU
project EXTERNAL as extension of the Action Port Model (APM) by S. Carlsen (1998).
The EXTERNAL project aimed to facilitate inter-organisational cooperation in
knowledge intensive industries. It is the hypotheses of the project that interactive process
models form a suitable framework for tools and methodologies for dynamically
networked organisations. In the project EEML (Extended Enterprise Modelling
Language) was first constructed as a common metamodel, designed to enable syntactic
and semantic interoperability.
It has been further developed in the EU projects Unified Enterprise Modelling Language
(EUML) from 2002 to 2003 and the ongoing ATHENA project. The objectives of UEML
Working group has been to define, to validate and to disseminate a set of core language
constructs to support a Unified Language for Enterprise Modelling, named UEML, to
serve as a basis for interoperability within a smart organisation or a network of
enterprises.
EEML Topics
Modeling domains
The EEML-language is divided into 4 sub-languages, with well-defined links across these
languages:
Process modeling
Data modeling
Resource modeling
Goal modeling
Process modeling supports the modeling of process logic which is mainly expressed
through nested structures of tasks and decision points. The sequencing of the tasks is
expressed by the flow relation between decision points. Each task has minimum an input
port and an output port being decision points for modeling process logic, Resource roles
are used to connect resources of various kinds (persons, organizations, information,
material objects, software tools and manual tools) to the tasks. In addition, data modeling
(using UML class diagrams), goal modeling and competency modeling (skill
requirements and skills possessed) can be integrated with the process models.
EEML Layers
Generic Task Type: This layer identifies the constituent tasks of generic,
repetitive processes and the logical dependencies between these tasks.
Specific Task Type: In this layer process models are expanded, concretised,
decomposed and specialised to facilitate business solutions.
Manage Task Instances: Here, more detailed decisions are taken regarding work
in the actual work environment with its organisational, information, and tool
resources.
Perform Task Instances: This layer covers the actual execution of tasks.
Goal Modelling
Goal Modelling is one of the four EEML modeling domains age. A goal expresses the
wanted (or unwanted) state of affairs (either current or future) in a certain context.
Example of the goal model is depicted below. It shows goals and relationships between
them. It is possible to model advanced goal-relationships in EEML by using goal
connectors. A goal connector is used when one need to link several goals.
In goal modeling to fulfil Goal1, one must achieve to other goals: both Goal2 and Goal3
(goal-connector with “and” as the logical relation going out). If Goal2 and Goal3 are two
different ways of achieving Goal1, then it should be “xor” logical relationship. It can be
an opposite situation when both Goal2 and Goal3 need to be fulfilled and to achieve them
one must fulfil Goal1. In this case Goal2 and Goal3 are linked to goal connector and this
goal connector has a link to Goal1 with ”and”-logical relationship.
The table indicate different types of connecting relationships in EEML goal modeling.
Goal model can also be interlinked with a process model.
Within requirements engineering (RE), the notion of goal has increasingly been used.
Goals generally describe objectives which a system should achieve through cooperation
of actors in the intended software and in the environment . Goals are central in some RE
frameworks, and can play a supporting role in others. Goal-oriented techniques may
particularly be useful in early-phase RE. Early-phase requirements consider e.g. how the
intended system meets organizational goals, why the system is needed and how the
stakeholders’ interests may be addressed.
GRL Notation
Flowchart
A flowchart is a common type of chart, that represents an algorithm or process, showing
the steps as boxes of various kinds, and their order by connecting these with arrows.
Flowcharts are used in analyzing, designing, documenting or managing a process or
program in various fields.
History
The first structured method for documenting process flow, the "flow process chart", was
introduced by Frank Gilbreth to members of ASME in 1921 as the presentation “Process
Charts—First Steps in Finding the One Best Way”. Gilbreth's tools quickly found their
way into industrial engineering curricula. In the early 1930s, an industrial engineer, Allan
H. Mogensen began training business people in the use of some of the tools of industrial
engineering at his Work Simplification Conferences in Lake Placid, New York.
A 1944 graduate of Mogensen's class, Art Spinanger, took the tools back to Procter and
Gamble where he developed their Deliberate Methods Change Program. Another 1944
graduate, Ben S. Graham, Director of Formcraft Engineering at Standard Register
Corporation, adapted the flow process chart to information processing with his
development of the multi-flow process chart to displays multiple documents and their
relationships. In 1947, ASME adopted a symbol set derived from Gilbreth's original work
as the ASME Standard for Process Charts by Mishad,Ramsan,Raiaan.
Douglas Hartree explains that Herman Goldstine and John von Neumann developed the
flow chart (originally, diagram) to plan computer programs. His contemporary account is
endorsed by IBM engineers and by Goldstine's personal recollections. The original
programming flow charts of Goldstine and von Neumann can be seen in their
unpublished report, "Planning and coding of problems for an electronic computing
instrument, Part II, Volume 1," 1947, which is reproduced in von Neumann's collected
works.
Flowcharts used to be a popular means for describing computer algorithms and are still
used for this purpose. Modern techniques such as UML activity diagrams can be
considered to be extensions of the flowchart. However, their popularity decreased when,
in the 1970s, interactive computer terminals and third-generation programming languages
became the common tools of the trade, since algorithms can be expressed much more
concisely and readably as source code in such a language. Often, pseudo-code is used,
which uses the common idioms of such languages without strictly adhering to the details
of a particular one.
A typical flowchart from older Computer Science textbooks may have the following
kinds of symbols:
Flowcharts may contain other symbols, such as connectors, usually represented as circles,
to represent converging paths in the flowchart. Circles will have more than one arrow
coming into them but only one going out. Some flowcharts may just have an arrow point
to another arrow instead. These are useful to represent an iterative process (what in
Computer Science is called a loop). A loop may, for example, consist of a connector
where control first enters, processing steps, a conditional with one arrow exiting the loop,
and one going back to the connector. Off-page connectors are often used to signify a
connection to a (part of another) process held on another sheet or screen. It is important
to remember to keep these connections logical in order. All processes should flow from
top to bottom and left to right.
Examples
Types of flowcharts
There are many different types of flowcharts. On the one hand there are different types
for different users, such as analysts, designers, engineers, managers, or programmers. On
the other hand those flowcharts can represent different types of objects. Sterneckert
(2003) divides four more general types of flowcharts:
However there are several of these classifications. For example Andrew Veronis (1978)
named three basic types of flowcharts: the system flowchart, the general flowchart, and
the detailed flowchart. That same year Marilyn Bohl (1978) stated "in practice, two kinds
of flowcharts are used in solution planning: system flowcharts and program
flowcharts...". More recently Mark A. Fryman (2001) stated that there are more
differences. Decision flowcharts, logic flowcharts, systems flowcharts, product
flowcharts, and process flowcharts are "just a few of the different types of flowcharts that
are used in business and government.
Software
Manual
Any vector-based drawing program can be used to create flowchart diagrams, but these
will have no underlying data model to share data with databases or other programs such
as project management systems or spreadsheets. Some tools offer special support for
flowchart drawing, e.g., ConceptDraw, SmartDraw, Visio, and OmniGraffle.
Automatic
Many software packages exist that can create flowcharts automatically, either directly
from source code, or from a flowchart description language. For example, Graph::Easy, a
Perl package, takes a textual description of the graph, and uses the description to generate
various output formats including HTML, ASCII or SVG.
Web-based
Overview
Extended Enterprise Modeling Language (EEML) is modelling language, which
combines structural modeling, business process modeling, goal modeling with goal
hierarchies, and resource modeling. It is used in practice to bridge the type of goal
modeling used in common requirements engineering to other modeling approaches. The
process logic in EEML is mainly expressed through nested structures of tasks and
decision points. The sequencing of tasks is expressed by the flow relation between
decision points. Each task has an input port and the output port being decision points for
modeling process logic.
History
Extended Enterprise Modeling Language (EEML) is end 1990s developed in the EU
project EXTERNAL as extension of the Action Port Model (APM) by S. Carlsen (1998).
The EXTERNAL project aimed to facilitate inter-organisational cooperation in
knowledge intensive industries. It is the hypotheses of the project that interactive process
models form a suitable framework for tools and methodologies for dynamically
networked organisations. In the project EEML (Extended Enterprise Modelling
Language) was first constructed as a common metamodel, designed to enable syntactic
and semantic interoperability.
It has been further developed in the EU projects Unified Enterprise Modelling Language
(EUML) from 2002 to 2003 and the ongoing ATHENA project. The objectives of UEML
Working group has been to define, to validate and to disseminate a set of core language
constructs to support a Unified Language for Enterprise Modelling, named UEML, to
serve as a basis for interoperability within a smart organisation or a network of
enterprises.
EEML Topics
Modeling domains
The EEML-language is divided into 4 sub-languages, with well-defined links across these
languages:
Process modeling
Data modeling
Resource modeling
Goal modeling
Process modeling supports the modeling of process logic which is mainly expressed
through nested structures of tasks and decision points. The sequencing of the tasks is
expressed by the flow relation between decision points. Each task has minimum an input
port and an output port being decision points for modeling process logic, Resource roles
are used to connect resources of various kinds (persons, organizations, information,
material objects, software tools and manual tools) to the tasks. In addition, data modeling
(using UML class diagrams), goal modeling and competency modeling (skill
requirements and skills possessed) can be integrated with the process models.
EEML Layers
Generic Task Type: This layer identifies the constituent tasks of generic,
repetitive processes and the logical dependencies between these tasks.
Specific Task Type: In this layer process models are expanded, concretised,
decomposed and specialised to facilitate business solutions.
Manage Task Instances: Here, more detailed decisions are taken regarding work
in the actual work environment with its organisational, information, and tool
resources.
Perform Task Instances: This layer covers the actual execution of tasks.
Goal Modelling
Goal Modelling is one of the four EEML modeling domains age. A goal expresses the
wanted (or unwanted) state of affairs (either current or future) in a certain context.
Example of the goal model is depicted below. It shows goals and relationships between
them. It is possible to model advanced goal-relationships in EEML by using goal
connectors. A goal connector is used when one need to link several goals.
In goal modeling to fulfil Goal1, one must achieve to other goals: both Goal2 and Goal3
(goal-connector with “and” as the logical relation going out). If Goal2 and Goal3 are two
different ways of achieving Goal1, then it should be “xor” logical relationship. It can be
an opposite situation when both Goal2 and Goal3 need to be fulfilled and to achieve them
one must fulfil Goal1. In this case Goal2 and Goal3 are linked to goal connector and this
goal connector has a link to Goal1 with ”and”-logical relationship.
The table indicate different types of connecting relationships in EEML goal modeling.
Goal model can also be interlinked with a process model.
Within requirements engineering (RE), the notion of goal has increasingly been used.
Goals generally describe objectives which a system should achieve through cooperation
of actors in the intended software and in the environment . Goals are central in some RE
frameworks, and can play a supporting role in others. Goal-oriented techniques may
particularly be useful in early-phase RE. Early-phase requirements consider e.g. how the
intended system meets organizational goals, why the system is needed and how the
stakeholders’ interests may be addressed.
GRL Notation
Introduction
FMC distinguishes three perspectives to look at a software system:
FMC defines a dedicated diagram type for each perspective. FMC diagrams use a simple
and lean notation. The purpose of FMC diagrams is to facilitate the communication about
a software system, not only between technical experts but also between technical experts
and business or domain experts. The comprehensibility of FMC diagrams has made them
famous among its supporters.
The common approach when working with FMC is to start with a high-level diagram of
the compositional structure of a system. This “big picture” diagram serves as a reference
in the communication with all involved stakeholders of the project. Later on, the high-
level diagram is iteratively refined to model technical details of the system.
Complementary diagrams for processes observed in the system or value domains found in
the system are introduced as needed.
Diagram Types
FMC uses three diagram types to model different aspects of a system:
All FMC diagrams are bipartite graphs. Each Bipartite graph consists of two disjoint sets
of vertices with the condition that no vertex is connected to another vertex of the same
set. In FMC diagrams, members of one set are represented by angular shapes, and
members of the other set are represented by curved shapes. Each element in an FMC
diagram can be refined by another diagram of the same type, provided that the combined
graph is also bipartite. This mechanism allows modeling all relevant layers of abstraction
with the same notation.
Compositional structure diagrams depict the static structure of a system, and the
relationships between system components. System components can be active or passive.
Agents are active system components. They perform activities in the system. Storages
and channels are passive components which store or transmit information.
The image to the right is an example of a compositional structure diagram. It contains the
agents Order Processor, Supplier Manager, Supplier, Online Shop and an unnamed
human agent. Agents are represented by rectangles. The dots and the shadow of the
agent Supplier indicate that this agent has multiple instances, i.e. the Supplier Manager
communicates with one or many suppliers. The so called human agent represents a user
interacting with the system.
The diagram contains the storages Orders, Purchase Order and Product Catalog.
Storages are represented by curved shapes. Agents can read from storages, write to
storages or modify the content of storages. The directions of the arrows indicate which
operation is performed by an agent. In the diagram, the Supplier Manager can modify the
content of the Product Catalog, whereas the Order Processor can only read the content
of the Product Catalog.
Agents communicate via channels. The direction of information flow is either indicated
by arrows (not shown in the picture), by a request-response-symbol (e.g. between
Supplier Manager and Supplier) or omitted (e.g. between Order Processor and Supplier
Manager).
"They are used to express system behavior over time, depicting the actions
performed by the agents. So they clarify how a system is working and how
communication takes place between different agents."
Value range structure diagrams (also known as FMC Entity Relationship Diagrams) can
be compared with the Entity-relationship model.
IDEF
The most-widely recognized and used of the IDEF family are IDEF0, a functional
modeling language building on SADT, and IDEF1X, which addresses information
models and database design issues.
History
IDEF originally stands for ICAM Definition, that were initiated in the 1970s at the US Air
Force Materials Laboratory, Wright-Patterson Air Force Base in Ohio by Dennis E.
Wisnosky and Dan L. Shunk and others. and finished being developed in the 1980s.
IDEF was a product of the Integrated Computer-Aided Manufacturing (ICAM) initiative
of the United States Air Force. "IDEF" initially stood for "ICAM DEFinition" language;
the IEEE standards recast IDEF as "Integration DEFinition."
The specific projects that produced IDEF were ICAM project priorities 111 and 112
(later renumber 1102). The subsequent Integrated Information Support System (IISS)
project priorities 6201, 6202, and 6203 were an effort to create an information processing
environment that could be run in heterogeneous physical computing environments.
Further development of IDEF occurred under those projects as a result of experience
gained applying the new modeling techniques. The intent of the IISS efforts was to create
'generic subsystems' which could be used by a large number of collaborating enterprises,
such as U.S. Defense contractors and the armed forces of friendly nations.
Functional modeling
Information modeling
At the time of the ICAM 1102 effort there were numerous, mostly incompatible, data
model methods for storing computer data — Sequential (VSAM), Hierarchical (IMS),
Network (Cincom's TOTAL and CODASYL, and Cullinet's IDMS). The relational data
model was just emerging as a promising way of thinking about structuring data for easy,
efficient, and accurate access. Relational Database Management Systems had not yet
emerged as a general standard for data management.
The ICAM program office deemed it valuable to create a "neutral" way of describing the
data content of large-scale systems. The emerging academic literature suggested that
methods were needed to process data independently of the way it was physically stored.
Thus the IDEF1 language was created to allow a neutral description of data structures,
that could be equally applied regardless of the storage method or file access method.
IDEF1 was developed under ICAM program priority 1102 by Dr. Robert R. Brown of the
Hughes Aircraft Company, under contract to SofTech, Inc. Dr. Brown had previously
been responsible for the development of IMS while working at Rockwell International
(Rockwell chose not to pursue IMS as a marketable product; International Business
Machines (IBM), which had served as a support contractor during development,
subsequently took over the product and was successful in further developing it for
market.) Dr. Brown credits his Hughes colleague Mr. Timothy Ramey as the inventor of
IDEF1 as a viable formalism for modeling information structures. The two Hughes
researchers built on ideas from and interactions with many luminaries in the field at the
time. In particular, IDEF1 draws on the following techniques:
Experience with IDEF1 revealed that the translation of information requirements into
database designs was more difficult than had originally be anticipated. The most
beneficial value of the IDEF1 information modeling technique was its ability to represent
data independent of how those data were to be stored and used. It provided data modelers
and data analysts with a way to represent data requirements during the requirements-
gathering process. This allowed designers to face the decision of which DBMS to use
under various circumstances after the nature of the data requirements was understood.
The result was reduction of the "misfit" of data requirements to the capabilities, and
limitations, of the DBMS. The translation from IDEF1 models to database designs proved
to be difficult, however.
IDEF1X
To satisfy the data modeling enhancement requirements that were identified in the IISS-
6202 project, a sub-contractor, DACOM, obtained a license to the Logical Database
Design Technique (LDDT) and its supporting software (ADAM). LDDT had been
developed in 1982 by Robert G. Brown of The Database Design Group entirely outside
the IDEF program and with no knowledge of IDEF1. LDDT combined elements of the
relational data model, the E-R model, and generalization in a way specifically intended to
support data modeling and the transformation of the data models into database designs.
The graphic syntax of LDDT differed from that of IDEF1 and, more importantly, LDDT
contained interrelated modeling concepts not present in IDEF1. Mary E. Loomis wrote a
concise summary of the syntax and semantics of a substantial subset of LDDT, using
terminology compatible with IDEF1 wherever possible. DACOM labeled the result
IDEF1X and supplied it to the ICAM program.
Because the IDEF program was funded by the government, the techniques are in the
public domain. In addition to the ADAM software, sold by DACOM under the name
Leverage, a number of CASE tools, such as ERwin, use IDEF1X as their representation
technique for data modeling.
The third IDEF (IDEF2) was originally intended as a user interface modeling method.
However, since the Integrated Computer-Aided Manufacturing (ICAM) Program needed
a simulation modeling tool, the resulting IDEF2 was a method for representing the time
varying behavior of resources in a manufacturing system, providing a framework for
specification of math model based simulations. It was the intent of the methodology
program within ICAM to rectify this situation but limitation of funding did not allow this
to happen. As a result, the lack of a method which would support the structuring of
descriptions of the user view of a system has been a major shortcoming of the IDEF
system. The basic problem from a methodology point of view is the need to distinguish
between a description of what a system (existing or proposed) is supposed to do and a
representative simulation model that will predict what a system will do. The latter was
the focus of IDEF2, the former is the focus of IDEF3.
IDEF 4
Example of the IDEF4: An Behavior Diagram for methods Implementing Louder.
The development of IDEF4 came from the recognition that the modularity,
maintainability and code reusability that results from the object oriented programming
paradigm can be realized in traditional data processing applications. The proven ability of
the object oriented programming paradigm to support data level integration in large
complex distributed systems is also a major factor in the widespread interest in this
technology from the traditional data processing community.
IDEF4 was developed as a design tool for software designers who use object-oriented
languages such as the Common LISP Object System, Flavors, C++, SmallTalk, Objective
C and others. Since effective usage of the object-oriented paradigm requires a different
thought process than used with conventional procedural or database languages, standard
methodologies such as structure charts, data flow diagrams, and traditional data design
models (hierarchical, relational, and network) are not sufficient. IDEF4 seeks to provide
the necessary facilities to support the object-oriented design decision making process.
IDEF5
IDEF6
IDEF6 or Integrated Definition for Design Rationale Capture is a method to facilitate the
acquisition, representation, and manipulation of the design rationale used in the
development of enterprise systems. Rationale is the reason, justification, underlying
motivation, or excuse that moved the designer to select a particular strategy or design
feature. More simply, rationale is interpreted as the answer to the question, “Why is this
design being done in this manner?” Most design methods focus on the what the design is
(i.e., on the final product, rather than why the design is the way it is).
IDEF6 will be a method that possesses the conceptual resources and linguistic
capabilities needed (i) to represent the nature and structure of the information that
constitutes design rationale within a given system, and (ii) to associate that rationale with
design specifications, models, and documentation for the system. The scope of IDEF6
applicability covers all phases of the information system development process, from
initial conceptualization through both preliminary and detailed design activities. To the
extent that detailed design decisions for software systems are relegated to the coding
phase, the IDEF6 technique should be usable during the software construction process as
well.
IDEF8
IDEF8 or Integrated Definition for Human-System Interaction Design is a method for
producing high-quality designs of the interactions that occur between users and the
systems they operate. Systems are characterized as a collection of objects which perform
functions to accomplish a particular goal. The system with which the user interacts can be
any system, not necessarily a computer program. Human-system interactions are
designed at three levels of specification within the IDEF8 method. The first level defines
the philosophy of system operation and produces a set of models and textual descriptions
of overall system processes. The second level of design specifies role-centered scenarios
of system use. The third level of IDEF8 design is for human-system design detailing. At
this level of design, IDEF8 provides a library of metaphors to help users and designers
specify the desired behavior in terms of other objects whose behavior is more familiar.
Metaphors provide a model of abstract concepts in terms of familiar, concrete objects and
experiences.
IDEF9
IDEF14
IDEF14 or Integrated Definition for Network Design Method is a method that targets at
modeling and designing computer and communication networks. It can be used to model
existing ("as is") computer networks or envisioned ("to be") computer networks. It helps
the network designer work with "what if" potential network designs and document design
rationale. The fundamental goals of the IDEF14 method research project have developed
from a perceived need for good network designs that can be implemented quickly and
accurately.
IDEF Methods
Eventually the IDEF methods have been defined up to IDEF14:
In 1995 only the IDEF0, IDEF1X, IDEF2, IDEF3 and IDEF4 had been developed in full.
Some of the other IDEF concepts had some prelimary design. Some of the last efforts
were new IDEF developments in 1995 toward establishing reliable methods for business
constraint discovery IDEF9, design rationale capture IDEF6, humansystem interaction
design IDEF8, and network design IDEF14.
In 2009 the methods IDEF7, IDEF10, IDEF11, IDEF 12 and IDEF13 haven't been
developed any further then their initial definition.
Because JSP focusses on the existing input and output data streams, designing a program
using JSP is claimed to be more straightforward than with other structured programming
methods, avoiding the leaps of intuition needed to successfully program using methods
such as top-down decomposition.
Another consequence of JSP's focus on data streams is that it creates program designs
with a very different structure to the kind created by the stepwise refinement methods of
Wirth and Dijkstra. One typical feature of the structure of JSP programs is that they have
several input operations distributed throughout the code in contrast to programs designed
using stepwise refinement, which tend to have only one input operation. Jackson
illustrates this difference in Chapter 3 of Principles of Program Design. He presents two
versions of a program, one designed using JSP, the other using 'traditional' methods.
Structural equivalent
The JSP version of the program is structurally equivalent to
String line;
line = in.readLine();
while (line != null) {
int count = 0;
String firstLineOfGroup = line;
String line;
int count = 0;
String firstLineOfGroup = null;
while ((line = in.readLine()) != null) {
if (firstLineOfGroup == null
|| !line.equals(firstLineOfGroup)) {
if (firstLineOfGroup != null) {
System.out.println(firstLineOfGroup + " " + count);
}
count = 0;
firstLineOfGroup = line;
}
count++;
}
if (firstLineOfGroup != null) {
System.out.println(firstLineOfGroup + " " + count);
}
Jackson criticises the traditional version, claiming that it hides the relationships which
exist between the input lines, compromising the programs understandability and
maintainability by, for example, forcing the use of a special case for the first line and
forcing another special case for a final output operation.
The method
JSP uses semi-formal steps to capture the existing structure of a program's inputs and
outputs in the structure of the program itself.
The intent is to create programs which are easy to modify over their lifetime. Jackson's
major insight was that requirement changes are usually minor tweaks to the existing
structures. For a program constructed using JSP, the inputs, the outputs, and the internal
structures of the program all match, so small changes to the inputs and outputs should
translate into small changes to the program.
fundamental operations
sequences
iterations
selections
The method begins by describing a program's inputs in terms of the four fundamental
component types. It then goes on to describe the program's outputs in the same way. Each
input and output is modelled as a separate Data Structure Diagram (DSD). To make JSP
work for compute-intensive applications, such as digital signal processing (DSP) it is also
necessary to draw algorithm structure diagrams, which focus on internal data structures
rather than input and output ones.
The input and output structures are then unified or merged into a final program structure,
known as a Program Structure Diagram (PSD). This step may involve the addition of a
small amount of high level control structure to marry up the inputs and outputs. Some
programs process all the input before doing any output, whilst others read in one record,
write one record and iterate. Such approaches have to be captured in the PSD.
JSP uses a diagramming notation to describe the structure of inputs, outputs and
programs, with diagram elements for each of the fundamental component types.
An operation
A sequence
An iteration is again represented with joined boxes. In addition the iterated operation has
a star in the top right corner of its box. In the example below, operation A consists of an
iteration of zero or more invocations of operation B.
An iteration
Selection is similar to a sequence, but with a circle drawn in the top right hand corner of
each optional operation. In the example, operation A consists of one and only one of
operations B, C or D.
A selection
A worked example
As an example, here is how a programmer would design and code a run length encoder
using JSP.
A run length encoder is a program which takes as its input a stream of bytes. It outputs a
stream of pairs consisting of a byte along with a count of the byte's consecutive
occurrences. Run length encoders are often used for crudely compressing bitmaps.
With JSP, the first step is to describe the structure of a program's inputs. A run length
encoder has only one input, a stream of bytes which can be viewed as zero or more runs.
Each run consists of one or more bytes of the same value. This is represented by the
following JSP diagram.
The second step is to describe the structure of the output. The run length encoder output
can be described as zero or more pairs, each pair consisting of a byte and its count. In this
example, the count will also be a byte.
The next step is to describe the correspondences between the operations in the input and
output structures.
The correspondences between the run length encoders inputs and its outputs
It is at this stage that the astute programmer may encounter a structure clash, in which
there is no obvious correspondence between the input and output structures. If a structure
clash is found, it is usually resolved by splitting the program into two parts, using an
intermediate data structure to provide a common structural framework with which the
two program parts can communicate. The two programs parts are often implemented as
processes or coroutines.
In this example, there is no structure clash, so the two structures can be merged to give
the final program structure.
At this stage the program can be fleshed out by hanging various primitive operations off
the elements of the structure. Primitives which suggest themselves are
1. read a byte
2. remember byte
3. set counter to zero
4. increment counter
5. output remembered byte
6. output counter
The iterations also have to be fleshed out. They need conditions added. Suitable
conditions would be
If we put all this together, we can convert the diagram and the primitive operations into
C, maintaining a one-to-one correspondence between the code and the operations and
structure of the program design diagram.
#include <stdio.h>
#include <stdlib.h>
c = getchar();
while (c != EOF) {
int count = 1;
int first_byte = c;
c = getchar();
putchar(first_byte);
putchar(count);
}
return EXIT_SUCCESS;
}
Criticism
This method will work only when translation from input to output is equivalent to a
context-free grammar.
Lepus3
LePUS3 is an object-oriented, visual Design Description Language, namely a software
modelling language and a formal specification language that is suitable primarily for
modelling large object-oriented (Java, C++, C#) programs and design motifs such as
design patterns . It is defined as an axiomatized subset of First-order predicate logic.
Purpose
LePUS3 is tailored for the following purposes:
Scalability: To model industrial-scale programs using small charts with only few
symbols
Automated verifiability: To allow programmers to continuously keep the design in
synch with the implementation
Program visualization: To allow tools to reverse-engineer legible charts from
plain source code modelling their design
Pattern implementation: To allow tools to determine automatically whether your
program implements a design pattern
Design abstraction: To specify unimplemented programs without committing
prematurely to implementation minutiae
Genericity: To model a design pattern not as a specific implementation but as a
design motif
Rigour: To allow software designers to be sure exactly what design charts mean
and reason rigorously about them
Context
LePUS3 belongs to the following families of languages:
Vocabulary
LePUS3 was designed to accommodate for parsimony and for economy of expression. Its
vocabulary consists of only 15 visual tokens.
Tool support
Version 0.5.1 of the Two-Tier Programming Toolkit can be used to create LePUS3
specifications (charts), automatically verifying their consistency with Java 1.4 programs,
and for reverse-engineering these charts from Java source code.
Design Patterns
LePUS3 was specifically designed to model, among others, the 'Gang of Four' design
patterns, including Abstract Factory, Factory Method, Adapter, Decorator, Composite,
Proxy, Iterator, State, Strategy, Template Method, and Visitor. (See "The 'Gang of Four'
Companion") The abbreviation LePUS for "Language for Pattern Uniform Specification"
became because the precursor of this language was primarily concerned with design
patterns.
Examples
LePUS3 is particularly suitable for modelling large programs, design patterns, and
object-oriented application frameworks. It is unsuitable for modelling non object-oriented
programs, architectural styles, and undecidable and semi-decidable properties.
UML includes a set of graphical notation techniques to create abstract models of specific
systems.
Overview
The Unified Modeling Language (UML) is an open method used to specify, visualize,
modify, construct and document the artifacts of an object-oriented software intensive
system under development. UML offers a standard way to write a system's blueprints,
including conceptual components such as:
actors,
business processes and
system components and activities
UML combines best practices from data modeling concepts such as entity relationship
diagrams, business modeling (work flow), object modeling and component modeling. It
can be used with all processes, throughout the software development life cycle, and
across different implementation technologies. UML has succeeded the concepts of the
Booch method, the Object-modeling technique (OMT) and Object-oriented software
engineering (OOSE) by fusing them into a single, common and widely usable modeling
language. UML aims to be a standard modeling language which can model concurrent
and distributed systems. UML is not an industry standard, but is taking shape under the
auspices of the Object Management Group (OMG). OMG has initially called for
information on object-oriented methodologies, that might create a rigorous software
modeling language. Many industry leaders have responded in earnest to help create the
standard.
History
After Rational Software Corporation hired James Rumbaugh from General Electric in
1994, the company became the source for the two most popular object-oriented modeling
approaches of the day: Rumbaugh's OMT, which was better for object-oriented analysis
(OOA), and Grady Booch's Booch method, which was better for object-oriented design
(OOD). Together Rumbaugh and Booch attempted to reconcile their two approaches and
started work on a Unified Method.
They were soon assisted in their efforts by Ivar Jacobson, the creator of the object-
oriented software engineering (OOSE) method. Jacobson joined Rational in 1995, after
his company, Objectory AB, was acquired by Rational. The three methodologists were
collectively referred to as the Three Amigos, since they were well known to argue
frequently with each other regarding methodological practices.
In 1996 Rational concluded that the abundance of modeling languages was slowing the
adoption of object technology, so repositioning the work on a unified method, they tasked
the Three Amigos with the development of a non-proprietary Unified Modeling
Language. Representatives of competing object technology companies were consulted
during OOPSLA '96; they chose boxes for representing classes over Grady Booch's
Booch method's notation that used cloud symbols.
Under the technical leadership of the Three Amigos, an international consortium called
the UML Partners was organized in 1996 to complete the Unified Modeling Language
(UML) specification, and propose it as a response to the OMG RFP. The UML Partners'
UML 1.0 specification draft was proposed to the OMG in January 1997. During the same
month the UML Partners formed a Semantics Task Force, chaired by Cris Kobryn and
administered by Ed Eykholt, to finalize the semantics of the specification and integrate it
with other standardization efforts. The result of this work, UML 1.1, was submitted to the
OMG in August 1997 and adopted by the OMG in November 1997.
UML 1.x
As a modeling notation, the influence of the OMT notation dominates (e. g., using
rectangles for classes and objects). Though the Booch "cloud" notation was dropped, the
Booch capability to specify lower-level design detail was embraced. The use case
notation from Objectory and the component notation from Booch were integrated with
the rest of the notation, but the semantic integration was relatively weak in UML 1.1, and
was not really fixed until the UML 2.0 major revision.
Concepts from many other OO methods were also loosely integrated with UML with the
intent that UML would support all OO methods. For example CRC Cards (circa 1989
from Kent Beck and Ward Cunningham), and OORam were retained. Many others also
contributed, with their approaches flavoring the many models of the day, including: Tony
Wasserman and Peter Pircher with the "Object-Oriented Structured Design (OOSD)"
notation (not a method), Ray Buhr's "Systems Design with Ada", Archie Bowen's use
case and timing analysis, Paul Ward's data analysis and David Harel's "Statecharts"; as
the group tried to ensure broad coverage in the real-time systems domain. As a result,
UML is useful in a variety of engineering problems, from single process, single user
applications to concurrent, distributed systems, making UML rich but also large.
1. the Superstructure that defines the notation and semantics for diagrams and their
model elements;
2. the Infrastructure that defines the core metamodel on which the Superstructure is
based;
3. the Object Constraint Language (OCL) for defining rules for model elements;
4. and the UML Diagram Interchange that defines how UML 2 diagram layouts are
exchanged.
The current versions of these standards follow: UML Superstructure version 2.2, UML
Infrastructure version 2.2, OCL version 2.0, and UML Diagram Interchange version 1.0.
Although many UML tools support some of the new features of UML 2.x, the OMG
provides no test suite to objectively test compliance with its specifications.
Modeling
It is very important to distinguish between the UML model and the set of diagrams of a
system. A diagram is a partial graphical representation of a system's model. The model
also contains a "semantic backplane" — documentation such as written use cases that
drive the model elements and diagrams.
Static (or structural) view: Emphasizes the static structure of the system using
objects, attributes, operations and relationships. The structural view includes class
diagrams and composite structure diagrams.
Dynamic (or behavioral) view: Emphasizes the dynamic behavior of the system
by showing collaborations among objects and changes to the internal states of
objects. This view includes sequence diagrams, activity diagrams and state
machine diagrams.
UML models can be exchanged among UML tools by using the XMI interchange format.
Diagrams overview
UML 2.0 has 13 types of diagrams divided into three categories. Six diagram types
represent the structure application, seven represent general types of behavior, including
four that represent different aspects of interactions.
UML does not restrict UML element types to a certain diagram type. In general, every
UML element may appear on almost all types of diagrams. This flexibility has been
partially restricted in UML 2.0.
Structure diagrams
Structure diagrams emphasize what things must be in the system being modeled:
Since structure diagrams represent the structure of a system, they are used extensively in
documenting the architecture of software systems.
Behavior diagrams
Behavior diagrams emphasize what must happen in the system being modeled:
Since behaviour diagrams illustrate the behaviour of system, they are used extensively to
describe the functionality of software systems.
Interaction diagrams
Interaction diagrams, a subset of behavior diagrams, emphasize the flow of control and
data among the things in the system being modeled:
The Protocol State Machine is a sub-variant of the State Machine. It may be used to
model network communication protocols.
Meta modeling
Beyond the M3-model, the Meta-Object Facility describes the means to create and
manipulate models and metamodels by defining CORBA interfaces that describe those
operations. Because of the similarities between the Meta-Object Facility M3-model and
UML structure models, Meta-Object Facility metamodels are usually modeled as UML
class diagrams. A supporting standard of Meta-Object Facility is XMI, which defines an
XML-based exchange format for models on the M3-, M2-, or M1-Layer.
Criticisms
Although UML is a widely recognized and used modeling standard, it is frequently
criticized for the following deficiencies:
Language bloat
Bertrand Meyer, in a satirical essay framed as a student's request for a grade
change, apparently criticized UML as of 1997 for being unnecessarily large; a
disclaimer was added later pointing out that his company nevertheless supports
UML. Ivar Jacobson, a co-architect of UML, said that objections to UML 2.0's
size were valid enough to consider the application of intelligent agents to the
problem. It contains many diagrams and constructs that are redundant or
infrequently used.
Problems in learning and adopting
The problems cited above can make learning and adopting UML problematic,
especially when required of engineers lacking the prerequisite skills. In practice,
people often draw diagrams with the symbols provided by their CASE tool, but
without the meanings those symbols are intended to provide.
Cumulative Impedance/Impedance Mismatching
As with any notational system, UML is able to represent some systems more
concisely or efficiently than others. Thus a developer gravitates toward solutions
that reside at the intersection of the capabilities of UML and the implementation
language. This problem is particularly pronounced if the implementation language
does not adhere to orthodox object-oriented doctrine, as the intersection set
between UML and implementation language may be that much smaller.
Dysfunctional interchange format
While the XMI (XML Metadata Interchange) standard is designed to facilitate the
interchange of UML models, it has been largely ineffective in the practical
interchange of UML 2.x models. This interoperability ineffectiveness is
attributable to two reasons. Firstly, XMI 2.x is large and complex in its own right,
since it purports to address a technical problem more ambitious than exchanging
UML 2.x models. In particular, it attempts to provide a mechanism for facilitating
the exchange of any arbitrary modeling language defined by the OMG's Meta-
Object Facility (MOF). Secondly, the UML 2.x Diagram Interchange
specification lacks sufficient detail to facilitate reliable interchange of UML 2.x
notations between modeling tools. Since UML is a visual modeling language, this
shortcoming is substantial for modelers who don't want to redraw their diagrams.
Modeling experts have written sharp criticisms of UML, including Bertrand Meyer's
"UML: The Positive Spin", and Brian Henderson-Sellers in "Uses and Abuses of the
Stereotype Mechanism in UML 1.x and 2.0".
Chapter-3
Software development & Software
Testing
Requirements · Specification
Architecture · Design
Implementation · Testing
Deployment · Maintenance
Models
Supporting disciplines
Configuration management
Documentation
Quality assurance (SQA)
Project management
User experience design
Tools
Compiler · Debugger · Profiler
GUI designer
Integrated development environment
Software development is the set of activities that results in software products. Software
development may include research, new development, modification, reuse, re-
engineering, maintenance, or any other activities that result in software products.
Especially the first phase in the software development process may involve many
departments, including marketing, engineering, research and development and general
management.
The term software development may also refer to computer programming, the process of
writing and maintaining the source code.
Overview
There are several different approaches to software development, much like the various
views of political parties toward governing a country. Some take a more structured,
engineering-based approach to developing business solutions, whereas others may take a
more incremental approach, where software evolves as it is developed piece-by-piece.
Most methodologies share some combination of the following stages of software
development:
Market research
Gathering requirements for the proposed business solution
Analyzing the problem
Devising a plan or design for the software-based solution
Implementation (coding) of the software
Testing the software
Deployment
Maintenance and bug fixing
These stages are often referred to collectively as the software development lifecycle, or
SDLC. Different approaches to software development may carry out these stages in
different orders, or devote more or less time to different stages. The level of detail of the
documentation produced at each stage of software development may also vary. These
stages may also be carried out in turn (a “waterfall” based approach), or they may be
repeated over various cycles or iterations (a more "extreme" approach). The more
extreme approach usually involves less time spent on planning and documentation, and
more time spent on coding and development of automated tests. More “extreme”
approaches also promote continuous testing throughout the development lifecycle, as
well as having a working (or bug-free) product at all times. More structured or
“waterfall” based approaches attempt to assess the majority of risks and develop a
detailed plan for the software before implementation (coding) begins, and avoid
significant design changes and re-coding in later stages of the software development
lifecycle.
There are significant advantages and disadvantages to the various methodologies, and the
best approach to solving a problem using software will often depend on the type of
problem. If the problem is well understood and a solution can be effectively planned out
ahead of time, the more "waterfall" based approach may work the best. If, on the other
hand, the problem is unique (at least to the development team) and the structure of the
software solution cannot be easily envisioned, then a more "extreme" incremental
approach may work best. A software development process is a structure imposed on the
development of a software product. Synonyms include software life cycle and software
process. There are several models for such processes, each describing approaches to a
variety of tasks or activities that take place during the process.
The sources of ideas for software products are legion. These ideas can come from market
research including the demographics of potential new customers, existing customers,
sales prospects who rejected the product, other internal software development staff, or a
creative third party. Ideas for software products are usually first evaluated by marketing
personnel for economic feasibility, for fit with existing channels distribution, for possible
effects on existing product lines, required features, and for fit with the company's
marketing objectives. In a marketing evaluation phase, the cost and time assumptions
become evaluated. A decision is reached early in the first phase as to whether, based on
the more detailed information generated by the marketing and development staff, the
project should be pursued further.
In the book "Great Software Debates", Alan M. Davis states in the chapter
"Requirements", subchapter "The Missing Piece of Software Development":
Software testing
Software Testing is an empirical investigation conducted to provide stakeholders with
information about the quality of the product or service under test, with respect to the
context in which it is intended to operate. Software Testing also provides an objective,
independent view of the software to allow the business to appreciate and understand the
risks at implementation of the software. Test techniques include, but are not limited to,
the process of executing a program or application with the intent of finding software
bugs. Software Testing can also be stated as the process of validating and verifying that a
software program/application/product (1) meets the business and technical requirements
that guided its design and development; (2) works as expected; and (3) can be
implemented with the same characteristics.
Software Testing, depending on the testing method employed, can be implemented at any
time in the development process, however most of the test effort occurs after the
requirements have been defined and the coding process has been completed.
Overview
Testing can never completely identify all the defects within software. Instead, it furnishes
a criticism or comparison that compares the state and behavior of the product against
oracles—principles or mechanisms by which someone might recognize a problem. These
oracles may include (but are not limited to) specifications, contracts, comparable
products, past versions of the same product, inferences about intended or expected
purpose, user or customer expectations, relevant standards, applicable laws, or other
criteria.
Every software product has a target audience. For example, the audience for video game
software is completely different from banking software. Therefore, when an organization
develops or otherwise invests in a software product, it can assess whether the software
product will be acceptable to its end users, its target audience, its purchasers, and other
stakeholders. Software testing is the process of attempting to make this assessment.
A study conducted by NIST in 2002 reports that software bugs cost the U.S. economy
$59.5 billion annually. More than a third of this cost could be avoided if better software
testing was performed.
History
The separation of debugging from testing was initially introduced by Glenford J. Myers
in 1979. Although his attention was on breakage testing ("a successful test is one that
finds a bug"), it illustrated the desire of the software engineering community to separate
fundamental development activities, such as debugging, from that of verification. Dave
Gelperin and William C. Hetzel classified in 1988 the phases and goals in software
testing in the following stages:
A primary purpose for testing is to detect software failures so that defects may be
uncovered and corrected. This is a non-trivial pursuit. Testing cannot establish that a
product functions properly under all conditions but can only establish that it does not
function properly under specific conditions. The scope of software testing often includes
examination of code as well as execution of that code in various environments and
conditions as well as examining the aspects of code: does it do what it is supposed to do
and do what it needs to do. In the current culture of software development, a testing
organization may be separate from the development team. There are various roles for
testing team members. Information derived from software testing may be used to correct
the process by which software is developed.
Not all software defects are caused by coding errors. One common source of expensive
defects is caused by requirement gaps, e.g., unrecognized requirements, that result in
errors of omission by the program designer. A common source of requirements gaps is
non-functional requirements such as testability, scalability, maintainability, usability,
performance, and security.
Software faults occur through the following processes. A programmer makes an error
(mistake), which results in a defect (fault, bug) in the software source code. If this defect
is executed, in certain situations the system will produce wrong results, causing a failure.
Not all defects will necessarily result in failures. For example, defects in dead code will
never result in failures. A defect can turn into a failure when the environment is changed.
Examples of these changes in environment include the software being run on a new
hardware platform, alterations in source data or interacting with different software. A
single defect may result in a wide range of failure symptoms.
Compatibility
This could be considered a "prevention oriented strategy" that fits well with the latest
testing phase suggested by Dave Gelperin and William C. Hetzel, as cited below .
A very fundamental problem with software testing is that testing under all combinations
of inputs and preconditions (initial state) is not feasible, even with a simple product. This
means that the number of defects in a software product can be very large and defects that
occur infrequently are difficult to find in testing. More significantly, non-functional
dimensions of quality (how it is supposed to be versus what it is supposed to do)—
usability, scalability, performance, compatibility, reliability—can be highly subjective;
something that constitutes sufficient value to one person may be intolerable to another.
Verification: Have we built the software right? (i.e., does it match the
specification).
Validation: Have we built the right software? (i.e., is this what the customer
wants).
The terms verification and validation are commonly used interchangeably in the industry;
it is also common to see these two terms incorrectly defined. According to the IEEE
Standard Glossary of Software Engineering Terminology:
Software testing can be done by software testers. Until the 1980s the term "software
tester" was used generally, but later it was also seen as a separate profession. Regarding
the periods and the different goals in software testing, different roles have been
established: manager, test lead, test designer, tester, automation developer, and test
administrator.
Although there are close links with SQA, testing departments often exist independently,
and there may be no SQA function in some companies.
Testing methods
Approach of boxes
Software testing methods are traditionally divided into black box testing and white box
testing. These two approaches are used to describe the point of view that a test engineer
takes when designing test cases.
Black box testing treats the software as a "black box"—without any knowledge of
internal implementation. Black box testing methods include: equivalence partitioning,
boundary value analysis, all-pairs testing, fuzz testing, model-based testing, traceability
matrix, exploratory testing and specification-based testing.
White box testing is when the tester has access to the internal data structures and
algorithms including the code that implement these.
Grey box testing involves having access to internal data structures and algorithms for
purposes of designing the test cases, but testing at the user, or black-box level.
Manipulating input data and formatting output do not qualify as grey box, because the
input and output are clearly outside of the "black-box" that we are calling the system
under test. This distinction is particularly important when conducting integration testing
between two modules of code written by two different developers, where only the
interfaces are exposed for test. However, modifying a data repository does qualify as grey
box, as the user would not normally be able to change the data outside of the system
under test. Grey box testing may also include reverse engineering to determine, for
instance, boundary values or error messages.
Integration Testing
Integration testing
Integration testing is any type of software testing, that seeks to uncover collisions of
individual software modules to each other. Such integration defects can arise, when the
new modules are developed in separate branches, and then integrated into the main
project.
Regression Testing
Regression testing
Regression testing is any type of software testing, that seeks to uncover software
regressions. Such regression occur whenever software functionality, that was previously
working correctly, stops working as intended. Typically, regressions occur as an
unintended consequence of program changes, when the newly developed part of the
software collides with the previously existing. Common methods of regression testing
include re-running previously run tests and checking whether previously fixed faults have
re-emerged. The depth of testing depends on the phase in the release process and the risk
of the added features. They can either be complete, for changes added late in the release
or deemed to be risky, to very shallow, consisting of positive tests on each feature, if the
changes are early in the release or deemed to be of low risk.
Acceptance testing
Acceptance testing
1. A smoke test is used as an acceptance test prior to introducing a new build to the
main testing process, i.e. before integration or regression.
2. Acceptance testing performed by the customer, often in their lab environment on
their own HW, is known as user acceptance testing (UAT).
Performance testing checks to see if the software can handle large quantities of
data or users. This is generally referred to as software scalability. This activity of
Non Functional Software Testing is often referred to as Endurance Testing.
Stability testing checks to see if the software can continuously function well in or
above an acceptable period. This activity of Non Functional Software Testing is
oftentimes referred to as load (or endurance) testing.
Usability testing is needed to check if the user interface is easy to use and
understand.
Security testing is essential for software that processes confidential data to
prevent system intrusion by hackers.
Internationalization and localization is needed to test these aspects of software, for
which a pseudolocalization method can be used.
In contrast to functional testing, which establishes the correct operation of the software
(correct in that it matches the expected behavior defined in the design requirements), non-
functional testing verifies that the software functions properly even when it receives
invalid or unexpected inputs. Software fault injection, in the form of fuzzing, is an
example of non-functional testing. Non-functional testing, especially for software, is
designed to establish whether the device under test can tolerate invalid or unexpected
inputs, thereby establishing the robustness of input validation routines as well as error-
handling routines. Various commercial non-functional testing tools are linked from the
Software fault injection page; there are also numerous open-source and free software
tools available that perform non-functional testing..
Destructive testing
Destructive testing attempts to cause the software or a sub-system to fail, in order to test
its robustness.
Testing process
A common practice of software testing is performed by an independent group of testers
after the functionality is developed before it is shipped to the customer. This practice
often results in the testing phase being used as project buffer to compensate for project
delays, thereby compromising the time devoted to testing. Another practice is to start
software testing at the same moment the project starts and it is a continuous process until
the project finishes.
Before shipping the final version of software, alpha and beta testing are often done
additionally:
Regression testing
Regression testing
More specific forms of regression testing are known as sanity testing (which quickly
checks for bizarre behavior) and smoke testing (which tests for basic functionality).
Benchmarks may be employed during regression testing to ensure that the performance
of the newly modified software will be at least as acceptable as the earlier version or, in
the case of code optimization, that some real improvement has been achieved.
Finding faults
Finding faults early
It is commonly believed that the earlier a defect is found the cheaper it is to fix it. The
following table shows the cost of fixing the defect depending on the stage it was found.
For example, if a problem in the requirements is found only post-release, then it would
cost 10–100 times more to fix than if it had already been found by the requirements
review.
Time Detected
System Post-
Requirements Architecture Construction
Test Release
10–
Requirements 1× 3× 5–10× 10×
100×
Time
Introduced Architecture 25–
- 1× 10× 15×
100×
Testing Tools
Test automation
Program testing and fault detection can be aided significantly by testing tools and
debuggers. Testing/debug tools include features such as:
There are a number of common software measures, often called "metrics", which are used
to measure the state of the software or the adequacy of the testing.
Testing artifacts
Test plan
A test specification is called a test plan. The developers are well aware what test
plans will be executed and this information is made available to management and
the developers. The idea is makes them more cautious when developing their code
or making additional changes. Some companies have a higher-level document
called a test strategy.
Traceability matrix
A traceability matrix is a table that correlates requirements or design documents
to test documents. It is used to change tests when the source documents are
changed, or to verify that the test results are correct.
Test case
A test case normally consists of a unique identifier, requirement references from a
design specification, preconditions, events, a series of steps (also known as
actions) to follow, input, output, expected result, and actual result. Clinically
defined a test case is an input and an expected result. This can be as pragmatic as
'for condition x your derived result is y', whereas other test cases described in
more detail the input scenario and what results might be expected. It can
occasionally be a series of steps (but often steps are contained in a separate test
procedure that can be exercised against multiple test cases, as a matter of
economy) but with one expected result or expected outcome. The optional fields
are a test case ID, test step, or order of execution number, related requirement(s),
depth, test category, author, and check boxes for whether the test is automatable
and has been automated. Larger test cases may also contain prerequisite states or
steps, and descriptions. A test case should also contain a place for the actual
result. These steps can be stored in a word processor document, spreadsheet,
database, or other common repository. In a database system, you may also be able
to see past test results, who generated the results, and what system configuration
was used to generate those results. These past results would usually be stored in a
separate table.
Test script
The test script is the combination of a test case, test procedure, and test data.
Initially the term was derived from the product of work created by automated
regression test tools. Today, test scripts can be manual, automated, or a
combination of both.
Test suite
The most common term for a collection of test cases is a test suite. The test suite
often also contains more detailed instructions or goals for each collection of test
cases. It definitely contains a section where the tester identifies the system
configuration used during testing. A group of test cases may also contain
prerequisite states or steps, and descriptions of the following tests.
Test data
In most cases, multiple sets of values or data are used to test the same
functionality of a particular feature. All the test values and changeable
environmental components are collected in separate files and stored as test data. It
is also useful to provide this data to the client and with the product or a project.
Test harness
The software, tools, samples of data input and output, and configurations are all
referred to collectively as a test harness.
Although variations exist between organizations, there is a typical cycle for testing:
Certifications
Several certification programs exist to support the professional aspirations of software
testers and quality assurance specialists. No certification currently offered actually
requires the applicant to demonstrate the ability to test software. No certification is based
on a widely accepted body of knowledge. This has led some to declare that the testing
field is not ready for certification. Certification itself cannot measure an individual's
productivity, their skill, or practical knowledge, and cannot guarantee their competence,
or professionalism as a tester.
Testing certifications
Controversy
Some of the major software testing controversies include:
Chapter-4
Software development process, Computer-aided
Software engineering Software quality
Overview
The largely growing body of software development organizations implement process
methodologies. Many of them are in the defense industry, which in the U.S. requires a
rating based on 'process models' to obtain contracts.
The international standard for describing the method of selecting, implementing and
monitoring the life cycle for software is ISO 12207.
A decades-long goal has been to find repeatable, predictable processes that improve
productivity and quality. Some try to systematize or formalize the seemingly unruly task
of writing software. Others apply project management techniques to writing software.
Without project management, software projects can easily be delivered late or over
budget. With large numbers of software projects not meeting their expectations in terms
of functionality, cost, or delivery schedule, effective project management appears to be
lacking.
Organizations may create a Software Engineering Process Group (SEPG), which is the
focal point for process improvement. Composed of line practitioners who have varied
skills, the group is at the center of the collaborative effort of everyone in the organization
who is involved with software engineering process improvement.
The activities of the software development process represented in the waterfall model.
There are several other models to represent this process.
Planning
Once the general requirements are gleaned from the client, an analysis of the scope of the
development should be determined and clearly stated. This is often called a scope
document. Certain functionality may be out of scope of the project as a function of cost
or as a result of unclear requirements at the start of development. If the development is
done externally, this document can be considered a legal document so that if there are
ever disputes, any ambiguity of what was promised to the client can be clarified.
Design
Domain Analysis is often the first step in attempting to design a new piece of software,
whether it be an addition to an existing software, a new application, a new subsystem or a
whole new system. Assuming that the developers (including the analysts) are not
sufficiently knowledgeable in the subject area of the new software, the first task is to
investigate the so-called "domain" of the software. The more knowledgeable they are
about the domain already, the less work required. Another objective of this work is to
make the analysts, who will later try to elicit and gather the requirements from the area
experts, speak with them in the domain's own terminology, facilitating a better
understanding of what is being said by these experts. If the analyst does not use the
proper terminology it is likely that they will not be taken seriously, thus this phase is an
important prelude to extracting and gathering the requirements. If an analyst hasn't done
the appropriate work confusion may ensue: "I know you believe you understood what you
think I said, but I am not sure you realize what you heard is not what I meant."
Specification
Architecture
Implementation is the part of the process where software engineers actually program the
code for the project.
Software testing is an integral and important part of the software development process.
This part of the process ensures that bugs are recognized as early as possible.
Documenting the internal design of software for the purpose of future maintenance and
enhancement is done throughout development. This may also include the authoring of an
API, be it external or internal.
Deployment starts after the code is appropriately tested, is approved for release and sold
or otherwise distributed into a production environment.
Maintenance and enhancing software to cope with newly discovered problems or new
requirements can take far more time than the initial development of the software. It may
be necessary to add code that does not fit the original design to correct an unforeseen
problem or it may be that a customer is requesting more functionality and code can be
added to accommodate their requests. It is during this phase that customer calls come in
and you see whether your testing was extensive enough to uncover the problems before
customers do. If the labor cost of the maintenance phase exceeds 25% of the prior-phases'
labor cost, then it is likely that the overall quality, of at least one prior phase, is poor. In
that case, management should consider the option of rebuilding the system (or portions)
before maintenance cost is out of control.
Bug Tracking System tools are often deployed at this stage of the process to allow
development teams to interface with customer/field teams testing the software to identify
any real or perceived issues. These software tools, both open source and commercially
licensed, provide a customizable process to acquire, review, acknowledge, and respond to
reported issues.
Models
Iterative processes
Iterative development prescribes the construction of initially small but ever larger
portions of a software project to help all those involved to uncover important issues early
before problems or faulty assumptions can lead to disaster. Iterative processes are
preferred by commercial developers because it allows a potential of reaching the design
goals of a customer who does not know how to define what they want.
Interestingly, surveys have shown the potential for significant efficiency gains over the
waterfall method. For example, a survey, published in August 2006 by VersionOne and
Agile Alliance and based on polling more than 700 companies claims the following
benefits for an Agile approach. The survey was repeated in August 2007 with about 1,700
respondents.
Extreme Programming (XP) is the best-known iterative process. In XP, the phases are
carried out in extremely small (or "continuous") steps compared to the older, "batch"
processes. The (intentionally incomplete) first pass through the steps might take a day or
a week, rather than the months or years of each complete step in the Waterfall model.
First, one writes automated tests, to provide concrete goals for development. Next is
coding (by a pair of programmers), which is complete when all the tests pass, and the
programmers can't think of any more tests that are needed. Design and architecture
emerge out of refactoring, and come after coding. Design is done by the same people who
do the coding. (Only the last feature - merging design and code - is common to all the
other agile processes.) The incomplete but functional system is deployed or demonstrated
for (some subset of) the users (at least one of which is on the development team). At this
point, the practitioners start again on writing tests for the next most important part of the
system.
Waterfall processes
The waterfall model shows a process, where developers are to follow these steps in order:
After each step is finished, the process proceeds to the next step, just as builders don't
revise the foundation of a house after the framing has been erected.
There is a misconception that the process has no provision for correcting errors in early
steps (for example, in the requirements). In fact this is where the domain of requirements
management comes in, which includes change control. The counter argument, by critics
to the process, is the significantly increased cost in correcting problems through
introduction of iterations. This is also the factor that extends delivery time and makes this
process increasingly unpopular even in high risk projects.
This approach is used in high risk projects, particularly large defense contracts. The
problems in waterfall do not arise from "immature engineering practices, particularly in
requirements analysis and requirements management." Studies of the failure rate of the
DOD-STD-2167 specification, which enforced waterfall, have shown that the more
closely a project follows its process, specifically in up-front requirements gathering, the
more likely the project is to release features that are not used in their current form.
Often the supposed stages are part of review between customer and supplier, the supplier
can, in fact, develop at risk and evolve the design but must sell off the design at a key
milestone called Critical Design Review (CDR). This shifts engineering burdens from
engineers to customers who may have other skills.
Other models
Formal methods
Formal methods are mathematical approaches to solving software (and hardware)
problems at the requirements, specification and design levels. Examples of formal
methods include the B-Method, Petri nets, Automated theorem proving, RAISE and
VDM. Various formal specification notations are available, such as the Z notation. More
generally, automata theory can be used to build up and validate application behavior by
designing a system of finite state machines.
Finite state machine (FSM) based methodologies allow executable software specification
and by-passing of conventional coding (see virtual finite state machine or event driven
finite state machine).
Formal methods are most likely to be applied in avionics software, particularly where the
software is safety critical. Software safety assurance standards, such as DO178B demand
formal methods at the highest level of categorization (Level A).
The Government Accountability Office, in a 2003 report on one of the Federal Aviation
Administration’s air traffic control modernization programs, recommends following the
agency’s guidance for managing major acquisition systems by
Overview
The term "Computer-aided software engineering" (CASE) can refer to the software used
for the automated development of systems software, i.e., computer code. The CASE
functions include analysis, design, and programming. CASE tools automate methods for
designing, documenting, and producing structured computer code in the desired
programming language.
Many CASE tools not only output code but also generate other output typical of various
systems analysis and design methodologies such as
History of CASE
The term CASE was originally coined by software company, Nastec Corporation of
Southfield, Michigan in 1982 with their original integrated graphics and text editor
GraphiText, which also was the first microcomputer-based system to use hyperlinks to
cross-reference text strings in documents — an early forerunner of today's web page link.
GraphiText's successor product, DesignAid was the first microprocessor-based tool to
logically and semantically evaluate software and system design diagrams and build a data
dictionary.
Under the direction of Albert F. Case, Jr. vice president for product management and
consulting, and Vaughn Frick, director of product management, the DesignAid product
suite was expanded to support analysis of a wide range of structured analysis and design
methodologies, notable Ed Yourdon and Tom DeMarco, Chris Gane & Trish Sarson,
Ward-Mellor (real-time) SA/SD and Warnier-Orr (data driven).
The next entrant into the market was Excelerator from Index Technology in Cambridge,
Mass. While DesignAid ran on Convergent Technologies and later Burroughs Ngen
networked microcomputers, Index launched Excelerator on the IBM PC/AT platform.
While, at the time of launch, and for several years, the IBM platform did not support
networking or a centralized database as did the Convergent Technologies or Burroughs
machines, the allure of IBM was strong, and Excelerator came to prominence. Hot on the
heels of Excelerator were a rash of offerings from companies such as Knowledgeware
(James Martin, Fran Tarkenton and Don Addington), Texas Instrument's IEF and
Accenture's FOUNDATION toolset (METHOD/1, DESIGN/1, INSTALL/1, FCP).
CASE tools were at their peak in the early 1990s. At the time IBM had proposed
AD/Cycle which was an alliance of software vendors centered around IBM's Software
repository using IBM DB2 in mainframe and OS/2:
The application development tools can be from several sources: from IBM, from
vendors, and from the customers themselves. IBM has entered into relationships
with Bachman Information Systems, Index Technology Corporation, and
Knowledgeware, Inc. wherein selected products from these vendors will be
marketed through an IBM complementary marketing program to provide
offerings that will help to achieve complete life-cycle coverage.
With the decline of the mainframe, AD/Cycle and the Big CASE tools died off, opening
the market for the mainstream CASE tools of today. Interestingly, nearly all of the
leaders of the CASE market of the early 1990s ended up being purchased by Computer
Associates, including IEW, IEF, ADW, Cayenne, and Learmonth & Burchett
Management Systems (LBMS).
CASE Topics
Alfonso Fuggetta classified CASE into 3 categories:
Workbenches and environments are generally built as collections of tools. Tools can
therefore be either stand alone products or components of workbenches and
environments.
CASE tools
CASE tools are a class of software that automates many of the activities involved in
various life cycle phases. For example, when establishing the functional requirements of
a proposed application, prototyping tools can be used to develop graphic models of
application screens to assist end users to visualize how an application will look after
development. Subsequently, system designers can use automated design tools to
transform the prototyped functional requirements into detailed design documents.
Programmers can then use automated code generators to convert the design documents
into code. Automated tools can be used collectively, as mentioned, or individually. For
example, prototyping tools could be used to define application requirements that get
passed to design technicians who convert the requirements into detailed designs in a
traditional manner using flowcharts and narrative documents, without the assistance of
automated design software.
1. Life-Cycle Support
2. Integration Dimension
3. Construction Dimension
4. Knowledge Based CASE dimension
Let us take the meaning of these dimensions along with their examples one by one :
This dimension classifies CASE Tools on the basis of the activities they support in the
information systems life cycle. They can be classified as Upper or Lower CASE tools.
Integration Dimension
1. CASE Framework
2. ICASE Tools
3. Integrated Project Support Environment(IPSE)
CASE Workbenches
Workbenches integrate several CASE tools into one application to support specific
software-process activities. Hence they achieve:
CASE Environments
1. Toolkits
2. Language-centered
3. Integrated
4. Fourth generation
5. Process-centered
Toolkits
Language-centered
The environment itself is written in the programming language for which it was
developed, thus enable users to reuse, customize and extend the environment. Integration
of code in different languages is a major issue for language-centered environments. Lack
of process and data integration is also a problem. The strengths of these environments
include good level of presentation and control integration. Interlisp, Smalltalk, Rational,
and KEE are examples of language-centered environments.
Integrated
Fourth generation
Forth generation environments were the first integrated environments. They are sets of
tools and workbenches supporting the development of a specific class of program:
electronic data processing and business-oriented applications. In general, they include
programming tools, simple configuration management tools, document handling facilities
and, sometimes, a code generator to produce code in lower level languages. Informix
4GL, and Focus fall into this category.
Process-centered
Examples are East, Enterprise II, Process Wise, Process Weaver, and Arcadia.
Applications
All aspects of the software development life cycle can be supported by software tools,
and so the use of tools from across the spectrum can, arguably, be described as CASE;
from project management software through tools for business and functional analysis,
system design, code storage, compilers, translation tools, test software, and so on.
However, it is the tools that are concerned with analysis and design, and with using
design information to create parts (or all) of the software product, that are most
frequently thought of as CASE tools. CASE applied, for instance, to a database software
product, might normally involve:
Software quality
In the context of software engineering, software quality measures how well software is
designed (quality of design), and how well the software conforms to that design (quality
of conformance), although there are several different definitions.
Definition
One of the challenges of Software Quality is that "everyone feels they understand it".
A definition in Steve McConnell's Code Complete divides software into two pieces:
internal and external quality characteristics. External quality characteristics are those
parts of a product that face its users, where internal quality characteristics are those that
do not.
Another definition by Dr. Tom DeMarco says "a product's quality is a function of how
much it changes the world for the better." This can be interpreted as meaning that user
satisfaction is more important than anything in determining software quality.
History
Software product quality
Product quality
o conformance to requirements or program specification; related to
Reliability
Scalability
Correctness
Completeness
Absence of bugs
Fault-tolerance
o Extensibility
o Maintainability
Documentation
A computer has no concept of "well-written" source code. However, from a human point
of view source code can be written in a way that has an effect on the effort needed to
comprehend its behavior. Many source code programming style guides, which often
stress readability and usually language-specific conventions are aimed at reducing the
cost of source code maintenance. Some of the issues that affect code quality include:
Readability
Ease of maintenance, testing, debugging, fixing, modification and portability
Low complexity
Low resource consumption: memory, CPU
Number of compilation or lint warnings
Robust input validation and error handling, established by software fault injection
Software reliability
Software reliability is an important facet of software quality. It is defined as "the
probability of failure-free operation of a computer program in a specified environment for
a specified time".
History
With software embedded into many devices today, software failure has caused more than
inconvenience. Software errors have even caused human fatalities. The causes have
ranged from poorly designed user interfaces to direct programming errors. An example of
a programming error that lead to multiple deaths is discussed in Dr. Leveson's paper
(PDF). This has resulted in requirements for development of some types software. In the
United States, both the Food and Drug Administration (FDA) and Federal Aviation
Administration (FAA) have requirements for software development.
The need for a means to objectively determine software quality comes from the desire to
apply the techniques of contemporary engineering fields to the development of software.
That desire is a result of the common observation, by both lay-persons and specialists,
that computer software does not work the way it ought to. In other words, software is
seen to exhibit undesirable behaviour, up to and including outright failure, with
consequences for the data which is processed, the machinery on which the software runs,
and by extension the people and materials which those machines might negatively affect.
The more critical the application of the software to economic and production processes,
or to life-sustaining systems, the more important is the need to assess the software's
reliability.
Regardless of the criticality of any single software application, it is also more and more
frequently observed that software has penetrated deeply into most every aspect of modern
life through the technology we use. It is only expected that this infiltration will continue,
along with an accompanying dependency on the software by the systems which maintain
our society. As software becomes more and more crucial to the operation of the systems
on which we depend, the argument goes, it only follows that the software should offer a
concomitant level of dependability. In other words, the software should behave in the
way it is intended, or even better, in the way it should.
The challenge of reliability
The circular logic of the preceding sentence is not accidental—it is meant to illustrate a
fundamental problem in the issue of measuring software reliability, which is the difficulty
of determining, in advance, exactly how the software is intended to operate. The problem
seems to stem from a common conceptual error in the consideration of software, which is
that software in some sense takes on a role which would otherwise be filled by a human
being. This is a problem on two levels. Firstly, most modern software performs work
which a human could never perform, especially at the high level of reliability that is often
expected from software in comparison to humans. Secondly, software is fundamentally
incapable of most of the mental capabilities of humans which separate them from mere
mechanisms: qualities such as adaptability, general-purpose knowledge, a sense of
conceptual and functional context, and common sense.
However, various attempts are in the works to attempt to rein in the vastness of the space
of software's environmental and input variables, both for actual programs and theoretical
descriptions of programs. Such attempts to improve software reliability can be applied at
different stages of a program's development, in the case of real software. These stages
principally include: requirements, design, programming, testing, and runtime evaluation.
The study of theoretical software reliability is predominantly concerned with the concept
of correctness, a mathematical field of computer science which is an outgrowth of
language and automata theory.
Requirements
A program cannot be expected to work as desired if the developers of the program do not,
in fact, know the program's desired behaviour in advance, or if they cannot at least
determine its desired behaviour in parallel with development, in sufficient detail. What
level of detail is considered sufficient is hotly debated. The idea of perfect detail is
attractive, but may be impractical, if not actually impossible, in practice. This is because
the desired behaviour tends to change as the possible range of the behaviour is
determined through actual attempts, or more accurately, failed attempts, to achieve it.
Whether a program's desired behaviour can be successfully specified in advance is a
moot point if the behaviour cannot be specified at all, and this is the focus of attempts to
formalize the process of creating requirements for new software projects. In situ with the
formalization effort is an attempt to help inform non-specialists, particularly non-
programmers, who commission software projects without sufficient knowledge of what
computer software is in fact capable. Communicating this knowledge is made more
difficult by the fact that, as hinted above, even programmers cannot always know in
advance what is actually possible for software in advance of trying.
Design
While requirements are meant to specify what a program should do, design is meant, at
least at a high level, to specify how the program should do it. The usefulness of design is
also questioned by some, but those who look to formalize the process of ensuring
reliability often offer good software design processes as the most significant means to
accomplish it. Software design usually involves the use of more abstract and general
means of specifying the parts of the software and what they do. As such, it can be seen as
a way to break a large program down into many smaller programs, such that those
smaller pieces together do the work of the whole program.
The purposes of high-level design are as follows. It separates what are considered to be
problems of architecture, or overall program concept and structure, from problems of
actual coding, which solve problems of actual data processing. It applies additional
constraints to the development process by narrowing the scope of the smaller software
components, and thereby—it is hoped—removing variables which could increase the
likelihood of programming errors. It provides a program template, including the
specification of interfaces, which can be shared by different teams of developers working
on disparate parts, such that they can know in advance how each of their contributions
will interface with those of the other teams. Finally, and perhaps most controversially, it
specifies the program independently of the implementation language or languages,
thereby removing language-specific biases and limitations which would otherwise creep
into the design, perhaps unwittingly on the part of programmer-designers.
Programming
In addition, improvements in languages have enabled more exact control over the shape
and use of data elements, culminating in the abstract data type. These data types can be
specified to a very fine degree, including how and when they are accessed, and even the
state of the data before and after it is accessed.
Many programming languages such as C and Java require the program "source code" to
be translated in to a form that can be executed by a computer. This translation is done by
a program called a compiler. Additional operations may be involved to associate, bind,
link or package files together in order to create a usable runtime configuration of the
software application. The totality of the compiling and assembly process is generically
called "building" the software.
The software build is critical to software quality because if any of the generated files are
incorrect the software build is likely to fail. And, if the incorrect version of a program is
inadvertently used, then testing can lead to false results.
Software builds are typically done in work area unrelated to the runtime area, such as the
application server. For this reason, a deployment step is needed to physically transfer the
software build products to the runtime area. The deployment procedure may also involve
technical parameters, which, if set incorrectly, can also prevent software testing from
beginning. For example, a Java application server may have options for parent-first or
parent-last class loading. Using the incorrect parameter can cause the application to fail to
execute on the application server.
The technical activities supporting software quality including build, deployment, change
control and reporting are collectively known as Software configuration management. A
number of software tools have arisen to help meet the challenges of configuration
management including file control tools and build control tools.
Testing
Software Testing
Software testing, when done correctly, can increase overall software quality of
conformance by testing that the product conforms to its requirements. Testing includes,
but is not limited to:
1. Unit Testing
2. Functional Testing
3. Regression Testing
4. Performance Testing
5. Failover Testing
6. Usability Testing
A number of agile methodologies use testing early in the development cycle to ensure
quality in their products. For example, the test-driven development practice, where tests
are written before the code they will test, is used in Extreme Programming to ensure
quality.
Runtime
runtime reliability determinations are similar to tests, but go beyond simple confirmation
of behaviour to the evaluation of qualities such as performance and interoperability with
other code or particular hardware configurations.
Completeness–presence of all constituent parts, with each part fully developed. This
means that if the code calls a subroutine from an external library, the software package
must provide reference to that library and all required parameters must be passed. All
required input data must also be available.
There are varied perspectives within the field on measurement. There are a great many
measures that are valued by some professionals—or in some contexts, that are decried as
harmful by others. Some believe that quantitative measures of software quality are
essential. Others believe that contexts where quantitative measures are useful are quite
rare, and so prefer qualitative measures. Several leaders in the field of software testing
have written about the difficulty of measuring what we truly want to measure well,
including Dr. Cem Kaner (PDF) and Douglass Hoffman (PDF).
One example of a popular metric is the number of faults encountered in the software.
Software that contains few faults is considered by some to have higher quality than
software that contains many faults. Questions that can help determine the usefulness of
this metric in a particular context include:
1. What constitutes “many faults?” Does this differ depending upon the purpose of
the software (e.g., blogging software vs. navigational software)? Does this take
into account the size and complexity of the software?
2. Does this account for the importance of the bugs (and the importance to the
stakeholders of the people those bugs bug)? Does one try to weight this metric by
the severity of the fault, or the incidence of users it affects? If so, how? And if
not, how does one know that 100 faults discovered is better than 1000?
3. If the count of faults being discovered is shrinking, how do I know what that
means? For example, does that mean that the product is now higher quality than it
was before? Or that this is a smaller/less ambitious change than before? Or that
fewer tester-hours have gone into the project than before? Or that this project was
tested by less skilled testers than before? Or that the team has discovered that
fewer faults reported is in their interest?
This last question points to an especially difficult one to manage. All software quality
metrics are in some sense measures of human behavior, since humans create
software(PDF). If a team discovers that they will benefit from a drop in the number of
reported bugs, there is a strong tendency for the team to start reporting fewer defects.
That may mean that email begins to circumvent the bug tracking system, or that four or
five bugs get lumped into one bug report, or that testers learn not to report minor
annoyances. The difficulty is measuring what we mean to measure, without creating
incentives for software programmers and testers to consciously or unconsciously “game”
the measurements.
A scheme that could be used for evaluating software quality factors is given below. For
every characteristic, there are a set of questions which are relevant to that characteristic.
Some type of scoring formula could be developed based on the answers to these
questions, from which a measurement of the characteristic can be obtained.
Understandability
Completeness
Are all necessary components available? Does any process fail for lack of resources or
programming? Are all potential pathways through the code accounted for, including
proper error handling?
Conciseness
Is all code reachable? Is any code redundant? How many statements within loops could
be placed outside the loop, thus reducing computation time? Are branch decisions too
complex?
Portability
Does the program depend upon system or library routines unique to a particular
installation? Have machine-dependent statements been flagged and commented? Has
dependency on internal bit representation of alphanumeric or special characters been
avoided? How much effort would be required to transfer the program from one
hardware/software system or environment to another?
Consistency
Is one variable name used to represent different logical or physical entities in the
program? Does the program contain only one representation for any given physical or
mathematical constant? Are functionally similar arithmetic expressions similarly
constructed? Is a consistent scheme used for indentation, nomenclature, the color palette,
fonts and other visual elements?
Maintainability
Has some memory capacity been reserved for future expansion? Is the design cohesive—
i.e., does each module have distinct, recognisable functionality? Does the software allow
for a change in data structures (object-oriented designs are more likely to allow for this)?
If the code is procedure-based (rather than object-oriented), is a change likely to require
restructuring the main program, or just a module?
Testability
Are complex structures employed in the code? Does the detailed design contain clear
pseudo-code? Is the pseudo-code at a higher level of abstraction than the code? If tasking
is used in concurrent designs, are schemes available for providing adequate test cases?
Usability
Is a GUI used? Is there adequate on-line help? Is a user manual provided? Are
meaningful error messages provided?
Reliability
Are loop indexes range-tested? Is input data checked for range errors? Is divide-by-zero
avoided? Is exception handling provided?
Structuredness
Is a block-structured programming language used? Are modules limited in size? Have the
rules for transfer of control between modules been established and followed?
Efficiency
Have functions been optimized for speed? Have repeatedly used blocks of code been
formed into subroutines? Has the program been checked for memory leaks or overflow
errors?
Security
Does the software protect itself and its data against unauthorized access and use? Does it
allow its operator to enforce security policies? Are security mechanisms appropriate,
adequate and correctly implemented? Can the software withstand attacks that can be
anticipated in its intended environment? Is the software free of errors that would make it
possible to circumvent its security mechanisms? Does the architecture limit the potential
impact of yet unknown errors?
Software maintenance
Software maintenance in software engineering is the modification of a software product
after delivery to correct faults, to improve performance or other attributes, or to adapt the
product to a modified environment (ISO/IEC 14764).
Overview
This international standard describes the 6 software maintenance processes as:
There are a number of processes, activities and practices that are unique to maintainers,
for example:
The key software maintenance issues are both managerial and technical. Key
management issues are: alignment with customer priorities, staffing, which organization
does maintenance, estimating costs. Key technical issues are: limited understanding,
impact analysis, testing, maintainability measurement.
SCM concerns itself with answering the question "Somebody did something, how can
one reproduce it?" Often the problem involves not reproducing "it" identically, but with
controlled, incremental changes. Answering the question thus becomes a matter of
comparing different results and of analysing their differences. Traditional configuration
management typically focused on controlled creation of relatively simple products. Now,
implementers of SCM face the challenge of dealing with relatively minor increments
under their own control, in the context of the complex system being developed.
Terminology
The history and terminology of SCM (which often varies) has given rise to controversy.
Roger Pressman, in his book Software Engineering: A Practitioner's Approach, states
that SCM is a "set of activities designed to control change by identifying the work
products that are likely to change, establishing relationships among them, defining
mechanisms for managing different versions of these work products, controlling the
changes imposed, and auditing and reporting on the changes made."
Atria (later Rational Software, now a part of IBM), used "SCM" to mean "software
configuration management". Gartner uses the term software change and configuration
management.
Purposes
The goals of SCM are generally: