1|Page
Introduction to Software Engineering
Software
➢ The Institute of Electrical and Electronic Engineers (IEEE) defines software as a collection
of computer programs, procedures, rules and associated documentation and data.
➢ Software does not wear out like shoes and cloth do after using sometimes; can be used as
long as needed.
➢ Software is not a manufactured product but developed product.
➢ Software controls, integrates and manages the hardware components of a computer system.
➢ It instructs the computer what needs to be done to perform a specific task and how it is to be
done.
➢ For example: Software instructs the hardware how to print a document, take input from the
user, and display the output.
Software Characteristics
1. Efficiency : Produced in expected time and within limited resources
2. Reliability : Desired Functionalities under every condition
3. Usability : Simplicity of software in terms of user
4. Flexibility : Can adjust with changes
5. Portability : Can transfer from one platform to another very easily
6. Reusability : Can be able to use existing code
7. Maintainability : Can be able to fix errors and bugs
8. Interoperability : Can be able to interact with other systems properly
9. Correctness : The program produces the correct output
Building the Software Products:
Similar to construction of an apartment
1. Software Company notice that there is a market that product
2. Company then initiates the project
3. A project team is formed
4. A software project manager is appointed to make the project plan
5. Business Analyst create a list of product features
6. Software Designer prepares the architecture of the project
7. Software developers write the program or code
8. After testing, it is released in the market
9. Software manager oversees all these activities to make sure the things are going as the plan
2|Page
Types of Software Products
Generic Products
✓ Software Products developed by company
✓ Product developers own the specification.
✓ Example: Microsoft Word, Microsoft power point, Microsoft Excel
Customize Products
✓ A software product developed by basing on customers’ demand and specification
✓ Customers own the specification and it also controlled by the customer.
✓ Examples – embedded control systems, air traffic control software, traffic monitoring
systems.
Software Failure
1. Increasing System Complexity
➢ In the new software engineering, more complex tools and technologies are being
used.
➢ It is using distributed database.
➢ Software engineering architecture becomes more complex to provide users quicker
and efficient services.
➢ To handle all this complexity, the system can sometime be failed.
2. Failure to use software engineering method
➢ There are many SDLC Models.
➢ Some are for small project and some are for large project.
➢ Some are incremental and some are iterative and some acts as both incremental and
iterative.
➢ If we don’t use a proper and suitable model, the system may have a risk of failure.
Software Product& Process
1. Software Product
➢ The final software that is delivered to the customer is called the software product.
➢ It is the outcome of the entire software development process.
➢ It may include source code, data, user guides, reference manuals, installation manuals,
specification documentation, other documentation, etc.
2. Software Process
Four fundamental activities are common to all software processes.
I. Software specification, where customers and engineers define the software that is to
be produced and the constraints on its operation.
II. Software development, where the software is designed and programmed.
III. Software validation, where the software is checked to ensure that it is what the
customer requires.
IV. Software evolution, where the software is modified to reflect changing customer
and market requirements.
3|Page
Software Engineering
➢ Discipline that is concerned with all aspects from system specification through to
maintaining the system after it has gone into use.
➢ Software engineering is not just programming.
➢ Engineering always includes two things: designing a product in detail and a methodical
approach to carrying out the design
➢ Software engineering is not only limited to creating new products.
➢ Existing software products need maintenance.
➢ Software maintenance is also a part of software engineering.
Why Software Engineering?
Reduction of Development Costs:
Software engineering helps reduce the cost of development by reusing the existing code, using better
tools, and following sound software engineering practices.
Reduction of Development Time:
There are some software products and services available in the market that provide the needed
functionality immediately; thus, the project team can avoid writing fresh source codes altogether to
achieve the same functionality. The end result is that the productivity of the project team continues
to improve, which allows the faster development of software products.
Increasing the Quality:
By using better software engineering methodologies and software engineering tools, it is possible to
build better- quality software products. Making the quality assurance processes an intrinsic part of
the software development processes ensures the development of quality software products.
Challenges in Software Engineering
✓ Delivering high-quality software on time and on budget to customers.
✓ The accurate estimation of project cost, effort and schedule
✓ Risk management
✓ Software quality needs to be properly planned to enable the project to deliver a quality
product.
✓ Difficult to choose Software Engineering Tools, Techniques and Methodologies
✓ Dealing with changes in requirement
✓ The key challenges facing software engineering is - coping with increasing diversity,
demands for reduced delivery times and developing trustworthy software.
4|Page
Software Application Types
1. Stand-alone applications: These are application systems that run on a local computer, such
as a PC.
2. Interactive transaction-based applications: Web applications such as e-commerce
applications.
3. Embedded control systems: These are software control systems that control and manage
hardware devices.
4. Batch processing systems: These are business systems that are designed to process data in
large batches.
5. Entertainment systems: These are systems that are primarily for personal use and which
are intended to entertain the user.
6. Systems for modeling and simulation: These are systems that are developed by scientists
and engineers to model physical processes or situations.
7. Data collection systems: These are systems that collect data from their environment using
a set of sensors and send that data to other systems for processing.
8. Systems of systems: These are systems that are composed of a number of other software
systems.
Software Engineering vs Computer Science:
➢ The primary difference is that computer science was originally a sub-branch of
mathematics.
➢ Computer science deals with the basic structure of a computer and is more theoretical.
➢ Hence, it is more malleable in terms of specialization, with the emphasis on math and
science.
➢ Software engineering is a field concerned with the application of engineering processes to
the creation, maintenance, and design of software for a variety of different purposes.
➢ A software engineer designs customized applications per the requirements of an
organization.
5|Page
Seven Principles of Software Engineering:
Principle - 1: Rigor and formality:
✓ Rigor helps to produce more reliable products, to control cost, to increase confidence in
products.
✓ Formality is rigor at the highest degree. It is software process driven and evaluated by
mathematical laws.
Principle - 2: Separation of concerns:
It tackles with the complexity of large systems by separating different issues to concentrate on one
at a time (Divide & Conquer)
Principle - 3: Modularity and decomposition:
A complex system may be divided into simpler pieces called modules
Principle - 4: Abstraction
Abstraction is a mechanism to' hide irrelevant details and represent only the essential features so that
one can focus on important things at a time; It allows managing complex systems by concentrating
on the essential features only.
Principle - 5: Anticipation of change
✓ Anticipation of change helps to
✓ create a software infrastructure that absorbs changes easily
✓ enhance reusability of components
Principle - 6: Generality
✓ Generality leads to
✓ increased reusability
✓ increased reliability
✓ faster development
✓ reduced cost
Principle – 7: Incremental Development:
✓ Incremental development means development in a stepwise fashion.
✓ According to this principle a subset of the system is delivered early to get the feedback from
the users in the early stages of the development
6|Page
Software Engineering Ethics:
Issues of professional responsibility:
o Confidentiality: Engineers should normally respect the confidentiality of their employers
or clients irrespective of whether or not a formal confidentiality agreement has been signed.
o Competence: Engineers should not misrepresent their level of competence. They should not
knowingly accept work which is out with their competence.
o Intellectual property rights: Engineers should be aware of local laws governing the use of
intellectual property such as patents, copyright, etc. They should be careful to ensure that
the intellectual property of employers and clients is protected.
o Computer misuse: Software engineers should not use their technical skills to misuse other
people’s computers. Computer misuse ranges from relatively trivial (game playing on an
employer’s machine, say) to extremely serious (dissemination of viruses).
Principles of the Software Engineering Code of Ethics and Professional Practice:
In 1999, the Institute for Electrical and Electronics Engineers, Inc. (IEEE) and the Association for
Computing Machinery, Inc (ACM) published a code of eight Principles.
Principle 1: PUBLIC
Software engineers shall act consistently with the public interest.
▪ Approve software only if they have a well-founded belief that it is safe, meets
specifications, passes appropriate tests, and does not diminish quality of life, diminish
privacy or harm the environment. The ultimate effect of the work should be to the public
good.
▪ Disclose to appropriate persons or authorities any actual or potential danger to the user,
the public, or the environment, that they reasonably believe to be associated with software
or related documents.
▪ Cooperate in efforts to address matters of grave public concern caused by software, its
installation, maintenance, support or documentation.
▪ Be fair and avoid deception in all statements, particularly public ones, concerning software
or related documents, methods and tools.
▪ Be encouraged to volunteer professional skills to good causes and to contribute to public
education concerning the discipline
7|Page
Principle 2: CLIENT AND EMPLOYER
Software engineers shall act in a manner that is in the best interests of their client and employer,
consistent with the public interest.
▪ Provide service in their areas of competence, being honest and forthright about any
limitations of their experience and education.
▪ Use the property of a client or employer only in ways properly authorized, and with the
client's or employer's knowledge and consent.
▪ Keep private any confidential information gained in their professional work, where such
confidentiality is consistent with the public interest and consistent with the law.
▪ Identify, document, collect evidence and report to the client or the employer promptly if,
in their opinion, a project is likely to fail, to prove too expensive, to violate intellectual
property law, or otherwise to be problematic.
▪ Identify, document, and report significant issues of social concern, of which they are
aware, in software or related documents, to the employer or the client.
▪ Promote no interest adverse to their employer or client, unless a higher ethical concern is
being compromised; in that case, inform the employer or another appropriate authority of
the ethical concern.
Principle 3: PRODUCT
Software engineers shall ensure that their products and related modifications meet the highest
professional standards possible.
▪ Strive for high quality, acceptable cost, and a reasonable schedule
▪ Ensure that they are qualified for any project on which they work or propose to work, by
an appropriate combination of education, training, and experience.
▪ Ensure that an appropriate method is used for any project on which they work or propose
to work.
▪ Work to follow professional standards, when available, that are most appropriate for the
task at hand, departing from these only when ethically or technically justified.
▪ Ensure that specifications for software on which they work have been well documented,
satisfy the users' requirements and have the appropriate approvals.
▪ Ensure realistic quantitative estimates of cost, scheduling, personnel, quality and outcomes
▪ Ensure adequate testing, debugging, and review of software and related documents on
which they work.
▪ Ensure adequate documentation, including significant problems discovered and solutions
adopted, for any project on which they work.
▪ Work to develop software and related documents that respect the privacy of those who will
be affected by that software.
▪ Treat all forms of software maintenance with the same professionalism as new
development
8|Page
Principle 4: JUDGMENT
Software engineers shall maintain integrity and independence in their professional judgment.
▪ Temper all technical judgments by the need to support and maintain human values.
▪ Only endorse documents either prepared under their supervision or within their areas of
competence and with which they are in agreement.
▪ Not engage in deceptive financial practices such as bribery, double billing, or other
improper financial practices.
▪ Disclose to all concerned parties those conflicts of interest that cannot reasonably be
avoided or escaped.
Principle 5: MANAGEMENT
Software engineering managers and leaders shall subscribe to and promote an ethical approach to
the management of software development and maintenance.
▪ Ensure good management for any project on which they work, including effective
procedures for promotion of quality and reduction of risk.
▪ Ensure that software engineers know the employer's policies and procedures for protecting
passwords, files and information that is confidential to the employer or confidential to
others.
▪ Ensure realistic quantitative estimates of cost, scheduling, personnel, quality and outcomes
on any project on which they work or propose to work, and provide an uncertainty
assessment of these estimates.
▪ Attract potential software engineers only by full and accurate description of the conditions
of employment.
▪ Offer fair and just remuneration.
▪ Not unjustly prevent someone from taking a position for which that person is suitably
qualified.
▪ Ensure that there is a fair agreement concerning ownership of any software, processes,
research, writing, or other intellectual property to which a software engineer has
contributed.
▪ Not ask a software engineer to do anything inconsistent with this Code
9|Page
Principle 6: PROFESSION
Software engineers shall advance the integrity and reputation of the profession consistent with
the public interest. In particular, software engineers shall, as appropriate:
▪ Extend software engineering knowledge by appropriate participation in professional
organizations, meetings and publications.
▪ Support, as members of a profession, other software engineers striving to follow this
Code.
▪ Take responsibility for detecting, correcting, and reporting errors in software and
associated documents on which they work.
▪ Ensure that clients, employers, and supervisors know of the software engineer's
commitment to this Code of ethics, and the subsequent ramifications of such
commitment.
▪ Report significant violations of this Code to appropriate authorities when it is clear that
consultation with people involved in these significant violations is impossible, counter-
productive or dangerous.
Principle 7: COLLEAGUES
Software engineers shall be fair to and supportive of their colleagues. In particular, software
engineers shall, as appropriate:
▪ Encourage colleagues to adhere to this Code.
▪ Assist colleagues in professional development.
▪ Credit fully the work of others and refrain from taking undue credit.
▪ Give a fair hearing to the opinions, concerns, or complaints of a colleague.
▪ Assist colleagues in being fully aware of current standard work practices including
policies and procedures for protecting passwords, files and other confidential
information, and security measures in general.
Principle 8: SELF
Software engineers shall participate in lifelong learning regarding the practice of their profession
and shall promote an ethical approach to the practice of the profession. In particular, software
engineers shall continually endeavor to:
▪ Improve their ability to create safe, reliable, and useful quality software at reasonable
cost and within a reasonable time.
▪ Improve their ability to produce accurate, informative, and well-written documentation.
▪ Improve their knowledge of relevant standards and the law governing the software and
related documents on which they work.
▪ Improve their knowledge of this Code, its interpretation, and its application to their
work.
▪ Not give unfair treatment to anyone because of any irrelevant prejudge
10 | P a g e
Ethical Dilemmas:
✓ Disagreement in principle with the policies of senior management.
✓ Your employer acts in an unethical way and releases a safety-critical system
without finishing the testing of the system.
✓ Participation in the development of military weapons systems or nuclear systems.