Developers work together with
customers and users to define requirements and specify what the proposed system
will do. If, once it is built, the system works according to specification but
harms someone physically or financially, who is responsible?
the development of the system developers, work with customers and users to come
up with a set of requirements and the intended functionalities the system will
contain. During the development, the specifications should be met, while not financially
or physically harming someone using the system. Both customers and the
developers are both responsible if the system is financially or physically
harming someone. Developers are more responsible than the customers, because
they agreed the build the system based on the agreed requirements. Customers
are only at fault for agreeing to the system requirements.
Sometimes a customer requests a
requirement that you know is impossible to implement. Should you agree to put
the requirement in the definition and specification documents anyway, thinking
that you might come up with a novel way of meeting it, or thinking that you
will ask that the requirement be dropped later? Discuss the ethical
implications of promising what you know you cannot answer.
should not be responsible to meet a requirement that cannot be implemented in
the definition a specification documents. The project should stick to the schedule
and be at a reasonable cost. The cost will increase and the project will be
delayed when changes are made later on. Customers will be unhappy about
spending a lot of money on something that would not work as specified.
For each of the architectural
styles described in this chapter, give an example of a real-world application
whose software design might incorporate that style.
user interface of phones and computers make it them a user-centered design by allowing
the “user interacts with the system to perform the required tasks” (Pfleeger
and Atlee, 290). On the other hand, the printer is a task-centered design by
only performing an instruction that the user sets it to do.
Explain why modularity and application
generators are inseparable concepts. Give an example of an application
generator with which you worked.
and application generators are inseparable concepts, since they work hand in
hand. These are different than creating a program from scratch. Application
generators take the description and make a program based on it by putting
existing modules together. An example of an application generator is GUI
Builder for Eclipse IDE for Java.
For each type of cohesion, write a
description of a component exhibiting that kind of cohesion.
The keyboard and mouse for the
computer is an example of logical cohesion. Decoders and encoders are
procedural cohesion. A customer’s bank account information is communicational
cohesion through the having different modules for different information
associated with the account. A program to compute mathematical equations are
is how closely related each module within the system is. Coincidental, logical temporal,
procedural, communicational, functional, and informational cohesion are the
seven types of cohesion. The worst type of cohesion is coincidental cohesion,
in which a module contains unrelated parts. Temporal cohesion is where the data
and functions of a module are related through being used simultaneously during
the execution. Procedural cohesion is when the parts of the module follow the
same execution pattern. Communicational cohesion is modules that use the same
data. Functional cohesion is when module parts work well together to form the
same function. Informational cohesion is a type of functional cohesion in which
it is adapted to data abstraction and object-based design.
For each of the quality attributes
in the quality modules of Chapter 1, explain how the characteristics of good
design contribute to the product quality. For example, how do coupling,
cohesion, and modularity affect reliability and traceability?
You are about to choose between two
modules to use in your design, both of which compute the minimum value in an
array of integers. One module returns the smallest representable integer if the
input array is empty. The other module requires a nonempty array. Which module
is better and why?
the nonempty array is better. The module that works only if the input array is
empty will take up more resources.
A bank must report to the
government’s tax institution all transaction (deposits and withdrawals) that exceed
$10,000. Building on the initial design of the banking system from question 22,
use the Observer design pattern to construct a class that monitors all Account
Pfleeger, Shari Lawrence., and Joanne
M. Atlee. Software Engineering: Theory
and Practice. 4th ed., Pearson Prentice Hall, 2010.