Is it Really Engineering? Chapter 3 What's Different about Software? Is it a “dark art”? It‟s a strange amalgam of art, craftsmanship, science and the application of theory (engineering). Artificial Science Perhaps one way to describe it is as an “artificial science”: it is difficult to quantify software engineering rules mathematically (they‟re “fuzzy”). Perhaps another way is as a “meta science”: it relies upon a mathematics to provide for other sciences. But, in either case…. “not quite…” The Analogy to Other Professions So, if “Software Engineering” is really “engineering” how does it stack up against the other engineering professions? Let‟s look at some other engineering professions, such as Civil Engineers, Architects, Mechanical Engineers, Hardware Engineers, Doctors, and so on. Civil Engineering Civil engineers design buildings, bridges and roads. Is software anything like these? Civil engineers use specification and design to define them, and apply mathematical techniques (“Statics” and “Dynamics”). However, it is possible to visualize, build physical models, and the actual end product can be touched, and visually inspected! Not so with software. This makes it much more difficult to describe, inspect and test. Architecture Architects design spaces (building and landscape architectures) that are both functional and aesthetically pleasing. Architects apply principles of lighting, balance and visual design. Once again, though, they produce a product that can be visually inspected and found pleasing or not. Mechanical/Aeronautical Engineering Mechanical and Aeronautical engineers design complex physical systems where safety and reliability are arguably more important that aesthetics. Even so, the end product can (and should!) be subjected to rigorous testing and visual inspection. Software may have to be safe and reliable, but testing something that can‟t be touched is much more difficult! Computer (Hardware) Engineering Computer hardware engineering is more in line with software engineering, but still, tools are provided to be the „eyes‟ of the engineer (scopes, logic analyzers, digital voltmeters). These tools are much easier to apply than debuggers. With hardware, defects can be found quickly, but take a while to fix (board turns, etc.) With software, defects take a while to find, but can usually be fixed quickly. Medicine Medicine diagnosis can be much easier in some circumstances (the physician asks “where does it hurt?”) but not all (pediatrics). Safety and competence is a life and death issue. It is not always easy to see what‟s going on inside the patient, so in that respect, it resembles the problems faced by the software engineer. Responsibility of Software Developers In all the previous professions, as is the case in software engineering, competence and respect for the safety of the customer are of great importance. The minimum responsibilities of engineers has been codified in law: tort law. It is our hope that engineering students will realize that their responsibilities as engineers goes well beyond what the legal system mandates. Engineering Institutions There are many institutions that have an impact on the engineering establishment. The market itself is one: some things sell, others don‟t. Typically, society protects itself with a set of rules and expectations, codified in law. Businesses will proclaim agreements (warranties) based (hopefully) on these laws. Engineers will work to advance their professions. Market forces The market also causes engineering communities to conform to values by providing a financial reward. Consider safety standards certification agencies (such as Underwriters Laboratories.) Sometimes markets are closed unless a certifying agency has documented conformity to a particular set of safety codes. The legal system Tort law is the law of injury and loss. (“Tort” is the root word in “torture.”) The legal system prescribes remedy for people who are injured (or whose property is injured) by a product produced by negligent means. These remedies can include “punitive damages” that go beyond compensation: they are intended to “punish” the producer so as to encourage others to not do the same! Warranties Warranties can be either expressed (indicated in writing) or implied (obvious from the intent of the product.) Warranties cannot legally disclaim customer rights protected by, or preserved under the law. So, if warranties disclaim all liability for injury, it doesn‟t mean that it is binding! Professional organizations Engineering organizations are composed of professional engineers (people who earn their living by being engineers). Their purpose is to promote the advancement of the profession by sponsoring research and setting standards for the engineering community. These organizations may also serve an “ombudsman” function by acting as an arbitrator in disputes or misunderstandings. Software Engineering Professional Organizations And Standards Bodies IEEE – Institution of Electrical and Electronics Engineers http://www.ieee.org/portal/site ACM – Association of Computing Machinery http://www.acm.org/ NIST – National Institute of Standards and Technology http://www.nist.gov/ Software Engineering Standards http://sepo.nosc.mil/SW_Standards.html SEI – Software Engineering Institute http://www.sei.cmu.edu/ Government regulation Government can both enforce existing laws, and codify new laws as circumstances change. In addition, government can establish specialized agencies to regulate technology and products associated with areas in the public interest (such as the FDA). Professional engineers and accreditation The need for regulation of technology in the public interest also implies a need for regulation of the applications of technology. Examination and certification of engineer‟s competence becomes a matter of the public interest. Usually, certification examinations are developed in collaboration with educational, governmental and professional organizations. (Such as the CSAB, the Computer Science Accreditation Board.) “Software engineers” are legal only in Texas Since software engineering is a “new” science, certification of software engineers is essentially non-existent! Some states forbid the use of the title “engineer”, unless state certified. So, legally, in many states, the term “software engineer” can‟t legally be used!