Lecture 1
Lecture 1
Lecture 1
Software Engineering
JAN-APRIL 2024
1
2
KEY PRINCIPLES OF SOFTWARE ENGINEERING
3
5.Maintenance: Regularly updating and improving the software to fix
bugs, add new features, and address security vulnerabilities.
6.Testing: Verifying that the software meets its requirements and is free
of bugs.
7.Design Patterns: Solving recurring problems in software design by
providing templates for solving them.
8.Agile methodologies: Using iterative and incremental development
processes that focus on customer satisfaction, rapid delivery, and
flexibility.
9.Continuous Integration & Deployment: Continuously integrating
the code changes and deploying them into the production
environment.
4
OBJECTIVES OF SOFTWARE ENGINEERING
engineering.
SOFTWARE ENGINEERING
10
Software engineering is an engineering branch associated with
development of software product using well-defined scientific principles,
methods and procedures. The outcome of software engineering is an
efficient and reliable software product.
Software engineering involves two things
• The product.
• The process.
The product
• This is the software to be engineered.
The process
• Provides a framework for engineering technology 11
S O F T WA R E E V O L U T I O N
12
SOFTWARE PARADIGMS
• Software paradigms refer to the methods and steps, which are taken while
designing the software. There are many methods proposed and are implemented.
But, we need to see where in the software engineering concept, these paradigms
stand. These can be combined into various categories, though each of them is
contained in one another:
13
Programming paradigm is a subset of Software design paradigm
which is further a subset of Software development paradigm.
Software Development Paradigm This paradigm is known as
software engineering paradigms; where all the engineering
concepts pertaining to the development of software are applied.
It includes various researches and requirement gathering which
helps the software product to build. It consists of;
Requirement gathering
• Software Designing
• Programming
14
The features that good software engineers should possess are as follows:
Exposure to systematic methods, i.e., familiarity with software engineering
principles.
Good technical knowledge of the project range (Domain knowledge).
Good programming abilities.
Good communication skills. These skills comprise of oral, written, and
interpersonal skills.
High motivation.
Sound knowledge of fundamentals of computer science.
Intelligence.
Ability to work in a team
Discipline, etc. 15
ESSENTIAL ATTRIBUTES OF GOOD SOFTWARE
• Maintainability
Software should be written in such a way that it can evolve to meet the
changing needs of customers. This is a critical attribute because software
change is an inevitable requirement of a changing business environment
• Dependability and Security
- Software dependability includes a range of characteristics including
reliability, security and safety. Dependable software should not cause
physical or economic damage in the event of system failure. Malicious
users should not be able to access or damage the system.
16
• Efficiency
- Software should not make wasteful use of system resources such as
memory and processor cycles. Efficiency therefore includes
responsiveness, processing time, good memory utilization, etc.
• Acceptability
- Software must be acceptable to the type of users for which it is
designed. This means that it must be understandable, usable and
compatible with other systems that they us.
17
Portability: The capability to be adapted for different specified environments
without applying actions or means other than those provided for this purpose in
the product.
Efficiency: The capability to provide appropriate performance relative to the
amount of resources used.
Functionality: The capability to provide functions that meet stated and implied
needs when the software is used.
Usability: The capability to be understood, learned, and used.
Reliability: The capability to provide failure-free service.
18
THE PRODUCT
1. System Software:
System Software is necessary to manage computer resources and support the execution of
application programs. Software like operating systems, compilers, editors and drivers, etc.,
come under this category. A computer cannot function without the presence of these.
Operating systems are needed to link the machine-dependent needs of a program with the
capabilities of the machine on which it runs. Compilers translate programs from high-level
language to machine language.
2. Application Software:
Application software is designed to fulfill the user’s requirement by interacting with the user
directly. It could be classified into two major categories:- generic or customized. Generic
Software is software that is open to all and behaves the same for all of its users. Its function is
limited and not customized as per the user’s changing requirements. However, on the other
hand, customized software is the software products designed per the client’s requirement, 20
and
are not available for all.
3. Networking and Web Applications Software:
Networking Software provides the required support necessary for computers
to interact with each other and with data storage facilities. Networking
software is also used when software is running on a network of computers
(such as the World Wide Web). It includes all network management
software, server software, security and encryption software, and software to
develop web-based applications like HTML, PHP, XML, etc.
4. Embedded Software:
This type of software is embedded into the hardware normally in the
Read-Only Memory (ROM) as a part of a large system and is used to
support certain functionality under the control conditions. Examples are
software used in instrumentation and control applications like washing
machines, satellites, microwaves 21
5. Reservation Software:
A Reservation system is primarily used to store and retrieve information
and perform transactions related to air travel, car rental, hotels, or other
activities. They also provide access to bus and railway reservations,
although these are not always integrated with the main system. These are
also used to relay computerized information for users in the hotel industry,
making a reservation and ensuring that the hotel is not overbooked.
6. Business Software:
This category of software is used to support business applications and is
the most widely used category of software. Examples are software for
inventory management, accounts, banking, hospitals, schools, stock
markets, etc. 22
7. Entertainment Software:
Education and Entertainment software provides a powerful tool for
educational agencies, especially those that deal with educating
young children. There is a wide range of entertainment software
such as computer games, educational games, translation software,
mapping software, etc.
8. Artificial Intelligence Software:
Software like expert systems, decision support systems, pattern
recognition software, artificial neural networks, etc. come under this
category. They involve complex problems which are not affected by
complex computations using non-numerical algorithms. 23
9. Scientific Software:
Scientific and engineering software satisfies the needs of a
scientific or engineering user to perform enterprise-specific tasks.
Such software is written for specific applications using principles,
techniques, and formulae particular to that field. Examples are
software like MATLAB, AUTOCAD, PSPICE, ORCAD, etc.
10. Utility Software:
The programs coming under this category perform specific tasks
and are different from other software in terms of size, cost, and
complexity. Examples are antivirus software, voice recognition
software, compression programs, etc. 24
11. Document Management Software:
Document Management Software is used to track,
manage, and store documents to reduce the paperwork.
Such systems are capable of keeping a record of the
various versions created and modified by different
users (history tracking). They commonly provide
storage, versioning, metadata, security, as well as
indexing and retrieval capabilities.
25
THE IMPORTANCE OF SOFTWARE
ENGINEERING IS AS FOLLOWS:
4. Handling big projects: Big projects are not done in a couple of days, and they
need lots of patience, planning, and management. And to invest six and seven
months of any company, it requires heaps of planning, direction, testing, and
maintenance. No one can say that he has given four months of a company to the
task, and the project is still in its first stage. Because the company has provided
many resources to the plan and it should be completed. So to handle a big project
without any problem, the company has to go for a software engineering method.
27
5. Reliable software: Software should be secure, means if you
have delivered the software, then it should work for at least its
given time or subscription. And if any bugs come in the
software, the company is responsible for solving all these bugs.
Because in software engineering, testing and maintenance are
given, so there is no worry of its reliability.
6. Effectiveness: Effectiveness comes if anything has made
according to the standards. Software standards are the big
target of companies to make it more effective. So Software
becomes more effective in the act with the help of software
engineering.
28
DEFINITION OF SDLC
• SDLC or the Software Development Life Cycle is a
process that produces software with the highest
quality and lowest cost in the shortest time. SDLC
includes a detailed plan for how to develop, alter,
maintain, and replace a software system.
• SDLC involves several distinct stages, including
planning, design, building, testing, and deployment.
Popular SDLC models include the waterfall model,
spiral model, and Agile model
Phase 1: Requirement collection and analysis
Phase 2: Feasibility study:
Phase 3: Design:
Phase 4: Coding:
Phase 5: Testing:
Phase 6: Installation/Deployment:
Phase 7: Maintenance:
SDLC PHASES
PHASE 1: REQUIREMENT COLLECTION AND
ANALYSIS
In this third phase, the system and software design documents are
prepared as per the requirement specification document(SRS). This helps
define overall system architecture.
This design phase serves as input for the next phase of the model.
There are two kinds of design documents developed in this phase:
High-Level Design (HLD)
• Brief description and name of each module
• An outline about the functionality of every module
• Interface relationship and dependencies between modules
• Database tables identified along with their key elements
• Complete architecture diagrams along with technology details
Low-Level Design(LLD)
• Functional logic of the modules
• Database tables, which include type and size
• Complete detail of the interface
• Addresses all types of dependency issues
• Listing of error messages
• Complete input and outputs for every module
PHASE 4: CODING:
Once the system design phase is over, the next phase is coding.
In this phase, developers start build the entire system by
writing code using the chosen programming language. In the
coding phase, tasks are divided into units or modules and
assigned to the various developers. It is the longest phase of the
Software Development Life Cycle process.
Every technology advancement is a blessing for the IT industry. But at the same time, technology
evolving at a phenomenal rate leads to an added pressure for software development professionals to
leverage these upcoming technology trends in software product development to gain a cutting edge
over competitors and stand out in the market.
Software projects are generally conceptual and are aimed at designing and developing software
products that meet varied customer demands.
To develop even the simplest application or product, developers must clearly understand the underlying
40
business concept and bring in the required features to satisfy the growing customer demands.
c) Time limitations
Software development is a time game. Developers work under pressured environments and strive to
complete project requirements within strict and scanty timelines.
This is especially a challenge when working with international clients in multiple time zones. Time
constraints often bring down the efficiencies of development teams and lead to mediocre quality
software products in the end.
d) Limited infrastructure/resources
Another challenge faced by the majority of software development companies is a lack of resources or
IT infrastructure to execute projects effectively. This could mean a lack of high-performance software
development tools, powerful computing platforms, inefficient data storage architectures or improper
networks and connectivity. Such hindrances bring down the productivity and performance of software
development teams and impact the overall result. 41
e) Conflicts with software testing teams
In a classic software development project, interpersonal conflicts occur inevitably
between software development and testing teams. Several factors contribute to such
conflicts like working under high performance pressure, different mindsets, difference
in job roles and the very opposite nature of development and testing. If not controlled
and managed effectively, these conflicts could hamper the overall project adversely.
46
9. Poor Communication Between Team Members
Most of the time, a project team is made up of different people with various
backgrounds. This can cause problems if there are personality clashes, lack
of motivation, or any other issue that might make team members not see
eye-to-eye.
10. Incomplete Specifications or Lack of Documentation
In order to have a successful software project, it needs to be well-
documented. From the very beginning, all members of the team need to
know what their responsibilities are and what they should do to accomplish
their goals.
47
11. Software Quality Issues
As there are several different modules involved in most software projects,
they might need to communicate with each other or share data. This is where
issues arise. Some methods might not be very efficient and thus slow down
the application, while others might leave security holes that can compromise
your software’s integrity.
12. Underestimating Maintenance
Even after release, software needs to be maintained and updated. There is a
significant difference between the amount of work needed before launch and
after, so this should always be considered and taken into account when
creating new features or planning updates. When planning your project, try
to estimate how much time post-launch maintenance will take.
48
BEST PRACTICES FOR SOFTWARE PROJECT SUCCESS
49
1. Define Your Requirements
Before starting any development process, make sure you know what your
client or manager wants. There should be no room for interpretation - only
the materials given to you by the other party should be used as a reference. If
there are multiple people involved in this decision-making process, make
them agree on every point before starting the work.
2. Plan Ahead
When creating a software project, it is important to make sure that every step
has been taken into account and nothing is left for last-minute planning.
Even small things like images, graphs, or animations should be considered as
they might not only make the application look good but also contribute
towards its efficiency.
50
3. Communicate With Your Team
No matter how skilled each member of your team might be, communication
between them is vital for the success of your project. Make sure that everyone
involved in this project has access to all documentation to work together to
achieve common goals. Communication channels should always be open, so
no one feels left out or undervalued.
4. Keep Track of Progress
Make sure to keep track of what needs to be done and who is doing it so no
work gets lost or overlooked. Even a seemingly minute detail might have a
significant impact on the overall performance of your software project. To
avoid wasting time, document everything that you do and regularly check
with team members to ensure everyone is on the same page.
51
Watch Out for Hidden Costs
Do not assume that every feature is included in the price you
agreed on or you end up falling into the traps of hidden costs.
If you want to make sure that no additional charges come out
of nowhere, create a list of features that your software should
include and discuss it with your team before beginning work
52