Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 52

ACS 302A/MIS 321A

Software Engineering
JAN-APRIL 2024
1

Keith Mwesigwa |kmwesigwa@daystar.ac.ke |0713681327


Software Engineering is the process of designing,
developing, testing, and maintaining software. It is a
systematic and disciplined approach to software development
that aims to create high-quality, reliable, and maintainable
software.

2
KEY PRINCIPLES OF SOFTWARE ENGINEERING

1.Modularity: Breaking the software into smaller, reusable components that


can be developed and tested independently.
2.Abstraction: Hiding the implementation details of a component and
exposing only the necessary functionality to other parts of the software.
3.Encapsulation: Wrapping up the data and functions of an object into a
single unit, and protecting the internal state of an object from external
modifications.
4.Reusability: Creating components that can be used in multiple projects,
which can save time and resources.

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

1.Maintainability: It should be feasible for the software to evolve to meet


changing requirements.
2.Efficiency: The software should not make wasteful use of computing
devices such as memory, processor cycles, etc.
3.Correctness: A software product is correct if the different requirements
specified in the SRS Document have been correctly implemented.
4.Reusability: A software product has good reusability if the different
modules of the product can easily be reused to develop new products.
5.Testability: Here software facilitates both the establishment of test criteria
and the evaluation of the software with respect to those criteria.
5
6.Reliability: It is an attribute of software quality. The extent to
which a program can be expected to perform its desired
function, over an arbitrary time period.
7.Portability: In this case, the software can be transferred from
one computer system or environment to another.
8.Adaptability: In this case, the software allows differing
system constraints and the user needs to be satisfied by making
changes to the software.
9.Interoperability: Capability of 2 or more functional units to
process data cooperatively.
6
ADVANTAGES OF SOFTWARE ENGINEERING

1.Improved Quality: By following established software engineering principles


and techniques, the software can be developed with fewer bugs and higher
reliability.
2.Increased Productivity: Using modern tools and methodologies can
streamline the development process, allowing developers to be more
productive and complete projects faster.
3.Better Maintainability: Software that is designed and developed using sound
software engineering practices is easier to maintain and update over time.
4.Reduced Costs: By identifying and addressing potential problems early in the
development process, software engineering can help to reduce the cost of
fixing bugs and adding new features later on. 7
5.Increased Customer Satisfaction: By involving customers in the
development process and developing software that meets their needs,
software engineering can help to increase customer satisfaction.
6.Better Team Collaboration: By using Agile methodologies and
continuous integration, software engineering allows for better
collaboration among development teams.
7.Better Scalability: By designing software with scalability in mind,
software engineering can help to ensure that software can handle an
increasing number of users and transactions.
8.Better Security: By following the
Software Development Life Cycle (SDLC) and performing security
testing, software engineering can help to prevent security breaches and
8
protect sensitive data.
PA R A M E T E R S D E F I N I N G S O F T WA R E P R O J E C T

The software should be produced at a reasonable cost, in a reasonable time, and


should be of good quality. These three parameters often drive and define a software
project.
1.Cost: As the main cost of producing software is the manpower employed, the cost of
developing software is generally measured in terms of person-months of effort spent
in development. The productivity in the software industry for writing fresh code
mostly ranges from a few hundred to about 1000 + LOC per person per month.
2.Schedule: The schedule is another important factor in many projects. Business
trends are dictating that the time to market a product should be reduced; that is, the
cycle time from concept to delivery should be small. This means that software needs
to be developed faster and within the specified time.
3.Quality: Quality is one of the main mantras, and business strategies are designed
around it. Developing high-quality software is another fundamental goal of software
9

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

The process of developing a software product using software


engineering principles and methods is referred to as Software
Evolution.
This includes the initial development of software and its maintenance
and updates, till desired software product is developed, which satisfies
the expected requirements.

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

Software has become the key element in the evolution of


computer-based systems and products
Software Characteristics
1. Software is developed or engineered, it is not manufactured in
the classical sense
2. Software doesn't "wear out, it becomes obsolete.
3. Although the industry is moving toward component-based
assembly, most software continues to be custom built.
19
TYPES OF SOFTWARE

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:

1. Reduces complexity: Big software is always complicated and challenging to


progress. Software engineering has a great solution to reduce the complication of any
project. Software engineering divides big problems into various small issues. And then
start solving each small issue one by one. All these small problems are solved
independently to each other.

2. To minimize software cost: Software needs a lot of hardwork and software


engineers are highly paid experts. A lot of manpower is required to develop software
with a large number of codes. But in software engineering, programmers project
everything and decrease all those things that are not needed. In turn, the cost for
software productions becomes less as compared to any software that does not use
software engineering method.
26
3. To decrease time: Anything that is not made according to the project always
wastes time. And if you are making great software, then you may need to run
many codes to get the definitive running code. This is a very time-consuming
procedure, and if it is not well handled, then this can take a lot of time. So if you
are making your software according to the software engineering method, then it
will decrease a lot of time.

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

The requirement is the first stage in the SDLC process. It is conducted


by the senior team members with inputs from all the stakeholders and
domain experts in the industry. Planning for the quality assurance
requirements and recognition of the risks involved is also done at this
stage.
This stage gives a clearer picture of the scope of the entire project and
the anticipated issues, opportunities, and directives which triggered
the project.
Requirements Gathering stage need teams to get detailed and precise
requirements. This helps companies to finalize the necessary timeline
to finish the work of that system.
PHASE 2: FEASIBILITY STUDY:
Once the requirement analysis phase is completed the next step is to define and
document software needs. This process conducted with the help of 'Software
Requirement Specification' document also known as 'SRS' document. It includes
everything which should be designed and developed during the project life cycle.
There are mainly five types of feasibilities checks:
• Economic: Can we complete the project within the budget or not?
• Legal: Can we handle this project as cyber law and other regulatory
framework/compliances.
• Operation feasibility: Can we create operations which is expected by the client?
• Technical: Need to check whether the current computer system can support the
software
• Schedule: Decide that the project can be completed within the given schedule or not.
PHASE 3: DESIGN:

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.

In this phase, Developer needs to follow certain predefined


coding guidelines. They also need to use programming tools
like compiler, interpreters, debugger to generate and
implement the code.
PHASE 5: TESTING:
Once the software is complete, and it is deployed in the
testing environment. The testing team starts testing the
functionality of the entire system. This is done to verify
that the entire application works according to the
customer requirement.
During this phase, QA(Quality Assurance) and testing
team may find some bugs/defects which they
communicate to developers. The development team fixes
the bug and send back to QA for a re-test. This process
continues until the software is bug-free, stable, and
working according to the business needs of that system.
PHASE 6: INSTALLATION/DEPLOYMENT:

Once the software testing phase is over


and no bugs or errors left in the system
then the final deployment process starts.
Based on the feedback given by the project
manager, the final software is released
and checked for deployment issues if
any.
PHASE 7: MAINTENANCE:

Once the system is deployed, and customers start using the


developed system, following 3 activities occur
• Bug fixing - bugs are reported because of some scenarios which
are not tested at all
• Upgrade - Upgrading the application to the newer versions of
the Software
• Enhancement - Adding some new features into the existing
software
The main focus of this SDLC phase is to ensure that needs
continue to be met and that the system continues to perform as
MAJOR CHALLENGES IN SOFTWARE
DEVELOPMENT
a) Rapid technological advancement

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.

b) Increasing customer demands

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.

To succeed in a dynamic software industry that is driven by changing technology


trends and challenged by multiple internal and external factors, your development
teams must have a clear understanding of the problems that lie ahead of them and a
roadmap to overcome them.
42
WHY S OFTWA R E D EV ELOPMENT PROJECTS FAIL
1. Unclear Software Requirements
Clear requirements are essential for any software development process; without them,
there is a high risk that some problems might arise down the road. If you don’t know what
to build or how to build it, this is bound to cause serious issues - in most cases, the issues
won’t become apparent until you are beyond the development stage

2. Lack of User Involvement


Another main reason why software projects fail is that they aren’t built around users’
needs and requirements. It’s not enough to design something - your design won’t be
successful if you don’t take end-users into consideration, as they will be the ones using it
and therefore coming up with requirements and feedback
43
3. Lack of Communication Between Clients & Developers
The relationship between the client and the development teams is crucial as it
determines how smoothly the project goes. Lack of communication between the
different parties involved in a project brings about its own issues. Most of the time,
software development projects fail because key people don’t get on and thus work
together poorly or not at all.
4. Poor or No Planning
A software project plan should clearly define all necessary tasks that will have to be
completed, the deadlines for each of them, and the people responsible. A lack of a
detailed project plan is a big reason why software projects fail. Building a project
without having an overall picture in mind from the start can result in problems down
the road, as you might have to backtrack and change your approach multiple times,
wasting time and effort. Incomplete or incorrect information about individual tasks
might not seem like a big deal - until you discover how much it can affect the44 overall
outcome.
5. Failure to Focus
When a project is underway, there is a tendency for people to feel the need to
add new features to it. This can lead to a focus shift and additional efforts
that aren’t really needed. For example, let’s say you are
building an e-commerce website, and during development, you realize that
there is no mobile version for your website, and you would like to develop
one - this would require another big effort
6. Unclear GoalsIt is essential for all stakeholders involved in a project to
have crystal clear goals - what needs to be accomplished and why.
Otherwise, you might find yourself working away without knowing how
your work fits into the bigger picture, as well as whether or not it’s actually
contributing to the end goal.
45
7. Unrealistic Time Frames/Deadlines
Deadlines shouldn’t be set too early on in the development process as they
might lead to failure due to unrealistic timeframes. As a rule of thumb,
projects should be broken down into phases with specific goals and
deadlines for each development phase
8. Insufficient Tests
It is really important to test the software before releasing it. There are two
types of tests that need to be done: unit tests and end-to-end tests. Unit tests
focus on testing specific parts of the codebase, while end-to-end tests check
if all modules are working together correctly.

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

You might also like