CHAPTER #1
INTRODUCTION TO SOFTWARE
ENGINEERING
Exercise#1
Question: 1.1. Explain why professional software that is developed for a customer is not simply
the programs that have been developed and delivered.
Answer:
Professional software:
The software systems that are developed for any specific user to simplify some specific business
requirements are known as professional software.
Professional software is not just simple programs which can be proven by the points mentioned below:
Professional software has certain industrial standards that are to be followed for their use and development.
Professional software needs design documents, support for user platform, instructor and user manuals.
Updating and maintenance are also required in software. These tasks need proper documentation and team.
Question: 1.2. What is the most important difference between generic software product
development and custom software development? What might this mean in practice for users of generic
software products?
Answer:
Difference between generic software product development and custom software development:
Generic Software Product Development Custom Software Development
5. The customer owns the specification and it
1. The product developer owns the is also controlled by the customer.
specification of the product.
6. As the customer is also involved in
2. The developer has the ability to change the development therefore, the change in
specifications according to the external specification is made only after the
change. discussions between customer and
developer.
7. The customer and the developer will
3. Since the customers are not involved in the involve in the business process changes and
development process, the generic product they will implement if both are satisfied.
users cannot even control the evolution of
the product. 8. The application will take some years for the
process of development and it is not
4. The users can get the application available immediately.
immediately.
Question :1.3. Briefly discuss why it is usually cheaper in the long run to use software
engineering methods and techniques for software systems.
Answer:
The software engineering methods and techniques for software systems enforce control and
accountability in software development.
It is usually cheaper, in the long run, to use software engineering methods and techniques for
software systems rather than just write the programs as if it was a personal programming
project. For most types of system, the majority of costs are the costs of changing the software
after it has gone into use.
The longevity of software largely depends on the use of software engineering methods. Typically, most
software projects usually follow four (4) patterns;
1. Software Specification: This entails the definition of the software requirements as
well as the identified constraints.
2. Software Development: This is the stage where the software product is developed
based on the identified specification.
3. Software Validation: The software validation stage is where the developed software
is checked against the initial requirements. The goal of this is to ensure that the software
meets the needs of the end user.
4. Software Evolution: Software evolution is the concept that a given software must be
developed in a manner that is flexible and easy to modify to reflect changing business
rules, or market requirements.
Having highlighted the software engineering methods above, it is easy to see why it is cheaper to
use software engineering methods and techniques when developing software systems. A good
software must follow a software engineering method or technique.
Without software engineering methods and techniques, developers will tend to build software
without any well-defined plan. The cost is increased in this case because they tend to spend more
time on development and consequently testing as well. With development cost accounting for
about 60% of the entire software cost, and 40% for testing costs, it is clear that the decision to
ignore software engineering methods and techniques can cost a lot more in the long run.
Question: 1.4. Software engineering is not only concerned with issues like system
heterogeneity, business and social change, trust, and security, but also with ethical issues affecting the
domain. Give some examples of ethical issues that have an impact on the software engineering domain.
Answer:
Some examples of ethical issues that have an impact on the software engineering domain are as
follows:
Confidentiality: Always respect this even if no confidentiality agreement is signed.
Competence: don't mis-represent your level of competence.
Intellectual property rights: be aware of local laws governing intellectual property rights.
Privacy: Handling, storing, sharing user data only under the circumstances and for the purposes that the user
sets.
Sustainability: Energy consumption of the software artifact, caring about energy throughout the SE process
and in the documentation.
Transparency: Transparent decision-making procedures of intelligent systems, publicly available ethics
policies by software development organizations.
Diversity: Gender, race, and age distribution of professionals in a development team.
Work ethics: Decisions on which bugs to fix and how quickly, ensuring quality of the code before release.
Business ethics: Informing users of a changed business model, including revenue models.
Accountability: Who should be held responsible for the harm caused by software?
Dependability: Decision to maintain and/or keep a software product in the market.
Common goods: Contributing to, using, promoting open source software.
Question: 1.5. Based on your own knowledge of some of the application types discussed in
Section 1.1.2, explain, with examples, why different application types require specialized software
engineering techniques to support their design and development.
Answer:
Different application types require the use of different development techniques for a number of
reasons:
Costs and frequency of change: Some systems (such as embedded systems in
consumer devices) are extremely expensive to change; others, must change frequently in
response to changing requirements (e.g. business systems). Systems which are very
expensive to change need extensive upfront analysis to ensure that the requirements are
consistent and extensive validation to ensure that the system meets its specification. This
is not cost effective for systems that change very rapidly.
The most important ‘non-functional’ requirements: Different systems have different
priorities for non-functional requirements. For example, a real-time control system in an
aircraft has safety as its principal priority; an interactive game has responsiveness and
usability as its priority. The techniques used to achieve safety are not required for
interactive gaming; the extensive UI design required for games is not needed in safety-
critical control systems.
The software lifetime and delivery schedule: Some software systems have a
relatively short lifetime (many web-based systems), others have a lifetime of tens of
years (large command and control systems). Some systems have to be delivered quickly
if they are to be useful. The techniques used to develop short-lifetime, rapid delivery
systems (e.g. use of scripting languages, prototyping, etc.) are inappropriate for long-
lifetime systems which require techniques that allow for long-term support such as
design modelling.
Question: 1.6. Explain why the fundamental software engineering principles of process,
dependability, requirements management, and reuse are relevant to all types of software system.
Answer:
A set of programming instructions which are executed to perform a specific task as per the
requirements of user is known as software. Each software has some basic principles to follow.
These principles include managements of user requirements, platform dependability,
development process definition, updating and maintenance.
These principles are same for both generic and customized software. The points to show the
reasons are as given below:
• The process of requirement gathering is required in both generic and customized software.
• A document to define the development process is required in all type of software application.
• Updating is required in each type of software. For doing so, new version of each type of
software is released.
• Maintenance is an important part of software development. It is required in each type of
application development.
• Software has some minimum requirements to execute. So, platform dependability is considered
in all software development.
Question: 1.7. Explain how electronic connectivity between various
development teams can support software engineering activities.
Answer:
The key enabler of team collaboration is communication. Without an effective communication
medium, collaborating with others on a project is almost impossible.
Electronic connectivity provides wireless communication through the use of modern-day
technologies like smartphones and computer systems.
In software development, it is crucial for team members to keep track of their individual
development process. Electronic connectivity makes this process relatively stress-free.
Availability of tools like GitHub make it easy for team members to collaborate and contribute
code to a single remote repository. Use of electronic connectivity tools not only makes the
development process a lot faster, but also improves the quality of the end-product or software.
This can allow teams in different geographic locations and still code the same project in real time
and host meetings to discuss next steps.
Question: 1.8. Noncertified individuals are still allowed to practice software engineering.
Discuss some of the possible drawbacks of this.
Answer:
It's not always true but some of the non-certified software engineers are not good enough
and they can make more loss than profit for the company.
It may result in the loss of time and money for the company.
They may damage the repute of some good individuals.
Sometimes the company has to pay double the cost to fix the problems created by them than
the actual price of hiring certified competent individuals in the field.
Question: 1.9. For each of the clauses in the ACM/IEEE Code of Ethics shown in Figure 1.4,
propose an appropriate example that illustrates that clause.
Answer:
Public: An example of acting in the public's interest is not to share any private
information that the software engineer is privy to while working on a project.
Client and Employer: A good software engineer will not let the needs of the client or the
wants of the employer harm the public.
Product: A good software engineer would not allow software to be released that they
know is faulty and will crash.
Judgement: An example of using good judgement is, if a software engineer is
approached by a client that wants them to build software that causes airplanes to crash,
the software engineer knows that they must decline since although that may be in the
client's interest, it is not in the public.
Management: For example, Software engineering managers and leaders will not
encourage employees to slack off when they are aware there is a deadline coming up.
Profession: For example, software engineers will not accept payment for inadequate
software that they have admitted will not work as intended. This would reflect badly on
other software engineers.
Colleagues: An example of following this clause would be a software engineer not
stealing their co-workers code without permission.
Self: For example, a good software engineer will keep up with changes in technology and
encourage others to do the same.
Question: 1.10. The “Drone Revolution” is currently being debated and discussed all over the
world. Drones are unmanned flying machines that are built and equipped with various kinds of software
systems that allow them to see, hear, and act. Discuss some of the societal challenges of building such
kinds of systems.
Answer:
Drones are a simple example of a technology which the current laws and rules of society simply
weren’t designed for. When scaled to their logical conclusion, we’re facing a perfect information
system; a surveillance state of unprecedented power, accessibility, and affordability. Ignoring the
issues with governments having access to this kind of information – what of neighbors?
Corporations?
Privacy becomes unenforceable, and mapping out an individual’s activities, location, or patterns
is the first step in any targeted malicious act. Imaging a robbing crew that knows where everyone
is at all times: perfect stealth, without having to post a watch? Nah, that’s small-time stuff. Let’s
go bigger. Scale it to a national level; automate the data collection, and put some hefty data
science to analyze it all in real time. Unified databases with complete activity tracking of the
entire population.
Then look at the technologies that such information enables. Try an electronic billboard that
displays individually targeted advertisements to people as they go by; ads that are tailored by
tracking their actual physical responses to viewing them: a sufficiently advanced system down
that path could effectively control an individual, not with a single advertisement, but with a
sequence of clever manipulations that lead, inevitably, to a product…. or a candidate. And what
use is democracy, if the population itself is compromised?
Drones themselves might be merely the beginning; but they are the beginning of something that
will be very difficult to put back into the bottle.
Nonetheless, progress cannot be stopped; we must engage carefully (and with regulation as
needed), in order to explore the possible positive futures, while safeguarding against the
negative ones. It’s a scary world out there, but any technology can have a positive impact if done
right; drones (and perfect information systems) included.