Introduction To Software Engineering
• Topics:
• Software
• Program vs Software
• Software characteristics
• Definition of Software Engineering, importance
• Principles of software engineering
• Difference between software engineering and software programming
• Members involved in software development
Introduction To Software Engineering
• Software:
• Software is more than just a program code.
• A program is an executable code, which serves some computational
purpose.
• Software is considered to be a collection of executable programming
code, associated libraries and documentations.
• Software, when made for a specific requirement is called software
product.
Introduction To Software Engineering
• So
• Software is instructions (computer programs) that when executed
provide desired function and performance.
• Software is data structures that enable the programs to adequately
manipulate information, documents that describe the operation and use
of the programs.
Program vs Software
Aspect Program Software
A set of instructions written to A collection of programs and related
Definition
perform a specific task. functionality.
Compositio Can be as simple as a single line of Consists of multiple programs, libraries,
n code. and data.
Developme Often created by a single individual Usually developed by multiple people or
nt or a small group. larger teams.
Specific, aimed at a singular task or Broader, encompassing various
Scope
a set of related tasks. functionalities and tasks.
Language Often written in lower-level or Typically involves high-level
Level specific languages. programming languages.
Program vs Software
Aspect Program Software
Generally smaller in size, ranging Larger in size, ranging from MBs to
Size
from KBs to MBs. GBs.
User Includes sophisticated user interfaces
Do not have a user interface.
Interface (GUI, CLI).
Compilatio Needs to be compiled or
Pre-compiled and ready for execution.
n interpreted each time it runs.
Limited features, focused on Wide range of features and
Features
specific functionalities. functionalities.
More complex, involving extensive
Complexity Simpler in design and structure.
planning and architecture.
Developme Longer development time due to
Shorter development time.
nt Time complexity.
Program vs Software
Aspect Program Software
More expensive and resource-intensive
Cost Less expensive to develop.
to develop.
Knowledge Basic programming knowledge Requires advanced knowledge and
Required might be sufficient. expertise in software design.
Dependenc Depends on compilers or Depends on the operating system for
y interpreters for execution. its execution.
Requires extensive planning and
Planning Minimal planning required.
management.
Includes comprehensive
Documenta Minimal documentation, mostly
documentation for users and
tion code comments.
developers.
Operational Performs a specific operation or Provides a platform for programs to
Role set of operations. run and manage tasks.
A script that calculates loan Microsoft Office suite, Operating
Example
• Software characteristics
• Software is a logical rather than a physical system element.
• Therefore, software has characteristics that are considerably different than
those of hardware:(Pressman, 2014)
• 1. Software is developed or engineered; it is not manufactured in the
• classical sense.
• 2. Software doesn't "wear out."
• 3. Although the industry is moving toward component-based asBCA Sem-
IIIbly,
• most software continues to be custom built.
• Software characteristics
• 1. Software is developed or engineered; it is not manufactured in the
• classical sense.
• Although some similarities exist between software development and
hardware manufacturing, the two activities are fundamentally
different.
• In both activities, high quality is achieved through good design, but
the manufacturing phase for hardware can introduce quality
problems that are nonexistent for software.
• Software characteristics
• Both activities are dependent on people, but the relationship
between people applied and work accomplished is entirely different
Both activities require the construction of a “product,” but the
approaches are different.
• Software costs are concentrated in engineering. This means that
software projects cannot be managed as if they were manufacturing
projects.
• Software characteristics
2. Software doesn't "wear out."
• Software characteristics
2. Software doesn't "wear out.“
• Above diagram depicts failure rate as a function of time for hardware.
• The relationship, often called the “bathtub curve,” indicates that hardware
exhibits relatively high failure rates early in its life (these failures are often
attributable to design or manufacturing defects); defects are corrected and
the failure rate drops to a steady-state level (hopefully, quite low) for some
period of time.
• As time passes, however, the failure rate rises again as hardware
components suffer from the cumulative effects of dust, vibration, abuse,
temperature extremes, and many other environmental maladies.
• Stated simply, the hardware begins to wear out.
• Software characteristics
• Software is not susceptible to the environmental maladies that cause
hardware to wear out.
• Another aspect of wear illustrates the difference between hardware and
software.
• When a hardware component wears out, it is replaced by a spare part.
There are no software spare parts.
• Every software failure indicates an error in design or in the process through
which design was translated into machine executable code.
• Therefore, the software maintenance tasks that accommodate requests for
change involve considerably more complexity than hardware maintenance.
• Software characteristics
3. Although the industry is moving toward component-based construction,
most software continues to be custom built.
• As an engineering discipline evolves, a collection of standard design
components is created.
• Standard screws and off-the-shelf integrated circuits are only two of
thousands of standard components that are used by mechanical and
electrical engineers as they design new systems.
• The reusable components have been created so that the engineer can
concentrate on the truly innovative elements of a design, that is, the parts
of the design that represent something new.
• Software characteristics
• In the hardware world, component reuse is a natural part of the
engineering process. In the software world, it is something that has only
begun to be achieved on a broad scale.
• A software component should be designed and implemented so that it can
be reused in many different programs.
• Modern reusable components encapsulate both data and the processing
that is applied to the data, enabling the software engineer to create new
applications from reusable parts.
• Software characteristics
• For example, today’s interactive user interfaces are built with reusable
components that enable the creation of graphics windows, pull-down
menus, and a wide variety of interaction mechanisms.
• The data structures and processing detail required to build the interface are
contained within a library of reusable components for interface
construction.
• Definition of Software Engineering
• Engineering on the other hand, is all about developing products, using well-
defined, scientific principles and methods.
• So, we can define software engineering as an engineering branch associated
with the development of software product using well-defined scientific
principles, methods and procedures.
• The outcome of software engineering is an efficient and reliable software
product.
• Definition of Software Engineering
• The IEEE [IEE93a] has developed a more comprehensive definition when it
states:
• 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).
Importance of Software Engineering
• Importance of Software Engineering
• The importance of software engineering lies in the fact that a specific piece of
Software is required in almost every industry, every business, and purpose. As
time goes on, it becomes more important for the following reasons.
• 1. Reduces Complexity
• Dealing with big Software is very complicated and challenging. Thus, to reduce
the complications of projects, software engineering has great solutions. It
simplifies complex problems and solves those issues one by one.
Importance of Software Engineering
• 2. Handling Big Projects
• Big projects need lots of patience, planning, and management, which you
never get from any company. The company will invest its resources; therefore,
it should be completed within the deadline. It is only possible if the company
uses software engineering to deal with big projects without problems.
• 3. To Minimize Software Costs
• Software engineers are paid highly as Software needs a lot of hard work and
workforce development. These are developed with the help of a large
number of codes. But programmers in software engineering project all things
and reduce the things which are not needed. As a result of the production of
Software, costs become less and more affordable for Software that does not
use this method.
Importance of Software Engineering
• 4. To Decrease Time
• If things are not made according to the procedures, it becomes a huge loss
of time. Accordingly, complex Software must run much code to get
definitive running code. So, it takes lots of time if not handled properly. And
if you follow the prescribed software engineering methods, it will save your
precious time by decreasing it.
• 5. Effectiveness
• Making standards decides the effectiveness of things. Therefore, a company
always targets the software standard to make it more effective. And
Software becomes more effective only with the help of software
engineering.
Importance of Software Engineering
• 6. Reliable Software
• The Software will be reliable if software engineering, testing, and
maintenance are given. As a software developer, you must ensure that the
Software is secure and will work for the period or subscription you have
agreed upon.
Principles of software engineering
• David Hooker [Hoo96] has proposed seven principles that focus on software
• engineering practice as a whole.
• The First Principle: The Reason It All Exists
• A software system exists for one reason: to provide value to its users. All
• decisions should be made with this in mind. Before specifying a system
requirement, before noting a piece of system functionality, before determining
the hardware platforms or development processes, ask yourself questions
such as: “Does this add real value to the system?” If the answer is “no,” don’t
do it. All other principles support this one.
Principles of software engineering
• The Second Principle: KISS (Keep It Simple, Stupid!)
• Software design is not a haphazard process. There are many factors to consider
• in any design effort. All design should be as simple as possible, but no simpler.
This facilitates having a more easily understood and easily maintained system.
This is not to say that features, even internal features, should be discarded in the
name of simplicity. Indeed, the more elegant designs are usually the more simple
ones. Simple also does not mean “quick and dirty.” In fact, it often takes a lot of
thought and work over multiple iterations to simplify. The payoff is software that
is more maintainable and less error-prone.
Principles of software engineering
• The Third Principle: Maintain the Vision
• A clear vision is essential to the success of a software project. Without one, a
• project almost unfailingly ends up being “of two [or more] minds” about
itself.
• Without conceptual integrity, a system threatens to become a patchwork of
incompatible designs, held together by the wrong kind of screws. . . .
Compromising the architectural vision of a software system weakens and
will eventually break even the well-designed systems. Having an empowered
architect who can hold the vision and enforce compliance helps ensure a
very successful software project.
Principles of software engineering
• The Fourth Principle: What You Produce, Others Will Consume
• Seldom is an industrial-strength software system constructed and used in a
• vacuum. In some way or other, someone else will use, maintain, document, or
• otherwise depend on being able to understand your system. So, always specify,
• design, and implement knowing someone else will have to understand what you are
doing. The audience for any product of software development is potentially large.
• Specify with an eye to the users. Design, keeping the implementers in mind. Code
with concern for those that must maintain and extend the system. Someone may
have to debug the code you write, and that makes them a user of your code.
Making their job easier adds value to the system.
Principles of software engineering
• The Fifth Principle: Be Open to the Future
• A system with a long lifetime has more value. In today’s computing
environments, where specifications change on a moment’s notice and
hardware platforms are obsolete just a few months old, software lifetimes are
typically measured in months instead of years. However, true “industrial-
strength” software systems must endure far longer. To do this successfully,
these systems must be ready to adapt to these and other changes. Systems
that do this successfully are those that have been designed this way from the
start. Never design yourself into a corner.
• Always ask “what if,” and prepare for all possible answers by creating systems
that solve the general problem, not just the specific one.14 This could very
possibly lead to the reuse of an entire system.
Principles of software engineering
• The Sixth Principle: Plan Ahead for Reuse
• Reuse saves time and effort.15Achieving a high level of reuse is arguably the
• hardest goal to accomplish in developing a software system. The reuse of code and
designs has been proclaimed as a major benefit of using object-oriented
technologies.
• However, the return on this investment is not automatic. To leverage the
• reuse possibilities that object-oriented [or conventional] programming provides
• requires forethought and planning. There are many techniques to realize reuse
• at every level of the system development process. . . . Planning ahead for reuse
• reduces the cost and increases the value of both the reusable components and
the systems into which they are incorporated.
Principles of software engineering
• The Seventh principle: Think!
• This last principle is probably the most overlooked. Placing clear, complete
• thought before action almost always produces better results. When you think about
something, you are more likely to do it right. You also gain knowledge about how to do
it right again. If you do think about something and still do it wrong, it becomes a
valuable experience. A side effect of thinking is learning to recognize when you don’t
know something, at which point you can research the answer.
• When clear thought has gone into a system, value comes out. Applying the first six
• principles requires intense thought, for which the potential rewards are enormous. If
every software engineer and every software team simply followed Hooker’s seven
principles, many of the difficulties we experience in building complex computer based
systems would be eliminated.
Difference between software engineering and software programming
Software Development Software Engineering
Software engineering principles are used in the
Creates software that runs on various types of
design, development, maintenance, testing, and
computers.
evaluation of computer software.
Software development is primarily an individual
Software engineering is a team effort.
effort.
Software engineering collaborates with other
Creates an entire program.
engineers to create system components.
Builds applications using ready-made tools. It Creates the tools to develop software
Does everything a software engineer does, but Software Engineering addresses problems on a
on a smaller scale. much larger scale.
Members involved in software development
• A Software Development team has a great role to give life to any software
application. A software team structure consists of various members from
various fields having specific responsibilities.
• Starting from the design and development to final delivery, in each stage the
software project depends on the team. When the software development team
will be better the outcome will be always the best.
• That’s why in a software development team proper hierarchy is followed which
helps in maintaining better relationships with each other and most important
is roles and responsibilities in a software development team are defined so the
software projects only move forward smoothly.
Members involved in software development
• 1. Product Owner
• Product owner refers to an individual who has the knowledge of how a terminal
product or the outcome should look like.
• They have an enormous idea about the project and its users. Moreover, they
understand the client’s requirements, therefore they are in the predominant
position to lead the development towards an adequate terminal product.
• 2. Project Manager
• The project manager is accountable for knowing the “who, what, where, when,
and why of the software plan.
• A Project Manager in a software development team often deals with various
crucial roles and responsibilities including:
Members involved in software development
• Making a software plan.
• Developing a schedule.
• Planning a budget.
• Executing it in a proper manner.
• Lastly, Develop the project.
• 3. Team Lead
• The team lead takes measures as a mentor to help the whole team in keeping the
task-focused, to deliver work on time, and meeting the project aim. Also, they
have to conduct the team for a better outcome. The leader should have the
leadership qualities for maintaining good communication between the
development team and clients. Also, they are liable for conflicts, prevention, and
resolution. Team lead uses the same tool as a developer or designer use, with
some extra required tools like Toggl Plan, Slack, MS Teams, Minute, etc.
Members involved in software development
• 4. Software Developers
• They are responsible for utilizing the technical requirements from the technical
leads to form cost and deadline estimates.
• They write code and evolve the software products. Developers are the actual
members who write code to make the software function.
• The team members have to communicate the technical requirements to the
developers to reduce project risk, give ideas, and achieve great success. Some of
the tools which are used by software developers (backend) are Eclipse, VS Code,
Postman, Jenkins, Github, Stack Overflow, Jira, Chrome DevTools, Docker, and
other programming frameworks and tools as well.
Members involved in software development
• 5. Testers
• Testers are in-charge of ensuring the software solution meets the demands and
complies with the qualities level. They need to understand feature requirements.
Also, they form and execute test cases to detect bugs or deficiencies. Some of
the tools which are used by software testers are Selenium, TestingWhiz,
TestComplete, Katalon Studio, Postman, Jira, Apache JMeter, etc.
• 6. UI Designer
• The utmost duty of the UI designer is to prepare or design the user affiliate. They
transfer content, graphics, style affix with a client. They prepare templates using
prototyping tools. With a UX designer and front-end developers, they work on
providing solutions to meet expectations and needs. Some tools which are used
by UI Designer are Adobe XD, Axure, Figma, Sketch, Visual Studio Code, etc.
Members involved in software development
• 7. UX Designer
• UX designer means user experience. It is characterized by a less ‘digital’
perspective to a user affix. They have to assure that end-user has the best
experience while working on the application. They have to be in contact with the
continuous human-computer interaction method.
• 8. Business Analyst
• A business analyst is accountable for comprehending business needs into
requirements and making sure they are documented perfectly before a
compound is formed and implemented. They describe, analyze and control
technology and business needs throughout the cycle. They accompany the
consumer so that they don’t have any doubt about the project. They make
decisions and carry out meetings of the project’s methodology.
Members involved in software development
• 9. Software Architect:
• A software architect is a person liable for describing the complete architecture
system of a project. They do high-level designing based on non-frictional needs
and dictate coding standards with tools and platforms. They define the technical
and functional architecture of the entire system. They guide developers to make
critical components of the system. They give ideas about the best alternatives
given the engineering and business aspect.
Members involved in software development
• 10. Quality Assurance (QA) Engineer
• A QA person is liable for making equipment that allows automating processes that
identify and verify the software quality. They shorten stability verification time.
They check if the work on new features didn’t cause errors in the already existing
and functioning system.