1.In your own words, describe what the term "software engineering" means.
As a minimum, you would expect something similar to the definitions provided in the reading assignment - hopefully, reworded by the student and possibly combining elements from two or more of the definitions/readings.
Here are some extracts from the readings about the term software engineering:
i)The establishment and use of sound engineering principles (methods) in order to obtain economically software that is reliable and works on real machines (Bauer, F. L. Software Engineering. Information Processing 71., 1972).
ii)Software engineering. (1) The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1) (IEEE Std 610-1990).
iii)Software engineering is the technological and managerial discipline concerned with systematic production and maintenance of software products that are developed and modified on time and within cost estimates (Fairley, R. Software Engineering Concepts. New York: McGraw-Hill, 1985).
iv)Software engineering is the computer science discipline concerned with developing large applications. Software engineering covers not only the technical aspects of building software systems, but also management issues, such as directing programming teams, scheduling, and budgeting ( WebReference Webopaedia).
v)SEI software engineering definition from 1990 SEI Report on Undergraduate Software Engineering Education ( CMU/SEI-90-TR-003 ):
(1) Engineering is the systematic application of scientific knowledge in creating and building cost-effective solutions to practical problems in the service of mankind.
(2)Software engineering is that form of engineering that applies the principles of computer science and mathematics to achieving cost-effective solutions to software problems.
Software engineering applies engineering discipline to software development, ensuring that software products will meet organizational, financial, marketplace, and technical requirements. Like other fields of engineering, software engineering is a hybrid of scientific, technical and management principles.
The major components of software development and what they include are:
Requirements Engineering (requirements elicitation; requirements definition and specification)
Design (basic structure based on requirements to modules and choice of algorithms)
Construction (detailed design, coding, debugging, testing while programming, and performance optimization)
Testing (includes detecting defects and evaluating features)
Evolution and maintenance (software and all of its documentation)
Auxiliary principles and methods include:
Configuration management (identification, documentation and change control of source code, content, requirements, designs, test materials, estimates, plans, and user documentation)
Quality engineering (assures that software conforms to requirements);
Engineering management (all aspects of managing software development)
Engineering infrastructure (tool and methodology support)
Engineering process (consciously improving software development quality, cost, and timeliness)
In short, software engineering is the engineering of software.
Some people think that "software engineering" is just a buzzword that means the same thing as "computer programming." Admittedly, "software engineering" has been misused. But a term can be abused and still have a legitimate meaning.
The dictionary definition of "engineering" is the application of scientific and mathematical principles toward practical ends. That is what most programmers try to do. We apply scientifically developed and mathematically defined algorithms, functional design methods, quality-assurance methods, and other practices to develop software products and services. As David Parnas points out, in other technical fields the engineering professions were invented and given legal standing so that customers could know who was qualified to build technical products. Software customers deserve no less.
Computer software engineers apply the principles and techniques of computer science, engineering, and mathematical analysis to the design, development, testing, and evaluation of the software and systems that enable computers to perform their many applications.
2.Who said "A scientist builds in order to learn; an engineer learns in order to build."
Fred Brooks - the quote appeared in the article " Software Engineering is Not Computer Science" by Steve McConnell
4.Cite some examples of software projects in which there were major software development problems.
The below projects were cited in the Gibbs article:
Denver Airport automated baggage handling system
California Motor Vehicles software system
Clementine satellite software
American Airlines reservation system
FAA replacement air traffic control system
5.What are three approaches to help solve software development problems, discussed in the Gibbs article (“Software’s Chronic Crisis”)?
quantitative quality control software - measurement, formal process, bug/defect tracking analysis, early bug removal, CMM
grow don't build - use of prototypes
mathematical analysis, formal methods
6.What does the term "requirements elicitation" mean?
Requirements elicitation is "concerned with where requirements come from and how they can be collected" (SWEBOK - Chapter 1, p. 1-4).
7.What does the term "software configuration management" mean?
Software configuration management is concerned with "identifying the configuration of a system at distinct points in time for the purposes of systematically controlling changes to the software configuration and maintaining the integrity and traceability of the configuration throughout the system lifecycle" (SWEBOK - Chapter 1, p. 1-5).
8.List all the ways in which designing and building a tree house is different from the job of developing the architecture for a 20-story office building and constructing it. How does your list relate to development of software?
Here is one such list:
one or two days (e.g., a weekend)
a year or more
one or two (e.g., a parent and a child)
500 or more people (architects, lawyers, contractors, construction workers, carpenters, electricians, plumbers, air conditioning technicians, painters, glazers, truck drivers, heavy equipment operators, etc.)
years of experiences, college degrees, professional certification and/or licensing, union membership
children in the household
bankers, real estate investors, renters, customers of businesses located in the building (prior to construction many customer/users may be unknown)
a simple drawing on a single piece of paper (or in the head of the builder)
hundreds of architectural drawings: drawings of external views, floor plans, drawings for electrical, plumbing, and air handing systems, etc.
check for quality
parent climbs into the tree house and jumps up and down a few times
material and loading tests; operation tests of the electrical, plumbing and air handling systems; a number of check-list inspections by architects, contractors, and investor representatives; inspection by a bonding agency; certification by city/state inspectors, etc.
A project to build a tree house could be compared to a small program assignment (100-300 LOC), in a beginning programming course. If one has basic programming skills and likes to write programs, the job could be completed in a day or so. The customer is the instructor and extensive design documentation is not required. Running the program with a small set of test data typically checks the quality of the program.
However, if one is developing a large commercial product (say one million LOC), the job may require hundreds of experienced software engineers working for many months or years. Extensive documentation would be required, and quality assurance would be a significant part of the development effort (inspections/reviews/audits, and unit/integration/system testing).