Like other engineering disciplines, software engineering is carried out within a legal
and social framework that limits the freedom of engineers. Software engineers must
accept that their job involves wider responsibilities than simply the application of
technical skills. They must also behave in an ethical and morally responsible way
if they are to be respected as professionals.
It goes without saying that you should always uphold normal standards of honesty
and integrity. You should not use your skills and abilities to behave in a dishonest
way or in a way that will bring disrepute to the software engineering profession. However,
there are areas where standards of acceptable behaviour are not bounded by laws but
by the more tenuous notion of professional responsibility. Some of these are:
1. Confidentiality You should normally respect the confidentiality of your
employers or clients irrespective of whether a formal confidentiality agreement
has been signed.
2. Competence You should not misrepresent your level of competence. You
should not knowingly accept work that is outside your competence.
3. Intellectual property rights You should be aware of local laws governing the
use of intellectual property such as patents and copyright. You should be careful
to ensure that the intellectual property of employers and clients is protected.
4. Computer misuse You should not use your technical skills to misuse other people's
computers. Computer misuse ranges from relatively trivial (game playing
on an employer s machine, say) to extremely serious (dissemination of viruses).
Professional societies and institutions have an important role to play in setting
ethical standards. Organisations such as the ACM, the IEEE (Institute of Electrical
and Electronic Engineers) and the British Computer Society publish a code of professional
conduct or code of ethics. Members of these organisations undertake to
follow that code when they sign up for membership. These codes of conduct are
generally concerned with fundamental ethical behaviour.
The ACM and the IEEE have cooperated to produce a joint code of ethics and
professional practice. This code exists in both a short form,
and a longer form (Gotterbam, et al., 1999) that adds detail and substance to the shorter version. The rationale behind this code is summarised in the first two paragraphs
of the longer form:
------------------------------------------------------------------------------
Computers have a central and growing role in commerce, industry, government,
medicine, education, entertainment and society at large. Software engineers are
those who contribute by direct participation or by teaching, to the analysis, spe ification,
design, development, certification, maintenance and testing ofsoftware
systems. Because of their roles in developing software systems, software engineers
have significant opportunities to do good or cause harm, to enable others
to do good or cause harm, or to influence others to do good or cause harm. To
ensure, as much as possible. thaI their efforts will be used for good, software
engineers must commit themselves to making software engineering a beneficial
and respected profession. In accordance with that commitment, software engineers
shall adhere to the following Code of Ethics and Professional Practice.
The Code contains eight Principles relau,d to the behaviour ofand decisions
made by professional software engineers, including practitioners, educators,
managers, supervisors and policy makers, as well as trainees and students of
Computers have a central and growing role in commerce, industry, government,
medicine, education, entertainment and society at large. Software engineers are
those who contribute by direct participation or by teaching, to the analysis, spe ification,
design, development, certification, maintenance and testing ofsoftware
systems. Because of their roles in developing software systems, software engineers
have significant opportunities to do good or cause harm, to enable others
to do good or cause harm, or to influence others to do good or cause harm. To
ensure, as much as possible. thaI their efforts will be used for good, software
engineers must commit themselves to making software engineering a beneficial
and respected profession. In accordance with that commitment, software engineers
shall adhere to the following Code of Ethics and Professional Practice.
The Code contains eight Principles relau,d to the behaviour ofand decisions
made by professional software engineers, including practitioners, educators,
managers, supervisors and policy makers, as well as trainees and students of
ltroduction
the profession. The Principles identify the ethically responsible relationships
in which individuals, groups, and organizations participate and the primary
obligations within these relationships. The Clauses ofeach Principle are illustrations
ofsome ofthe obligations included in these relationships. These obligations
are founded in the software engineer's humanity, in special care owed
to people affected by the work ofsoftware engineers. and the unique elements
of the practice of software engineering. The Code prescribes these as obligations
of anyone claiming to be or aspiring to be a software engineer.
------------------------------------------------------------------------------
In any situation where different people have different views and objectives, you
are likely to be faced with ethical dilemmas. For example, if you disagree, in principle,
with the policies of more senior management in the company, how should
you react? Clearly, this depends on the particular individuals and the nature of the
disagreement. Is it best to argue a case for your position from within the organisation
or to resign in principle? If you feel that there are problems with a software
project, when do you reveal these to management? If you discuss these while they
are just a suspicion, you may be overreacting to a situation; if you leave it too late,
it may be impossible to resolve the difficulties.
Such ethical dilemmas face all of us in our professional lives and, fortunately,
in most cases they are either relatively minor or can be resolved without too much
difficulty. Where they cannot be resolved, the engineer is faced with, perhaps, another
problem. The principled action may be to resign from their job, but this may well
affect others such as their partner or their children.
A particularly difficult situation for professional engineers arises when their
employer acts in an unethical way. Say a company is responsible for developing a
safety-critical system and because of time-pressure, falsifies the safety validation
records. Is the engineer s responsibility to maintain confidentiality or to alert the
customer or publicise, in some way, that the delivered system may be unsafe?
The problem here is that there are no absolutes when it comes to safety. Although
the system may not have been validated according to predefined criteria, these criteria
may be too strict. The system may actually operate safely throughout its lifetime.
It is also the case that, even when properly validated, a system may fail and cause an
accident. Early disclosure of problems may result in damage to the employer and other
employees; failure to disclose problems may result in damage to others.
You must make up your own mind in these matters. The appropriate ethical position
here depends entirely on the views of the individuals who are involved. In this
case, the potential for damage, the extent of the damage and the people affected by
the damage should influence the decision. If the situation is very dangerous, it may
be justified to publicise it using the national press (say). However, you should always
try to resolve the situation while respecting the rights of your employer.
Another ethical issue is participation in the development of military and nuclear
systems. Some people feel strongly about these issues and do not wish to participate
in any systems development associated with military systems. Others will work on military
systems but not on weapons systems. Yet others feel that national security is an
overriding principle and have no ethical objections to working on weapons systems.
In this situation it is important that both employers and employees should make
their views known to each other in advance. Where an organisation is involved in
military or nuclear work, it should be able to specify that employees must be willing
to accept any work assignment. Equally, if an employee is taken on and makes
clear that he does not wish to work on such systems, employers should not put pressure
OI, him to do so at some later date.
Tht: general area of ethics and professional responsibility is one that has
received increasing attention over the past few years. It can be considered from a
philosophical standpoint where the basic principles of ethics are considered, and
software engineering ethics are di,cussed with reference to these basic principles.
This is the approach taken by Laudon (Laudon, 1995) and to a lesser extent by Huff
and Martin (Huff and Martin, 1995).
However, I find their approach is too abstract and difficult to relate to everyday
experience. I prefer the more concrete approach embodied in codes of conduct and
practice. I think that ethics are best discussed in a software engineering context and
not as ;l subject in their own right. In this book, therefore, I do not include abstract
ethical. discussions but, where appropriate, include examples in the exercises that
can be: the starting point for a group discussion on ethical issues.