0% found this document useful (0 votes)
29 views

Software Engineering

Uploaded by

sharmadhruv7416
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

Software Engineering

Uploaded by

sharmadhruv7416
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

Software engineering

End Semester Notes


Unit 1
Introduction
What is Software and Explain it‘s types ?
Software refers to a collection of instructions, programs, data, and documentation that
performs specific tasks on a computer system. It encompasses both applications and system
software.

1. Applications Software: This type of software is designed to perform specific tasks or


functions for end-users. Examples include word processors, web browsers, video games, and
accounting software.

2. System Software: System software includes operating systems, device drivers, utilities,
and other programs that enable the computer hardware to function and provide a platform for
running application software.

Software is intangible and exists in the form of code written in programming languages such
as C, Java, Python, or JavaScript. It controls the behavior of hardware components and
facilitates interaction between users and computer systems. Software can be customized,
configured, and updated to suit different needs and requirements.

What is Engineering?

Engineering is the application of scientific, mathematical, and practical knowledge to design,


create, and maintain structures, machines, systems, processes, and materials that serve
various purposes. It involves systematic problem-solving and innovation to meet specific
requirements, address challenges, and achieve desired outcomes.

What is Software Engineering?


Software engineering is a discipline that deals with the design, development, operation, and
maintenance of software systems. It applies engineering principles to software development,
aiming to create high-quality software products efficiently. The main goal of software
engineering is to produce software that meets the user's requirements, is reliable,
maintainable, and scalable. It involves various processes, methodologies, tools, and
techniques to manage the complexities of software development.
Importance of Software Engineering

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.
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.
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.

Characteristics of Software Engineering


Software possesses several characteristics that distinguish it from other engineering artifacts.
Some of the key characteristics include:
1. Complexity: Software systems can be highly complex due to interactions between
different components, modules, and layers.
2. Flexibility: Software can be easily modified or adapted to accommodate changes in
requirements or environments.
3. Scalability: Software systems can be designed to handle varying levels of workload
and user demands.
4. Reliability: Software should perform its intended functions correctly and consistently
under specific conditions.
5. Maintainability: Software should be easy to understand, modify, and enhance over its
lifecycle.
6. Portability: Software can be transferred from one environment to another with
minimal effort.
7. Efficiency: Software should utilize system resources efficiently to achieve optimal
performance.
8. Usability: Software should be intuitive and user-friendly, allowing users to interact
with it easily.

Software Crisis:
The software crisis refers to a period in the history of software development characterized by
significant challenges and difficulties in creating high-quality software within reasonable
timeframes and budgets. It emerged in the early days of software development when projects
frequently exceeded their budgets, missed deadlines, and delivered products of poor quality.
The software crisis was fueled by several factors, including:

1. Complexity:
As software systems grew in size and complexity, managing them became
increasingly difficult.
2. Changing Requirements:
Clients often changed their requirements during the development process, leading
to scope creep and project delays.
3. Limited Tools and Methodologies:
Early software development lacked standardized processes, methodologies, and
tools, making it challenging to manage projects effectively.
4. Skill Shortages:
There was a shortage of skilled software engineers capable of managing complex
projects.
5. Unreliable Technology:
Early software technologies were often unreliable and lacked robustness.

To address the software crisis, the field of software engineering emerged, focusing on
systematic approaches to software development, including the adoption of
methodologies like Waterfall, Agile, and DevOps, as well as the use of tools and
techniques to improve productivity, quality, and reliability. Despite significant
advancements, challenges in software development continue to exist, but modern
practices aim to mitigate their impact and improve overall project outcomes.

Software Engineering Principles :


Certainly, here are ten software engineering principles presented in bullet points:

1. Modularity:
Decompose software systems into smaller, manageable modules to facilitate
development, maintenance, and reuse.

2. Abstraction:
Hide unnecessary implementation details and focus on essential characteristics,
making software easier to understand and modify.

3. Encapsulation:
Encapsulate related data and functionality within modules, enforcing information
hiding and minimizing dependencies between components.

4. Separation of Concerns:
Divide software systems into distinct components, each addressing a specific concern
or aspect of functionality, promoting maintainability and flexibility.

5. Coupling and Cohesion:


Aim for low coupling (reduce interdependencies between modules) and high cohesion
(ensure that modules are focused and perform a single task well), enhancing
modifiability and understandability.

6. Scalability:
Design software systems to accommodate increasing demands, both in terms of
workload and user base, by employing scalable architectures and technologies.

7. SOLID Principles:
Follow the principles of SOLID (Single Responsibility, Open/Closed, Liskov
Substitution, Interface Segregation, Dependency Inversion) to create modular, flexible,
and maintainable object-oriented designs.

8. Testing and Validation:


Implement rigorous testing practices, including unit testing, integration testing, and
system testing, to verify software correctness, reliability, and robustness.

9. Continuous Integration and Deployment (CI/CD):


Automate the process of integrating code changes and deploying software releases,
ensuring rapid feedback and minimizing the risk of integration issues.

10.Iterative and Incremental Development:


Embrace iterative development cycles, delivering software in incremental stages,
allowing for early feedback, adaptation to changing requirements, and continuous
improvement.

These principles serve as foundational guidelines for software engineers to follow during the
design, development, and maintenance of software systems, promoting efficiency, quality,
and reliability.

Software Engineering Goals :


Certainly, here are ten goals of software engineering presented in bullet points:

1. Customer Satisfaction:
Ensure that the developed software meets the needs and expectations of the customers
or end-users, enhancing their satisfaction with the product.

2. Quality Assurance:
Strive to deliver software products that are reliable, maintainable, scalable, and free
from defects, ensuring high quality and minimizing rework.

3. Timely Delivery:
Complete software projects within the scheduled timeframes and budgets, meeting
deadlines and satisfying stakeholders' expectations.

4. Cost-effectiveness:
Optimize resource utilization and minimize project costs without compromising the
quality or functionality of the software.
5. Risk Management:
Identify, assess, and mitigate risks associated with software development, ensuring
project success and minimizing the impact of potential issues.

6. Adaptability:
Design software systems that can easily accommodate changes in requirements,
technologies, or business environments, ensuring long-term viability and relevance.

7. Maintainability:
Develop software that is easy to understand, modify, and maintain over its lifecycle,
reducing the cost and effort of future enhancements and updates.

8. Collaboration and Communication:


Foster effective communication and collaboration among team members,
stakeholders, and clients to ensure shared understanding, alignment, and
accountability.

9. Continuous Improvement:
Embrace a culture of continuous improvement, learning from past experiences,
adopting best practices, and evolving processes and methodologies to enhance
productivity and quality.

10.Ethical and Legal Compliance:


Ensure that software development practices adhere to ethical standards and legal
requirements, protecting the rights and privacy of individuals and organizations
involved.

These goals guide software engineering efforts, shaping project objectives, strategies, and
priorities to achieve successful outcomes and deliver value to stakeholders.

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 concerning those criteria.
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.

Program vs Software Product


Parameters Program Software Product

Software is when a program is


made available for commercial
A program is a set of instructions business and is properly
Definition that are given to a computer in documented along with its
order to achieve a specific task. licensing.
Software Product = Program +
Documentation + Licensing.

Software Development usually


follows a life cycle, which
Program is one of the stages
involves the feasibility study of the
Stages Involved involved in the development of
project, requirement gathering,
the software.
development of a prototype,
system design, coding, and testing.

Advantages of Software Engineering

There are several advantages to using a systematic and disciplined approach to software
development, such as:
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.
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 protect sensitive data.
In summary, software engineering offers a structured and efficient approach to software
development, which can lead to higher-quality software that is easier to maintain and adapt
to changing requirements. This can help to improve customer satisfaction and reduce costs,
while also promoting better collaboration among development teams.

Disadvantages of Software Engineering

While Software Engineering offers many advantages, there are also some potential
disadvantages to consider:
1. High upfront costs: Implementing a systematic and disciplined approach
to software development can be resource-intensive and require a significant
investment in tools and training.
2. Limited flexibility: Following established software engineering principles and
methodologies can be rigid and may limit the ability to quickly adapt to changing
requirements.
3. Bureaucratic: Software Engineering can create an environment that is
bureaucratic, with a lot of processes and paperwork, which may slow down the
development process.
4. Complexity: With the increase in the number of tools and methodologies,
software engineering can be complex and difficult to navigate.
5. Limited creativity: The focus on structure and process can stifle creativity and
innovation among developers.
6. High learning curve: The development process can be complex, and it requires a
lot of learning and training, which can be challenging for new developers.
7. High dependence on tools: Software engineering heavily depends on the tools,
and if the tools are not properly configured or are not compatible with the
software, it can cause issues.
8. High maintenance: The software engineering process requires regular
maintenance to ensure that the software is running efficiently, which can be costly
and time-consuming.

You might also like