|
Critics argue that many of the foundations of software engineering are inherently flawed. The following paragraphs list many criticisms and responses. Note that many of these criticisms apply to other human activities including business and education. A critic (from Greek κÏιÏικÏÏ, kritikós - one who discerns, from Ancient Greek κÏιÏήÏ, krités, a judge) is a person who offers judgement or analysis, value judgement, interpretation, or observation. ...
Software engineering (SE) is the profession that creates and maintains software applications by applying technologies and practices from computer science, project management, engineering, application domains and other fields. ...
This article does not cite its references or sources. ...
Managing Expectations
- Criticism
- One key to successful software engineering projects is managing the customer's expectations to something that can be built and delivered. So, the field resembles marketing or sociology more than traditional engineering with its responsibilities to society at large and the perils of legal liability when they fail to protect the public interest.
- Response
- Every profession manages expectations, including all branches of engineering. Moreover, responsibility to society means meeting the expectations of the general public, which is often a stakeholder.
expectation in the context of probability theory and statistics, see expected value. ...
It has been suggested that Product marketing be merged into this article or section. ...
Social interactions of people and their consequences are the subject of sociology studies. ...
In moral philosophy, the word responsibility has at least two related meanings: The obligation to answer for actions. ...
...
In the most general sense, a liability is anything that is a hindrance, or puts one at a disadvantage. ...
Public interest is a term used to denote political movements and organizations that are in the public interest—supporting general public and civic causes, in opposition of private and corporate ones (particularistic goals). ...
A profession is an occupation that requires extensive training and the study and mastery of specialized knowledge, and usually has a professional association, ethical code and process of certification or licensing. ...
Poor Requirements - Criticism
- The requirements for most SE projects are incomplete or inconsistent. Some clients have little experience writing requirements. Other clients do not know what they want, and say "I'll know it when I see it" (IKIWISI). Even experienced clients who know exactly what they want may not precisely articulate their requirements. Clients often expect much more than they write in the requirements. And, requirement documents can describe applications that have no computable or practical solutions.
- Response
- Clarifying vague requirements is one task that often forms part of a larger project. Various methodologies to clarify requirements are available, such as structured client interviews, conceptual design and simulation. Agile development methods use rapid prototyping to clarify project goals and deliver value (the most important requirements) quickly. In projects where the software to be developed is part of a larger system designed by other engineers (such as embedded systems) it sometimes possible to define the software requirements completely at the outset of the project, since the process of clarifying the requirements has already been carried out by the system-level designers. Poor requirements are a problem in many engineering disciplines, not just in software engineering. Attempting to avoid all projects with poor requirements would exclude most projects.
A requirement is a singular documented need of what a particular product should be or do. ...
The term client may have the following meanings. ...
IKIWISI is an acronym for Ill know it when I see it. Within technical fields, it is often seen as the mantra of the indecisive individual who wants to let other people figure out the details for them. ...
Computability theory is that part of the theory of computation dealing with which problems are solvable by algorithms (equivalently, by Turing machines), with various restrictions and extensions. ...
A 3D printer for rapid prototyping Rapid prototyping also describes a software engineering methodology. ...
Engineering applies scientific and technical knowledge to solve human problems. ...
An embedded system is a special-purpose computer system, which is completely encapsulated by the device it controls. ...
A requirement is a singular documented need of what a particular product should be or do. ...
Engineering applies scientific and technical knowledge to solve human problems. ...
Rising Complexity - Criticism
- Critics argue that the complexity of requirements and user expectations have only increased. The probability of failure increases with the size, scope and complexity of the project. Technologies and practices have consistently improved over the years, but the gap between what is expected and what is delivered has not improved.
- Response
- Rising complexity actually shows the success of practitioners, because demand naturally follows supply. When clients demand more, it shows their belief that their demands will be supplied.
Dimension (from Latin measured out) is, in essence, the number of degrees of freedom available for movement in a space. ...
Scope (products) of a project is the sum total of all projects products and their features. ...
Complexity is the opposite of simplicity. ...
Ongoing Change - Criticism
- Practitioners continually develop new technologies and practices and use them whenever possible. Critics argue that ongoing change proves that older technologies and practices were failures.
- Response
- Many view ongoing change as proof that software engineering successfully learns and grows. Traditional engineers also continually develop new technologies and practices.
Ongoing Failure - Criticism
- Critics argue that incomplete or poorly designed systems are still too common. The early disasters in the field did not prevent subsequent disasters.
- Response
- No field that strives to do bigger and better projects has ever avoided all failures. Traditional engineers also have ongoing failures: automobiles kill 40,000 people every year in the U.S.; Three Mile Island, Chernobyl, and Bhopal Disaster harmed thousands; Space Shuttles Challenger and Columbia exploded; MTBE added to gasoline to reduce air pollution also contaminated drinking water. Although large, reliable software systems can be and have been constructed, software projects that fail during construction or in service are still too common. Ongoing failure is a problem for both traditional engineers and software engineers. Some claim that software engineering is already as predictable and reliable as many fields of engineering, such as space or biological engineering.
Three Mile Island Nuclear Generating Station consists of two nuclear reactors, each with its own containment building and cooling towers. ...
Chernobyl area. ...
Time cover about Bhopal disaster. ...
The launch of the Space Shuttle Challenger on mission 51L/STS-33, the 25th of the STS (Space Transportation System) program, began at an estimated time of 16:38:00. ...
Biological engineering (a. ...
Failure to Pinpoint Causes - Criticism
- Critics argue that unlike traditional engineers (who analyze failures, find precise causes, and set up guidelines to avoid them in the future), software engineers routinely fail to pinpoint causes of failure or delay precisely enough to avoid repeats in the future.
- Response
- Debugging is the activity of pinpointing the cause of failures in applications. Process improvement includes the activity of pinpointing the cause of process problems. Software engineers routinely pinpoint causes and then use the results to create better languages, databases, processes, and applications.
Nothing New - Criticism
- Critics argue that software engineers created nothing on their own, but merely use what computer scientists already know.
- Response
- A similar argument could be made about other engineering disciplines, which are consumers of knowledge from the physical sciences and mathematics. But the primary focus of engineering (including software engineering) is the synthesis of existing knowledge into new designs to solve new problems. This inevitably involves using knowledge from other disciplines, but also requires an undertstanding of how best to use and combine that knowledge to produce useful products. In software engineering the result has been the development of optimizing compilers, make, cvs, extreme programming, scripting, and bug databases. Regardless of who creates or improves technologies and practices, software engineers (should) adopt the best ones.
Engineering applies scientific and technical knowledge to solve human problems. ...
Anyone Can Do SE - Criticism
- Many bright people from other fields (engineers, scientists, business people) write spreadsheet templates or simulations, and eventually switch to writing large applications, and believe that they do software engineering. So, software engineering is not a special skill.
- Response
- Software engineering is a skill that is refined through long learning and practice. Software engineers are the ones who get the necessary education and experience, and keep up with evolving technologies, practices, and applications. This is true of every skill.
Engineering applies scientific and technical knowledge to solve human problems. ...
Albert Einstein is almost without question, currently the most widely recognized scientist among the general public. ...
This article does not cite its references or sources. ...
To meet Wikipedias quality standards, this article or section may require cleanup. ...
We Do Not Know What SE Is - Criticism
- SE does not yield to the standard ways of categorization, under traditional definitions of engineering (calculus and science). This claim is often made by critics who want to impose their own definitions on everyone else.
- Response
- We know a lot about what software engineering is. Software engineering is grounded in SE technologies and practices, and applications; and in the community of SE practitioners. Of course, software engineers continue to disagree about many details.
To meet Wikipedias quality standards, this article or section may require cleanup. ...
A practice refers to a way that something is done. ...
Application software is a loosely defined subclass of computer software that employs the capabilities of a computer directly to a task that the user wishes to perform. ...
This article needs a complete rewrite for the reasons listed on the talk page. ...
No Software Science - Criticism
- Civil, electrical, mechanical, and chemical engineering build on solid results from physics and chemistry. These results enable assembling complex systems in a principled and systematic way. No corresponding results are available for software: With software, we don't know how to systematically decompose complex systems into parts. Because there is no unified and agreed system for instruction on Software Engineering, it is difficult to evaluate the qualifications of those in the practice.
- Response
- Software engineering builds on solid results from computer science and information science. These results enable the building of very sophisticated software systems.
No Mathematics - Criticism
- Many traditional engineering disciplines are based on logic and the mathematical disciplines of arithmetic, algebra, linear algebra and differential calculus, as well as the first principles of science such as Newton's laws, the laws of thermodynamics, Maxwell's equations, etc. Most of the engineering rules-of-thumb that make up traditional engineering derive from the first principles of their respective physical and mathematical foundations. Software engineering has no such first principles that all practitioners agree to, and this makes it harder to justify it as an engineering discipline as opposed to a trade or a craft.
- Response
- Software engineers uses logic, proof theory, generating functions and wide variety of discrete mathematics when creating programs.
No Theorems About People and Projects - Criticism
- No theorems explain why one software engineer is more productive than another. No theorems explain why some software projects succeed and others fail. Without such knowledge, engineering is impossible.
- Response
- Software engineering, like other engineering disciplines, is a complex social activity. No theorems explain why one mechanical engineer is more productive than another. No theorems explain why some civil projects go over budget and fail, for example why the Big Dig in Boston went way over budget, or why two space shuttles exploded.
The Big Dig is the unofficial name of the Central Artery/Tunnel Project (CA/T), a massive undertaking to route the Central Artery (Interstate 93), the chief controlled-access highway through the heart of Boston, Massachusetts, into a tunnel under the city, replacing a previous elevated roadway. ...
Meaning of Success - Criticism
- According to a study by the Standish Group[citation needed] in 2000, 28 percent of software projects were complete successes (meaning they were executed on time and on budget), and 23% failed outright.
- Response
- Many engineering projects fail to live up to expectations: many bridges and buildings run over budget or schedule. Consider that 40% of all space shuttles have blown up and the rest have been out of service for years. Almost all custom housing projects run over budget and schedule. Success rates for software projects are meaningless without context.
Magic - Criticism
- When programmers work hard and the system works, customers frequently do not appreciate how difficult the task was.
- Response
- This is true for every profession.
Software Creation is Inherently Creative - Criticism
- Software is executable knowledge, which is discovered in a creative process, where trial and error, learning, and the ability to challenge one's assumptions are important. The true "construction" phase of software development is already automated by compilers and linkers. The difficult aspects relate to gathering requirements and designing systems. These are more like a craft than a science or engineering task. So, the potential benefit of software engineering is limited to making it easier for developers to try out ideas, to discover errors earlier, and to give them information about the state of a software system.
- Response
- Engineering design in general is "a creative process, where trial and error, learning, and the ability to challenge one's assumptions are important". Many engineers in non-software disciplines also have limited or no contact with the "construction" phase of a product or system they have designed (for example, processor designers are rarely involved in the direct fabrication of their designs). Many software engineers use agile software development to embody the creative nature of software engineering and to foster learning. The area of requirements engineering looks at how to elicit and capture what a system should do and how this knowledge can be used in software engineering activities.
Knowledge is information of which someone is aware. ...
Trial and error is a method for obtaining knowledge, both propositional knowledge and know-how. ...
A supervised child learning the countries of Asia on the floor of the central hall of the Field Museum, Chicago, Illinois Learning is the process of acquiring knowledge, skills, attitudes, or values, through study, experience, or teaching, that causes a change of behavior that is persistent, measurable, and specified or...
A craft is a skill, especially involving practical arts. ...
For use in social policy, see the article social welfare. ...
Trial and error is a method for obtaining knowledge, both propositional knowledge and know-how. ...
A supervised child learning the countries of Asia on the floor of the central hall of the Field Museum, Chicago, Illinois Learning is the process of acquiring knowledge, skills, attitudes, or values, through study, experience, or teaching, that causes a change of behavior that is persistent, measurable, and specified or...
Intel 80486DX2 microprocessor in a ceramic PGA package A central processing unit (CPU), or sometimes simply processor, is the component in a digital computer that interprets instructions and processes data contained in software. ...
Agile software development is a conceptual framework for undertaking software engineering projects. ...
Requirements analysis, in software engineering, is a term used to describe all the tasks that go into the instigation, scoping and definition of a new or altered computer system. ...
Software Engineering does not Match Knowledge Acquisition - Criticism
- Software engineering methodologies force developers to commit to the wrong decisions. The need for feedback loops in the waterfall model illustrates how the information needed to make good decisions is often discovered after the decisions are made. Decisions should not be made until developers have the information required to judge correctly, but the availability of information is always unpredictable, so a development methodology is impossible. We teach students to understand a problem completely, before starting to write a program; but this really just collapses the problem into the first step; what is the methodology used to understand the problem completely?
- Response
- This is why multiple methodologies are needed for different kinds of projects and why new and better methodologies should continue to be developed. This is also why development of a software methodology is an empirical process; good methodology results from the discovery that some design concept actually works in practice. The elements of a good methodology must be proven through use and if it works, the theory was right. These same problems are faced in any engineering design project.
No Consensus - Criticism
- In traditional engineering there is a clear consensus how things should be built, which standards should be followed and which risks must be taken care of: If an engineer does not follow these practices and something fails he gets sued. There is no such consensus in software engineering: Everyone promotes their own methods, claiming huge benefits in productivity, usually not backed up by any scientific, unbiased evidence.
- Response
- SE is a young discipline. As consensus emerges, SE will be thought of as a mature discipline.
|