Software Engineering

advertisement
Software Engineering:
An Introduction
Object-Oriented Software Engineering
CS350
Software Engineering

The application of a systematic,
disciplined, quantifiable approach to
the design, development, operation,
and maintenance of software, and the
study of these approaches
Software Engineering

Emergence as a profession
◦ Early 1980s: Software engineering had
emerged as a bonafide profession

Role of women
◦ 1940s, 1950s, and 1960s: Grace Hopper,
Jamie Fenton and many other unsung
women filled many programming jobs during
the first several decades of software
engineering
◦ Today: fewer women work in software
engineering than in other profesions
◦ Why?
Software Engineering

Processes
◦ Have become a big part of SE
◦ Hailed for their potential to improve software and sharply
criticized for their potential to constrict programmers

Cost of hardware
◦ Computers are now more numerous and more powerful
◦ Market can support large projects to create commercial off
the shelf software
◦ Cheap machines allow each programmer to have a
terminal capable of fairly rapid compilation
◦ Can use techniques such as garbage collection
◦ Organizations use commercial off the shelf software
instead of employing programmers for large custom
software projects
The Pioneering Era
New computers were coming out
almost every year or two
 Software people had to rewrite all their
programs to run on these new
machines
 “Machine room”: Jobs were run by …

◦ Signing up for machine time or by
operational staff
◦ Using punched cards for and waiting for
results to come back
The Pioneering Era
The idea of management by schedule
was non-existent
 Making predictions was almost
impossible
 Computer hardware was applicationspecific
 Scientific and business tasks needed
different machines
 The notion of reuse flourished

1945 to 1965:
The Origins
The term software engineering first
appeared in the late 1950s and early
1960s
 Programmers have always known
about civil, electrical, and computer
engineering and debated what
engineering might mean for software

1965 to 1985:
The Software Crisis
Spurred by the so-called software
crisis of the 1960s, 1970s, and 1980s
 Many software projects ran over
budget and schedule
 Some projects caused property
damage
 A few projects caused loss of life

1965 to 1985:
Cost and Budget Overruns

Example: OS/360 operating system
◦ Decade-long project from the 1960s
eventually produced one of the most
complex software systems at the time
◦ One of the first large (1000 programmers)
software projects
◦ Fred Brooks (The Mythical Man Month)
claims he made a mistake of not
developing a coherent architecture before
starting development
1965 to 1985:
Property Damage
Software defects can cause property
damage
 Poor software security allows hackers
to steal identities, costing time, money,
and reputations

1965 to 1985:
Life and Death
Software defects can kill
 Example: Therac 25 incident

1965 to 1985:
Main source of SE difficulties is a lack
of specialization
 There is a need for a "normal practice"
of software engineering, a prerequisite
if software engineering is to become
an engineering science

(Michael Jackson, "Engineering and Software Engineering" in The
Future of Software Engineering, Springer Verlag 2010; Michael
Jackson, Problem Frames: Analyzing and Structuring Software
Development Problems; Addison-Wesley, 2001)
1985 to 1989:
No Silver Bullet
For decades, solving the software
crisis meant producing software tools
 But the cost of owning/maintaining
software in the 1980s was double
developing the software
 By 1995, half of surveyed
development projects were
operational, but not successful

1985 to 1989:
Software projects
Every new technology and practice
was trumpeted as a silver
 Tools, discipline, formal methods,
process, and professionalism were
touted as silver bullets

1985 to 1989:
Tools
Structured programming
 Object-oriented programming
 CASE tools
 Ada
 Documentation
 Standards

1985 to 1989:
Discipline
Was the software crisis due to the lack
of discipline of programmers?
 Your thoughts?

1985 to 1989:
Formal methods
If formal engineering methodologies
were applied to software development
 Then production of software could bee
as predictable as other branches of
engineering
 Think programs correctness

1985 to 1989:
Process

Capability Maturity Model:
1.
2.
3.
4.
5.
Initial (chaotic, ad hoc, individual heroics) - the
starting point for use of a new or undocumented
repeat process.
Repeatable - the process is at least documented
sufficiently such that repeating the same steps may
be attempted.
Defined - the process is defined/confirmed as a
standard business process, and decomposed to
levels 0, 1 and 2 (the latter being Work
Instructions).
Managed - the process is quantitatively managed in
accordance with agreed-upon metrics.
Optimizing - process management includes
deliberate process optimization/improvement.
1985 to 1989:
Professionalism
Code of ethics
 Licenses
 Professionalism.

1985 to 1989:

No Silver Bullet article (Fred Brooks,
1986)
◦ No individual technology or practice would
ever make a 10-fold improvement in
productivity within 10 years
◦ Eventually, almost everyone accepted that no
silver bullet would ever be found
◦ Does no silver bullet mean that software
engineering failed?
◦ Brooks says, “We will surely make
substantial progress over the next 40 years;
an order of magnitude over 40 years is hardly
magical ...”.
1985 to 1989:

It could be said that there are, in fact, a
range of silver bullets today, including
◦
◦
◦
◦
◦
◦
Lightweight methodologies
Spreadsheet calculators
Customized browsers
In-site search engines
Database report generators
Integrated design-test coding-editors with
memory/differences/undo
◦ Specialty shops
1990 to 1999:
Prominence of the Internet

The rise of the Internet led to a demand for …
◦
◦
◦
◦

Illustrations
Maps
Photographs
Simple animation
Issues:
◦ Widespread network connections led to the growth &
prevention of international computer viruses
◦ Vast proliferation of spam e-mail became a major
design issue in e-mail systems
◦ Keyword-search systems evolved into web-based
search engines
◦ Human natural-language translation systems were
needed
2000 to Present:
Lightweight Methodologies


Expanding demand for software in many
smaller organizations meant the need for
inexpensive software
Rapid-prototyping evolved to entire
lightweight methodologies
◦ Extreme Programming (XP)
Very large software systems still used
heavily-documented methodologies
 Smaller systems had a simpler, faster
alternative approach

Current Trends

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.
Current Trends

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.
Current Trends

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.
Current Trends

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.
Current Trends

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.
Software engineering today
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.

Ethical considerations



Software engineering ethics is a large field. In some ways it began as an
unrealistic attempt to define bugs as unethical. More recently it has been defined
as the application of both computer science and engineering philosophy,
principles, and practices to the design and development of software systems. Due
to this engineering focus and the increased use of software in mission critical and
human critical systems, where failure can result in large losses of capital but more
importantly lives such as the Therac-25 system, many ethical codes have been
developed by a number of societies, associations and organizations. These
entities, such as the ACM, IEEE, APEGBC and Institute for Certification of
Computing Professionals (ICCP) have formal codes of ethics. Adherence to the
code of ethics is required as a condition of membership or certification. According
to the ICCP, violation of the code can result in revocation of the certificate. Also, all
engineering societies require conformance to their ethical codes; violation of the
code results in the revocation of the license to practice engineering in the society's
jurisdiction.
These codes of ethics usually have much in common. They typically relate the
need to act consistently with the client's interest, employer's interest, and most
importantly the public's interest. They also outline the need to act with
professionalism and to promote an ethical approach to the profession.
A Software Engineering Code of Ethics has been approved by the ACM and the
IEEE-CS as the standard for teaching and practicing software engineering.
Examples of Codes of Conduct



The following are examples of Codes of conduct for Professional Engineers.
These 2 have been chosen because both jurisdictions have a designation for
Professional Software Engineers.
Association of Professional Engineers and Geo-scientists of British Columbia
(APEGBC): All members in the association's code of Ethics must ensure that
government, the public can rely on BC's professional engineers and Geoscientists to act at all times with fairness, courtesy and good faith to their
employers, employee and customers, and to uphold the truth, honesty and
trustworthiness, and to safe guard human life and the environment. This is just
one of the many ways in which BC’s Professional Engineers and Professional
Geo-scientists maintain their competitive edge in today’s global marketplace.
Association of Professional Engineers, Geo-scientists and Geophysicists of
Alberta(APEGGA): Different with British Columbia, the Alberta Government
granted self governance to engineers, Geo-scientists and geophysicists. All
members in the APEGGA have to accept legal and ethical responsibility for the
work and to hold the interest of the public and society. The APEGGA is a
standards guideline of professional practice to uphold the protection of public
interest for engineering, Geo-scientists and geophysics in Alberta.
Opinions on ethics
Bill Joy argued that "better software" can only enable its privileged
end users, make reality more power-pointy as opposed to more
humane, and ultimately run away with itself so that "the future
doesn't need us." He openly questioned the goals of software
engineering in this respect, asking why it isn't trying to be more
ethical rather than more efficient. In his book Code and Other Laws
of Cyberspace, Lawrence Lessig argues that computer code can
regulate conduct in much the same way as the legal code. Lessig
and Joy urge people to think about the consequences of the
software being developed, not only in a functional way, but also in
how it affects the public and society as a whole.
 Overall, due to the youth of software engineering, many of the
ethical codes and values have been borrowed from other fields,
such as mechanical and civil engineering. However, there are many
ethical questions that even these, much older, disciplines have not
encountered. Questions about the ethical impact of internet
applications, which have a global reach, have never been
encountered until recently and other ethical questions are still to be
encountered. This means the ethical codes for software engineering
are a work in progress, that will change and update as more
questions arise.

Professional responsibilities in
developing software



Who's Responsible?
The developers work with clients and
users to define system requirements.
Once the system is built if any accidents
occur, such as economical harm or other,
who is responsible?
If an independent QA team does
integration testing and does not discover
a critical fault in the system, who is
ethically responsible for damage caused
by that fault?
Responsibilities for Engineering
and Geo-science Software

Developing software is a highly risky
proposition. The software development
process is a complex undertaking consisting
of specifying, designing, implementing, and
testing. Any small mistake or fault will cause
unlimited damage to society. Professional
Members contribute to the success of
software development projects. However,
Association of Professional Engineering and
Geo-science is primarily concerned with their
responsibility for minimizing the risk of failure
and protecting the public interest
Systems Engineering

Systems engineers deal primarily with
the overall system requirements and
design, including hardware and
human issues. They are often
concerned with partitioning
functionality to hardware, software or
human operators. Therefore, the
output of the systems engineering
process serves as an input to the
software engineering process.
Engineering process

The definition, implementation,
assessment, measurement,
management, change, and
improvement of the software life cycle
process itself.
Download