0% found this document useful (0 votes)
24 views14 pages

Overview of Software Engineering Principles

The document discusses software engineering and the software development life cycle. It defines software engineering and describes the types of software maintenance. It also explains the phases of the software development life cycle and how software products age over time. The document concludes by defining a software requirement specification.

Uploaded by

Sakshi Gupta
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views14 pages

Overview of Software Engineering Principles

The document discusses software engineering and the software development life cycle. It defines software engineering and describes the types of software maintenance. It also explains the phases of the software development life cycle and how software products age over time. The document concludes by defining a software requirement specification.

Uploaded by

Sakshi Gupta
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

SE 2018

1. Define Software Engineering

Software engineering is a systematic and disciplined approach to software


development that aims to create high-quality, reliable, and maintainable
software[1][4]. It is a branch of engineering that deals with the development of
software, which refers to the programs used by computers, technically the
collection of codes, documents, and triggers that do a specific job and fulfill a
specific set of requirements[3]. Software engineering employs the best practices,
principles, and methods of engineering and computer programming throughout
the software development process[3].
Software engineering encompasses concepts, principles, theories, techniques,
and tools that can be used for developing high-quality professional software[1]. It
emphasizes a systematic, disciplined approach to software development and
evolution, typically applied to the construction of large software systems[1]. High-
quality software is characterized by high dependability, efficiency, usability,
accessibility, and maintainability[1].
Software engineering applications are practically unlimited, with software
engineering having grown so fast in the last several decades that it has become
tightly connected with all other areas of computer science and even with some
areas outside the traditional computer domain[2].
Studying software engineering involves gaining and integrating knowledge from
various subject areas, including data structures, algorithms, numerical methods,
statistics, design patterns, human-computer interaction, computer graphics,
information visualization, database systems, web development, software project
management, and software engineering[2].
Internship and employment opportunities in software engineering are abundant,
with software engineers in high demand nationally and abroad. The list of
companies hiring software engineers is practically endless, with most jobs in

SE 2018 1
industry, research labs, start-up companies, or even for supporting software
development in research environments[2].
In summary, software engineering is a systematic and disciplined approach to
software development that aims to create high-quality, reliable, and maintainable
software. It employs the best practices, principles, and methods of engineering
and computer programming throughout the software development process.
Software engineering applications are practically unlimited, and studying software
engineering involves gaining and integrating knowledge from various subject
areas. There are abundant internship and employment opportunities in software
engineering.

2. what are the various types of software maintenance ?

The different types of software maintenance are Corrective, Adaptive, Preventive,


and Perfective[2][3][5].

Corrective Maintenance: This type aims to correct errors and bugs in the
software to ensure it functions correctly and addresses issues reported by
users or testers[2][3][5].

Adaptive Maintenance: Involves modifying the software to adapt to changes


in the environment, such as changes in operating systems, hardware, or
software dependencies[2][3][5].

Preventive Maintenance: Focuses on preventing the software from becoming


obsolete by reengineering it with new technology or updating it to prevent
deterioration over time[2][3][5].

Perfective Maintenance: Aims to improve the software by enhancing its


functionality, performance, or efficiency based on user feedback or evolving
requirements[2][3][5].

Each type of maintenance plays a crucial role in ensuring the long-term success
and health of software applications by addressing errors, adapting to changes,
preventing obsolescence, and enhancing features to meet user needs and
expectations.

SE 2018 2
3. what is software process of software development life cycle (SDLC) ?

The software process of the Software Development Life Cycle (SDLC) involves a
structured approach to developing software for a system or project, ensuring
high-quality, low-cost software is produced in the shortest time possible[1][2][5].
The SDLC process typically consists of several phases:

1. Requirements Gathering and Analysis: Involves gathering information about


software requirements from stakeholders like customers and end-users.

2. Design: Creation of the software design, including the architecture, data


structures, and interfaces, with high-level and low-level design steps.

3. Implementation or Coding: The design is translated into code, usually in


iterations, covering front-end, middleware, and back-end development.

4. Testing: Thorough testing to ensure the software meets requirements and


functions correctly.

5. Deployment: After successful testing, the software is deployed to a


production environment for end-users.

6. Maintenance: Ongoing support, bug fixes, and updates to the software to


ensure its continued functionality and relevance.

The SDLC process aims to provide a structured and organized approach to


software development, ensuring high-quality software, managing risks and costs,
improving communication and collaboration, enhancing efficiency and
productivity, and increasing the likelihood of a successful project outcome[4]. By
following the SDLC phases, organizations can develop software that meets
requirements, is of high quality, and is delivered within budget and on time.

4. How do software products age ?

Software products age as requirements evolve, user expectations change, and


software fails to adapt. To combat aging, proactive planning, and ongoing
maintenance are crucial. Recognizing aging as a natural process, early
consideration of future needs, and regular updates can mitigate its effects.
Managing changes carefully, upgrading software to prevent obsolescence, and
addressing evolving user demands are key strategies. By acknowledging and
addressing software aging proactively, organizations can extend the lifespan of

SE 2018 3
their products, maintain relevance, and ensure continued functionality in a rapidly
evolving technological landscape.

5. What is Software requirement specification ?

Software Requirement Specifications (SRS) is a detailed description of a software


product, program, or set of applications that perform specific functions in a
particular environment. It is a formal document that outlines the various
requirements provided by the client/stakeholders and is derived from the client’s
requirements and interactions. An SRS specifies the functional and non-functional
requirements of the software at a high level and serves as a contract document
between the customer and the developer.

A good SRS document should have the following characteristics:

1. Completeness: It should cover all the requirements provided by the


client/stakeholders.

2. Consistency: It should not contain any contradictory requirements.

3. Verifiability: It should be possible to verify whether the software meets the


specified requirements.

4. Modifiability: It should be easy to modify the SRS document as the


requirements change.

5. Traceability: It should be possible to trace each requirement in the SRS


document to its origin and to track changes to the requirement over time.

The SRS document is typically written by a business analyst, system analyst, or


system architect, and it should be reviewed and approved by all stakeholders,
including the customer, before the software development process begins. It is
essential to specify the responses to both valid and invalid values, and each
requirement should be identified as essential, conditional, or optional. The SRS
document is crucial for ensuring that the software development process is
efficient and effective and that the final product meets the customer’s needs and
expectations.

Section B

SE 2018 4
6. what are the components of gathering the requirements

Requirements gathering is a crucial step in software development, which involves


identifying, documenting, and managing the requirements that define the features
and functionalities of a system or application. The process includes several
subprocesses, such as stakeholder identification, analysis, problem definition,
requirements extraction, documentation, validation, and verification.

Effective requirement gathering techniques include interviews, surveys,


brainstorming, joint application method, facts observation, focus groups, interface
analysis, prototyping, use case diagrams, and problem reports and suggestion
analysis. These techniques help ensure that the requirements are accurate,
complete, and consistent.

The purpose of requirement gathering is to create a system requirement business


analysis document that is highly critical to the success or failure of the project. It
is recommended to accumulate the information in a manner that can be easily
documented, measured, tested, and tracked for business needs and
opportunities.

Business analysts and web consultants are responsible for software requirement
gathering. The different methods of information gathering include checklists,
surveys, initial personal interviews, documentation review, focus groups,
observation, and preparing case studies.

Personal interview, market survey, brainstorming, facts observation, joint


application method, focus group, interface analysis, use case diagrams,
prototyping, and problem reports and suggestion analysis are a few tools and
techniques that have been widely used as the best requirement gathering
methods.

7. Discuss the importance of agile process?

The Agile process is crucial in software development due to its ability to enhance
project efficiency, adaptability, and communication. Agile methodologies prioritize
collaboration, adaptability to change, and self-organizing teams, emphasizing the
importance of people and interactions over processes and tools. This approach
enables teams to deliver working software promptly, collaborate frequently with
customers, and quickly adapt to changing requirements. Agile's iterative nature
promotes sustainable development, technical excellence, and good design,

SE 2018 5
leading to improved quality and customer satisfaction. By embracing change with
ease and speed, Agile teams can efficiently navigate uncertainties and
modifications, ensuring projects stay on track. The Agile process fosters ultimate
harmony, transparency, and shared responsibility among team members,
promoting effective communication and continuous interaction. Overall, Agile's
emphasis on flexibility, adaptability, and collaboration makes it a vital methodology
for modern software development, allowing teams to respond agilely to
uncertainty and change, ultimately leading to successful project outcomes.

8. Discuss the components of object oriented design.

Object-Oriented Design (OOD) is a process that creates a software system or


application using an object-oriented paradigm. It involves designing a system as a
collection of objects, each responsible for its own state data[1]. OOD is based on
several important terms:

Objects: Entities involved in the solution design, such as persons, banks,


companies, and users, with properties and methods for performing operations
on those attributes.

Classes: Generic descriptions of objects, with properties and methods


defining an object's functionality. An object is an instance of a class.

Messages: Objects communicate by passing messages, which contain the


target object's integrity, the name of the requested operation, and any other
action required to complete the function.

Abstraction: Abstraction is used to deal with complexity by removing


unnecessary details and amplifying necessary ones.

Encapsulation: It is also known as information concealing, where processes


and data are tied to a single unit, restricting access to the data and operations.

Inheritance: Similar classes are stacked hierarchically, allowing lower or sub-


classes to import, implement, and reuse variables and functions from their
immediate superclasses.

Polymorphism: A single interface can perform functions for multiple types,


allowing a single interface to perform functions for multiple types.

The OOD process includes two main stages: system design and object design[1].
System design involves designing the entire architecture of the intended system,

SE 2018 6
envisioning it as a collection of interacting subsystems, each comprising a
hierarchy of interacting objects classified into classes. Object design creates a
design model based on the models created in the system analysis phase and the
architecture built, recognizing all the required classes, establishing relationships
between them, and creating the internal details of the classes and their
relationships.

Object-oriented decomposition identifies individual autonomous objects in a


system and their communication, dividing a vast, complicated system into a
hierarchy of smaller components with lower complexities based on the divide-
and-conquer concept[1]. This allows for the division of labor with specialized
talents and enables subsystems to be changed or modified without affecting other
subsystems.

Concurrency identification is crucial for supporting multiple objects to receive


events at the same time and multiple activities to be completed simultaneously.
Each concurrent element is given its own control thread, and concurrency can be
plagued with issues such as data integrity, deadlock, and starvation. When
concurrency is required, a clear strategy to tackle these issues must be
developed, and concurrency must be discovered during the design stage and
cannot be ignored till the implementation stage.

Pattern identification in OOD is also essential, with several design patterns


available to solve common problems and improve the design's quality,
maintainability, and extensibility[1].

Section C
9. Explain Software process.

A software process, also known as a software development process or software


engineering process, is a set of activities, methods, and practices used to design,
develop, test, deploy, and maintain software systems. It provides a systematic
approach to managing the complexities of software development, ensuring that
software projects are completed efficiently, effectively, and with high quality.
Here's a breakdown of key aspects of software process:

1. Planning and Requirements Analysis: The process begins with planning,


where project objectives, scope, resources, and constraints are identified.

SE 2018 7
Requirements analysis involves gathering, documenting, and analyzing the
needs and expectations of stakeholders to define the functionality and
characteristics of the software system.

2. Design: In the design phase, the overall architecture and structure of the
software system are planned and specified. This includes defining data
structures, algorithms, interfaces, and modules that collectively form the
blueprint for the software solution.

3. Implementation: Implementation involves translating the design specifications


into executable code using programming languages, frameworks, and
development tools. Developers write, test, and debug the code to ensure that
it meets the requirements and design objectives.

4. Testing: Testing is a critical phase where the software is evaluated to uncover


defects, errors, and discrepancies between expected and actual behavior.
Various testing techniques, such as unit testing, integration testing, system
testing, and acceptance testing, are employed to validate the correctness,
reliability, and quality of the software.

5. Deployment: Deployment involves releasing the software for use by end-


users. This may include installation, configuration, data migration, and user
training activities to ensure a smooth transition to the new software system.

6. Maintenance: Maintenance is an ongoing process that involves modifying,


updating, and enhancing the software to address issues, accommodate
changes in requirements, and improve performance, usability, and
functionality over time.

Throughout the software process, effective communication, collaboration,


documentation, and project management are essential for coordinating activities,
managing resources, mitigating risks, and ensuring the success of the software
project. Various software development methodologies, such as Waterfall, Agile,
DevOps, and Lean, provide frameworks and guidelines for implementing software
processes tailored to the specific needs and characteristics of each project.

10. explain the factors considering while deciding the maintenance cost.

Several factors influence maintenance costs in software development:

SE 2018 8
1. Size and Complexity of the Software: Larger and more complex software
systems typically require more maintenance effort and resources to manage
and update. Complexity, such as intricate architecture, extensive codebase,
and interdependencies between components, increases the likelihood of
defects and the need for maintenance.

2. Quality of the Code: The quality of the codebase significantly impacts


maintenance costs. Well-structured, modular, and easily understandable code
is easier and cheaper to maintain than poorly written, monolithic code. Code
quality affects factors such as readability, maintainability, and the ease of
debugging and making changes.

3. Documentation: Comprehensive and up-to-date documentation, including


design documents, user manuals, and system specifications, can reduce
maintenance costs by facilitating understanding, troubleshooting, and
updating the software. Lack of documentation can lead to inefficiencies,
errors, and increased effort during maintenance activities.

4. Testing Coverage and Quality: Adequate testing during development and


maintenance phases helps identify and address defects early, reducing the
likelihood of costly errors in production. High-quality testing practices,
including unit testing, integration testing, and regression testing, contribute to
software reliability and lower maintenance costs over time.

5. Technology and Tools: The choice of technology stack, development tools,


and third-party libraries can impact maintenance costs. Technologies with
strong community support, regular updates, and comprehensive
documentation may simplify maintenance tasks and reduce the effort required
to address compatibility issues, security vulnerabilities, and performance
bottlenecks.

6. Platform and Environment: Maintenance costs may vary depending on the


platform and environment where the software operates. Compatibility issues,
platform-specific bugs, and changes in operating systems or hardware
configurations may necessitate updates and modifications to the software,
increasing maintenance effort and costs.

7. Regulatory and Compliance Requirements: Compliance with industry


standards, regulations, and legal requirements may necessitate ongoing

SE 2018 9
maintenance to ensure that the software remains compliant and secure.
Failure to comply with regulations can result in legal liabilities, fines, and
reputational damage, underscoring the importance of ongoing maintenance
activities in maintaining regulatory compliance.

8. User Feedback and Change Requests: User feedback, feature requests, and
change requests drive ongoing maintenance efforts to enhance usability,
address user needs, and adapt to evolving market demands. Effective
mechanisms for collecting, prioritizing, and implementing user feedback can
help align maintenance activities with user expectations and business
objectives, optimizing resource allocation and reducing unnecessary costs.

Considering these factors while deciding on maintenance costs enables


organizations to develop informed maintenance strategies, allocate resources
efficiently, and mitigate risks associated with software maintenance.

11. what is software re-engineering? explain its maintenance cost.

Software re-engineering is the process of restructuring or transforming existing


software systems to improve their quality, maintainability, performance, and
functionality. It involves analyzing, understanding, and modifying existing software
artifacts, such as source code, documentation, and databases, to align them with
current business needs, technological advancements, and industry standards.
Software re-engineering aims to extend the lifespan, enhance the value, and
maximize the return on investment (ROI) of legacy software systems.

Maintenance costs associated with software re-engineering can vary depending


on several factors:

1. Scope of Re-engineering: The extent of changes and modifications required


during re-engineering significantly impacts maintenance costs. Minor updates
or enhancements may incur lower costs compared to comprehensive re-
architecting or migration efforts that involve significant changes to the
software's architecture, functionality, or technology stack.

2. Complexity of the Software: The complexity of the existing software system


influences maintenance costs. Highly complex systems with intricate
architectures, extensive codebases, and legacy technologies may require
more effort and resources to re-engineer compared to simpler systems with
well-structured, modular designs.

SE 2018 10
3. Quality of the Codebase: The quality of the existing codebase affects
maintenance costs during re-engineering. Poorly written, unmaintainable code
may require extensive refactoring, debugging, and testing efforts to improve
readability, reliability, and performance. High-quality codebases with clean,
modular designs and comprehensive documentation may incur lower
maintenance costs during re-engineering.

4. Documentation and Knowledge Transfer: Availability of comprehensive


documentation and domain knowledge about the existing software system can
reduce maintenance costs during re-engineering. Clear documentation
facilitates understanding, analysis, and modification of the software artifacts,
while knowledge transfer ensures continuity and efficiency in the re-
engineering process.

5. Technological Obsolescence: Technological obsolescence of the existing


software system may necessitate re-engineering to migrate to modern
platforms, frameworks, or architectures. Maintenance costs associated with
technological obsolescence include identifying legacy dependencies,
updating deprecated components, and ensuring compatibility with
contemporary technologies.

6. Regulatory Compliance and Security: Compliance with regulatory standards


and security requirements may influence maintenance costs during re-
engineering. Ensuring regulatory compliance and addressing security
vulnerabilities often involve additional effort and resources to implement
necessary changes, perform audits, and enhance data protection measures.

7. User Expectations and Business Goals: Alignment with user expectations and
business goals is crucial in determining maintenance costs during re-
engineering. Re-engineering efforts that prioritize user experience,
functionality improvements, and business value may incur higher upfront costs
but yield long-term benefits in terms of customer satisfaction,
competitiveness, and revenue generation.

By considering these factors, organizations can effectively assess and manage


maintenance costs associated with software re-engineering initiatives, enabling
them to make informed decisions, allocate resources efficiently, and achieve
desired outcomes in terms of software quality, performance, and sustainability.

SE 2018 11
12. what are the CASE tools and their usage in software engineering.

CASE (Computer-Aided Software Engineering) tools are software applications that


assist in various activities throughout the software development lifecycle. These
tools automate and streamline tasks, improve productivity, enhance collaboration,
and facilitate the management of software projects. Here are some common CASE
tools and their usage in software engineering:

1. Requirements Management Tools: These tools help in capturing,


documenting, and managing requirements throughout the software
development process. They facilitate collaboration among stakeholders,
traceability of requirements, and change management. Examples include IBM
Rational DOORS, Jama Connect, and Atlassian Jira.

2. Design Tools: Design tools assist in creating architectural designs, data


models, and user interface prototypes for software systems. They enable
visualization of system components, relationships, and interactions, aiding in
communication and decision-making. Examples include Microsoft Visio,
Enterprise Architect, and Lucidchart.

3. Programming and Development Tools: Programming and development tools


provide integrated environments for writing, editing, debugging, and testing
code. They offer features such as syntax highlighting, code completion,
version control, and debugging capabilities to enhance developer productivity
and code quality. Examples include JetBrains IntelliJ IDEA, Microsoft Visual
Studio, and Eclipse IDE.

4. Testing Tools: Testing tools automate the execution of various types of


software testing, including unit testing, integration testing, system testing, and
performance testing. They help in identifying defects, verifying functionality,
and ensuring the quality of software systems. Examples include Selenium,
JUnit, NUnit, and Apache JMeter.

5. Configuration Management Tools: Configuration management tools manage


changes to software artifacts, such as source code, documentation, and
configuration files, throughout the development lifecycle. They provide version
control, branching, merging, and release management capabilities to ensure
consistency and control over software configurations. Examples include Git,
Subversion (SVN), and Mercurial.

SE 2018 12
6. Project Management Tools: Project management tools assist in planning,
scheduling, tracking, and coordinating software development projects. They
facilitate task management, resource allocation, progress monitoring, and
communication among team members. Examples include Atlassian Jira, Trello,
Asana, and Microsoft Project.

7. Quality Assurance Tools: Quality assurance tools support activities related to


ensuring the quality of software products. They include tools for static code
analysis, code review, code coverage analysis, and automated testing.
Examples include SonarQube, Checkstyle, Coverity, and Sonatype Nexus.

8. Documentation Tools: Documentation tools help in creating, organizing, and


managing documentation for software projects. They include tools for
generating technical documentation, user manuals, API documentation, and
release notes. Examples include Microsoft Word, Confluence, MadCap Flare,
and Sphinx.

By leveraging CASE tools effectively, software engineering teams can streamline


workflows, improve collaboration, ensure consistency, and deliver high-quality
software products more efficiently and effectively.

13. Discuss the maintenance activities in detail.

Maintenance activities in software engineering encompass a range of tasks aimed


at ensuring the continued functionality, reliability, and relevance of software
systems throughout their lifecycle. These activities are essential for addressing
defects, accommodating changes, enhancing performance, and adapting to
evolving requirements and environments. Here are the key maintenance activities:

1. Corrective Maintenance: Corrective maintenance involves identifying,


analyzing, and fixing defects or errors discovered in the software system
during its operation. It aims to restore the system to its intended functionality
and resolve issues that affect its reliability, usability, or performance.
Corrective maintenance activities include bug triage, root cause analysis,
debugging, and code refactoring.

2. Adaptive Maintenance: Adaptive maintenance focuses on adapting the


software system to changes in its external environment, such as changes in
hardware platforms, operating systems, dependencies, or regulations. It
involves modifying the system to ensure compatibility, compliance, and

SE 2018 13
interoperability with evolving technologies and requirements. Adaptive
maintenance activities include platform migration, library upgrades, and
regulatory compliance updates.

3. Perfective Maintenance: Perfective maintenance aims to improve the


software system's performance, efficiency, usability, or maintainability to meet
evolving user needs and expectations. It involves enhancing existing features,
optimizing algorithms, redesigning user interfaces, and refactoring code to
improve quality and user satisfaction. Perfective maintenance activities focus
on enhancing the software's value and usability over time.

4. Preventive Maintenance: Preventive maintenance focuses on proactively


identifying and addressing potential issues or risks that may impact the
software system's stability, security, or reliability in the future. It involves
implementing measures to mitigate known vulnerabilities, improve fault
tolerance, and enhance system robustness to prevent future failures or
disruptions. Preventive maintenance activities include security patches,
performance tuning, and proactive monitoring.

5. Routine Maintenance: Routine maintenance encompasses routine tasks and


activities required to ensure the ongoing operation and upkeep of the software
system. It includes activities such as data backups, system monitoring,
database maintenance, and routine software updates to maintain system
health, stability, and availability. Routine maintenance helps prevent downtime,
data loss, and security breaches due to neglect or oversight.

6. Documentation Maintenance: Documentation maintenance involves updating


and maintaining documentation related to the software system, including user
manuals, technical specifications, design documents, and release notes. It
ensures that documentation remains accurate, comprehensive, and up-to-
date to support ongoing maintenance, troubleshooting, and knowledge
transfer activities.

By performing these maintenance activities systematically and proactively,


software engineering teams can ensure the long-term viability, sustainability, and
value of software systems, minimizing downtime, reducing costs, and maximizing
user satisfaction and business outcomes.

SE 2018 14

You might also like