Unit-1 Se
Unit-1 Se
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.
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.
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.
Main Attributes of Software Engineering
Software Engineering is a systematic, disciplined, quantifiable study and approach to the
design, development, operation, and maintenance of a software system. There are four
main Attributes of Software Engineering.
1. Efficiency: It provides a measure of the resource requirement of a software product
efficiently.
2. Reliability: It assures that the product will deliver the same results when used in similar
working environment.
3. Reusability: This attribute makes sure that the module can be used in multiple
applications.
4. Maintainability: It is the ability of the software to be modified, repaired, or enhanced
easily with changing requirements.
2. Efficiency: The software should not make wasteful use of computing devices such as
memory, processor cycles, etc.
5. Testability: Here software facilitates both the establishment of test criteria and the
evaluation of the software concerning those criteria.
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.
There are several advantages to using a systematic and disciplined approach to software
development, such as:
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.
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.
While Software Engineering offers many advantages, there are also some potential
disadvantages to consider:
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.
Conclusion:
Attributes of Software
The international standard on software product quality suggests that software quality
comprises six main attributes:
2. Functionality: The capability to provide functions that meet stated and implied needs
when the software is used.
Classification of Software
1. Purpose: Software can be classified as system software (e.g., operating systems, device
drivers) or application software (e.g., word processors, games).
2. Platform: Software can be classified as native software (designed for a specific operating
system) or cross-platform software (designed to run on multiple operating systems).
6. Size: Software can be classified as small-scale software (designed for a single user or
small group) or enterprise software (designed for large organizations).
7. User Interface: Software can be classified as Graphical User Interface (GUI) software
or Command-Line Interface (CLI) software.
hese classifications are important for understanding the characteristics and limitations of
different types of software, and for selecting the best software for a particular need.
It refers to the degree of performance of the software against its intended purpose. Functionality
refers to the set of features and capabilities that a software program or system provides to its
users. It is one of the most important characteristics of software, as it determines the usefulness
of the software for the intended purpose. Examples of functionality in software include:
The more functionality a software has, the more powerful and versatile it is, but also the more
complex it can be. It is important to balance the need for functionality with the need for ease of
use, maintainability, and scalability.
Required functions are:
Functionality
Reliability:
A set of attributes that bears on the capability of software to maintain its level of performance
under the given condition for a stated period of time.
Reliability is a characteristic of software that refers to its ability to perform its intended functions
correctly and consistently over time. Reliability is an important aspect of software quality, as it
helps ensure that the software will work correctly and not fail unexpectedly.
To improve the reliability of software, various techniques, and methodologies can be used, such
as testing and validation, formal verification, and fault tolerance.
Software is considered reliable when the probability of it failing is low and it is able to recover
from the failure quickly, if any.
Efficiency:
It refers to the ability of the software to use system resources in the most effective and efficient
manner. The software should make effective use of storage space and executive command as per
desired timing requirements.
Efficiency is a characteristic of software that refers to its ability to use resources such as memory,
processing power, and network bandwidth in an optimal way. High efficiency means that a
software program can perform its intended functions quickly and with minimal use of resources,
while low efficiency means that a software program may be slow or consume excessive
resources.
Examples of factors that can affect the efficiency of the software include:
5. Unoptimized code
To improve the efficiency of software, various techniques, and methodologies can be used, such
as performance analysis, optimization, and profiling.
Efficiency
Usability:
It refers to the extent to which the software can be used with ease. the amount of effort or time
required to learn how to use the software.
Required functions are:
Usability
Maintainability:
It refers to the ease with which modifications can be made in a software system to extend its
functionality, improve its performance, or correct errors.
Required functions are:
Portability:
A set of attributes that bears on the ability of software to be transferred from one environment to
another, without minimum changes.
Required functions are:
Portability
• In both activities, high quality is achieved through good design, but the
manufacturing phase for hardware can introduce quality problems than software.
• Every software failure indicates an error in design or in the process through which
the design was translated into machine-executable code. Therefore, the software
maintenance tasks that accommodate requests for change involve considerably
more complexity than hardware maintenance. However, the implication is clear—
the software doesn’t wear out. But it does deteriorate.
• A software part should be planned and carried out with the goal that it tends to be
reused in various projects.
• Current reusable segments encapsulate the two pieces of information and the
preparation that is applied to the information, empowering the programmer to
make new applications from reusable parts.
• It can be complex, meaning it can have many interrelated parts and features.
• It can be difficult to understand and modify, especially for large and complex systems.
• It can be impacted by bugs and other issues, meaning it may need to be tested and
debugged to ensure it works as intended.
The modern read of high-quality associates with software many quality factors like the
following:
2. Usability: A software has smart usability if completely different classes of users (i.e.
knowledgeable and novice users) will simply invoke the functions of the merchandise.
3. Reusability: A software has smart reusability if completely different modules of the
merchandise will simply be reused to develop new merchandise.
4. Correctness: Software is correct if completely different needs as laid out in the SRS
document are properly enforced.
6. Reliability: Software is more reliable if it has fewer failures. Since software engineers do
not deliberately plan for their software to fail, reliability depends on the number and type
of mistakes they make. Designers can improve reliability by ensuring the software is easy
to implement and change, by testing it thoroughly, and also by ensuring that if failures
occur, the system can handle them or can recover easily.
7. Efficiency. The more efficient software is, the less it uses of CPU-time, memory, disk
space, network bandwidth, and other resources. This is important to customers in order to
reduce their costs of running the software, although with today’s powerful computers,
CPU time, memory and disk usage are less of a concern than in years gone by.
Software Quality Management System contains the methods that are used by the
authorities to develop products having the desired quality.
• Individual Responsibilities: Each individual present in the organization must have some
responsibilities that should be reviewed by the top management and each individual
present in the system must take this seriously.
• Quality System Activities: The activities which each quality system must have been
o Project Auditing.
1. Inception: Product inspection task provided an instrument for quality control (QC).
2. Quality Control: The main task of quality control is to detect defective devices, and it
also helps in finding the cause that leads to the defect. It also helps in the correction of
bugs.
Software Crisis is a term used in computer science for the difficulty ofwriting useful and
efficient computer programs in the required time.software crisis was due to using same
workforce, same methods, same toolseven though rapidly increasing in software demand,
complexity of softwareand software challenges. With increase in the complexity of
software, manysoftware problems arise because existing methods were
insufficient.Causes of Software Crisis:
1. The cost of owning and maintaining software was as expensive asdeveloping the
software
2. At that time Projects was running over-time
3. At that time Software was very inefficient
4. The quality of software was low quality
5. Software often did not meet requirements
6. The average software project overshoots its schedule by half
5.
Communication skills represent nothing but the exchange of ideas, views,and information
with others. It is a valuable and beneficial elementobligatory in every profession. Great
communication is the most importantcharacteristic for success as a software engineer. A
big part of the day-to-day job of software engineering is not spent knee-deep in code but
ratherworking with a variety of folks across the company. It turns out softwareengineers,
like other knowledge-workers, spend a ton of time collaboratingacross IM, email, reading
designs, reviewing code and going to meetings.The role of software engineering involves
working across many parts of thecompany communicating with product management,
account management,support, operations, sales, customers and of course with our peers
andmanagers. As their career develops, software engineers end up spendingmost of their
time communicating rather than actually coding.Communication skills form a backbone
in the field of software engineering.Being a software engineer, one should practice
developing theircommunication every-day. This will help in dealing with the clients
and personas working with. If both the communication skills, verbal as well asnon-verbal
are tremendous one can execute their plans with effortlessly.People believe that the world
of software engineering can be run on the basisof technical knowledge, but they are
mistaken. In this field, communicationskills are as important as technical skills are to
work in the softwareengineering field.