You are on page 1of 13

Unit 1: Software Engineering

Introduction to Software Engineering


Software is a program or set of programs containing instructions that
provide desired functionality. And Engineering is the process of designing and
building something that serves a particular purpose and finds a cost-effective
solution to problems.
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.
Software engineering includes a variety of techniques, tools, and methodologies,
including requirements analysis, design, testing, and maintenance.
Software Engineering is mainly used for large projects based on software
systems rather than single programs or applications. The main goal of software
Engineering is to develop software application for improving the quality, budget
and time efficiency. Software Engineering ensures that the software that has to
built should be consistent, correct, also on budget, on time and within the
required requirements.

Problem Domain:

In software engineering, the problem domain refers to the specific area or


context in which a software system or application is designed to operate. It
defines the scope and boundaries of the software, including the problems it aims
to solve and the requirements it needs to fulfill. Understanding the problem
domain is a crucial step in the software development process, as it helps software
engineers and developers to comprehend the intricacies of the problem, gather
relevant information, and design appropriate solutions. Here are some key aspects
of the problem domain in software engineering:

1. Domain Knowledge: Understanding the problem domain requires acquiring


knowledge about the industry, business processes, regulations, and any other
relevant information related to the specific application. This knowledge is
essential for capturing user requirements accurately and creating a software
system that aligns with the users' needs.
2.Requirements Gathering: Identifying and gathering requirements from
stakeholders is a critical step in software development. By focusing on the
problem domain, developers can elicit and prioritize the features and
functionalities that are most crucial for solving the targeted problems.

3. Problem Analysis: Analyzing the problem domain involves studying existing


systems, workflows, and potential challenges. This analysis helps in uncovering
the pain points and understanding the context in which the software will be
utilized.

4. Scope Definition: Defining the scope of the software project is essential to


avoid unnecessary features and ensure that the development effort remains
manageable. A clear understanding of the problem domain aids in establishing
the boundaries and limitations of the software.

5. Modeling: Modeling techniques, such as use case diagrams, activity diagrams,


and entity-relationship diagrams, help in representing the problem domain
visually. These models provide insights into the system's behavior, interactions,
and data flow.

6. Domain-Specific Design: In some cases, the problem domain may have


specific requirements or constraints that demand specialized design approaches.
For example, designing software for healthcare, finance, or aerospace may
require adherence to strict regulations and standards unique to those domains.

7. Testing and Validation: Understanding the problem domain is essential for


effective testing and validation of the software. Test cases should be designed to
cover relevant scenarios and ensure that the software meets the users' needs
within the intended context.

8. Communication with Stakeholders: Accurate communication with


stakeholders is critical for successful software development. Understanding the
problem domain allows developers to speak the same language as the
stakeholders and build trust by addressing their concerns effectively.

9. Evolution and Adaptation: The problem domain may evolve over time due to
changing requirements or external factors. Software engineers should be prepared
to adapt the software to accommodate these changes.
Software Engineering Challenges:

Software engineering faces various challenges due to the complexity and dynamic
nature of software development. Some of the key challenges include:

1. Requirements Management: Gathering, understanding, and managing


requirements is a challenging task, especially when dealing with diverse
stakeholders with different needs and expectations. Inadequate requirements can
lead to scope creep and project failure.

2. Complexity: Software systems are becoming increasingly complex, and


managing this complexity can be overwhelming. As software evolves, it may
become difficult to understand, modify, and maintain, leading to decreased
productivity and increased chances of introducing bugs.

3 .Changing Technology Landscape: The rapid pace of technological


advancements presents a challenge in keeping up with new tools, frameworks, and
programming languages. Software engineers must continually update their skills
and adapt to emerging technologies.

4. Time and Budget Constraints: Meeting project deadlines and staying within
budget can be challenging, particularly when faced with unexpected issues or
changes in requirements.

5. Quality Assurance: Ensuring software quality requires thorough testing and


validation. Identifying and fixing defects is time-consuming and can be
challenging, especially in large and complex systems.

6. Security: Developing secure software is critical to protecting sensitive data and


preventing cyber attacks. Software engineers must consider potential
vulnerabilities and implement robust security measures.

7. Maintainability and Scalability: Building software that is easy to maintain and


scale is essential for long-term success. Failure to design for maintainability can
lead to high maintenance costs and difficulties in adding new features or
accommodating increased demand.
8. User Experience (UX): Creating intuitive and user-friendly interfaces is crucial
for user adoption and satisfaction. Designing software that meets user expectations
and provides a positive experience can be challenging.

9. Communication and Collaboration: Effective communication among team


members and stakeholders is vital for successful software development.
Coordinating efforts, sharing knowledge, and maintaining a clear understanding of
project goals can be challenging, especially in distributed or remote teams.

10. Legacy Systems Integration: Integrating new software with existing legacy
systems can be complex and may require bridging technological gaps and dealing
with outdated technologies.

Software Engineering Approach:

Software engineering it is a layered approach. It is divided into four layers.

1. Quality Focus
2. Process
3. Method
4. Tools

1. Quality Focus:
It is first layer of software engineering. Any engineering discipline
including SE must set its focus on quality of the product throughout the
discipline. Whenever methods, tools or process you use in SE discipline
focus must on ‘quality of products’.

2. Process:

It is the second layer of SE. The process layer act as a co-coordinator to combine
other layer of the technology. This layer makes it possible to achieve the target
well in time according to the predefined schedule. Measurement of work ,speed
and efficiency is possible because of this layer
3. Method:

It is third layer of SE approach which provide “how to” accomplish like analysis,
design, coding, debugging etc.. Because of this method it is possible to provide
quality within a required time limit.

4. Tools:

Tools is the fourth layer of SE. this layer provide automated or semi-automated
support of process, method to produce quality of the product

Software Process in software engineering

Software process, also known as software development process or software


lifecycle process refers to the systematic set of activities and steps followed in
software engineering to design, develop, test, deploy, and maintain software
systems. It provides a structured approach to software development, ensuring that
the project is well-organized, efficient, and results in high-quality software.
Different software development methodologies use various software processes, but
most of them share common phases. Some of the widely used software
development processes include the Waterfall model, Agile, Scrum, Spiral model,
and V-model.

Key Phases of the Software Process:

1. Requirements Gathering and Analysis: This initial phase involves


understanding and documenting the needs of stakeholders, identifying the
software's purpose, and defining functional and non-functional requirements.
Proper requirements analysis is crucial for setting the project's scope and
objectives.

2. Software Design: In this phase, software engineers create a detailed


design of the software based on the requirements. Design involves architectural
decisions, data structures, algorithms, interfaces, and overall system organization.
3. Implementation (Coding): The design is translated into actual code
during the implementation phase. Software developers write, test, and debug the
code following coding standards and best practices.

4. Testing: Quality assurance is a critical aspect of the software process. The


testing phase involves various types of testing, such as unit testing, integration
testing, system testing, and user acceptance testing, to identify and fix defects and
ensure the software functions as expected.

5. Deployment (Release): Once the software has passed testing and meets
the required quality standards, it is deployed or released to the users. Deployment
may involve installing the software on production servers or making it available
for download.

6. Maintenance and Support: After deployment, the software requires


ongoing maintenance to address issues, apply updates, and add new features.
Maintenance may include bug fixing, performance improvements, and
compatibility updates.

Characteristics of Software Process:

The characteristics of a software process refer to the distinctive attributes


and features that define how software is developed and managed during its
lifecycle. Here are some key characteristics of a software process:

1. Systematic and Structured Approach: A software process follows a


systematic and well-defined approach, consisting of a set of organized activities,
roles, and tasks. It provides a clear roadmap for software development and ensures
that all necessary steps are followed.

2. Iterative and Incremental: Many modern software processes, such as


Agile and Scrum, embrace an iterative and incremental approach. They involve
dividing the development into smaller iterations or increments, delivering usable
features in each iteration, and incorporating feedback for continuous improvement.
3. Flexibility and Adaptability: Software processes should be flexible
enough to adapt to changes in requirements, technology, and user needs. Agile
methodologies, for instance, prioritize customer collaboration and responding to
changes over sticking rigidly to initial plans.

4. Quality Focus: Software processes emphasize the importance of


delivering high-quality software. Testing, code reviews, and quality assurance
activities are integral parts of the process to identify and fix defects early in the
development cycle.

5. Collaborative and Team-Oriented: Software development is a team


effort, and the process encourages collaboration among team members. Effective
communication, teamwork, and knowledge sharing are essential for successful
software development.

6. Continuous Improvement: The software process promotes a culture of


continuous improvement. Lessons learned from previous projects and feedback
from users is used to refine the process and enhance productivity and quality.

7. Risk Management: Identifying and managing risks are critical aspects of


the software process. Risk assessment and mitigation strategies are implemented to
reduce the likelihood of project failure and minimize negative impacts.

8. Customer-Centric: Software processes prioritize customer satisfaction


and delivering value to users. User feedback and involvement are sought
throughout the development cycle to ensure that the software meets their needs.

9. Documentation: Proper documentation is a characteristic of an effective


software process. It helps in understanding the software, facilitating maintenance,
and providing valuable insights for future enhancements.

10. Measurements and Metrics: Software processes often include the use
of measurements and metrics to assess project progress, productivity, and software
quality. These quantitative measures aid in decision-making and process
improvement.

11. Resource Management: Efficient utilization of resources, including


time, budget, and manpower, is an integral part of the software process. Project
managers track resource allocation to ensure projects stay on track and within
budget.

12. Continuous Monitoring and Control: The software process involves


continuous monitoring of project activities and progress. Regular reviews and
audits are conducted to identify deviations from plans and take corrective actions
when necessary.

Project Management Processes:

Project management is one of the critical processes of any project. This is due to
the fact that project management is the core process that connects all other project
activities and processes together.

1 - Project Initiation
Project initiation is the starting point of any project. In this process, all the
activities related to winning a project takes place. Usually, the main activity of this
phase is the pre-sale.
During the pre-sale period, the service provider proves the eligibility and ability of
completing the project to the client and eventually wins the business. Then, it is the
detailed requirements gathering which comes next.
During the requirements gathering activity, all the client requirements are gathered
and analyzed for implementation. In this activity, negotiations may take place to
change certain requirements or remove certain requirements altogether.
Usually, project initiation process ends with requirements sign-off.
2 - Project Planning
Project planning is one of the main project management processes. If the project
management team gets this step wrong, there could be heavy negative
consequences during the next phases of the project.
Therefore, the project management team will have to pay detailed attention to this
process of the project.
In this process, the project plan is derived in order to address the project
requirements such as, requirements scope, budget and timelines. Once the project
plan is derived, then the project schedule is developed.
Depending on the budget and the schedule, the resources are then allocated to the
project. This phase is the most important phase when it comes to project cost and
effort.
3 - Project Execution
After all paperwork is done, in this phase, the project management executes the
project in order to achieve project objectives.
When it comes to execution, each member of the team carries out their own
assignments within the given deadline for each activity. The detailed project
schedule will be used for tracking the project progress.
During the project execution, there are many reporting activities to be done. The
senior management of the company will require daily or weekly status updates on
the project progress.
In addition to that, the client may also want to track the progress of the project.
During the project execution, it is a must to track the effort and cost of the project
in order to determine whether the project is progressing in the right direction or
not.
In addition to reporting, there are multiple deliveries to be made during the project
execution. Usually, project deliveries are not onetime deliveries made at the end of
the project. Instead, the deliveries are scattered throughout the project execution
period and delivered upon agreed timelines.
4 - Control and Validation
During the project life cycle, the project activities should be thoroughly controlled
and validated. The controlling can be mainly done by adhering to the initial
protocols such as project plan, quality assurance test plan and communication plan
for the project.
Sometimes, there can be instances that are not covered by such protocols. In such
cases, the project manager should use adequate and necessary measurements in
order to control such situations.
Validation is a supporting activity that runs from first day to the last day of a
project. Each and every activity and delivery should have its own validation
criteria in order to verify the successful outcome or the successful completion.
When it comes to project deliveries and requirements, a separate team called
'quality assurance team' will assist the project team for validation and verification
functions.
5 - Closeout and Evaluation
Once all the project requirements are achieved, it is time to hand over the
implemented system and closeout the project. If the project deliveries are in par
with the acceptance criteria defined by the client, the project will be duly accepted
and paid by the customer.
Once the project closeout takes place, it is time to evaluate the entire project. In
this evaluation, the mistakes made by the project team will be identified and will
take necessary steps to avoid them in the future projects.
During the project evaluation process, the service provider may notice that they
haven't gained the expected margins for the project and may have exceeded the
timelines planned at the beginning.
In such cases, the project is not a 100% success to the service provider. Therefore,
such instances should be studied carefully and should take necessary actions to
avoid in the future.
Conclusion
Project management is a responsible process. The project management process
connects all other project activities together and creates the harmony in the project.

Inspection Process:

Inspections are critical examination of software artifacts by human


inspector.
The purpose behind this inspecting is discovering and fixing the faults in
software.
Inspection is non-testing way to eliminate the faults from the software.
Inspection process is also called as Different Non-testing Defect removal
Method.
The following are the main key aspects of the inspection :
1. Requriment inspection
2. Design Inspection
3. Code inspection.
4. Test case Reviews
5. User Documentation Reviews.
Defect Seeding:
Will full insertion of defects in to the software artifacts just to check how to
inspection process is going on , how the inspection team is performing .

Software Configuration Management:

 Multiple people are working on software which is consistently updating. It


may be a method where multiple version, branches, authors are involved in a
software project, and the team is geographically distributed and works
concurrently. It changes in user requirements, and policy, budget, When we
develop software, the product (software) undergoes many changes in their
maintenance phase; we need to handle these changes effectively.
 Several individuals (programs) works together to achieve these common
goals. This individual produces several work product (SC Items) e.g.,
Intermediate version of modules or test data used during debugging, parts of
the final product.
 The elements that comprise all information produced as a part of the
software process are collectively called a software configuration.
 As software development progresses, the number of Software Configuration
elements (SCI's) grow rapidly.
These are handled and controlled by SCM. This is where we require software
configuration management.

A configuration of the product refers not only to the product's constituent but also
to a particular version of the component. Therefore, SCM is the discipline which
o Identify change
o Monitor and control change
o Ensure the proper implementation of change made to the item.
o Auditing and reporting on the change made.
Configuration Management (CM) is a technic of identifying, organizing, and
controlling modification to software being built by a programming team.
The objective is to maximize productivity by minimizing mistakes (errors).
CM is used to essential due to the inventory management, library management, and
updating management of the items essential for the project.
Need Configuration Management schedules need to be accommodated?
Importance of SCM
It is practical in controlling and managing the access to various SCIs e.g., by
preventing the two members of a team for checking out the same component for
modification at the same time.
It provides the tool to ensure that changes are being properly implemented.
It has the capability of describing and storing the various constituent of software.
SCM is used in keeping a system in a consistent state by automatically producing
derived version upon modification of the same component.

Requirement Change Management Process :

Requirement change management is a crucial process in project management and


software development. It involves handling changes to project requirements in a
systematic and controlled manner to ensure that any modifications are properly
evaluated, approved, documented, and implemented. This process helps maintain
project scope, quality, and deliverables while accommodating changes requested
by stakeholders.

Here's a general outline of the requirement change management process:

1. Identification of Change Request:


 Stakeholders identify potential changes to the project requirements or scope.
 Change requests can come from customers, users, project team members, or
other relevant parties.
2. Change Request Documentation:
 The change request is formally documented, providing detailed information
about the proposed modification.
 It should include the reason for the change, the potential impact, the benefits,
and any associated risks.
3. Change Evaluation:
 The project team, including relevant stakeholders, assesses the impact of the
change on the project.
 The evaluation includes considering factors like cost, schedule, resources,
and technical feasibility.
 The change is compared against the project's objectives, requirements, and
constraints.
4. Change Approval:
 Based on the evaluation, the change request undergoes a review and
approval process.
 The approval authority may vary depending on the project's organizational
structure and complexity.
5. Change Implementation:
 Once the change is approved, it is integrated into the project plan and
schedule.
 The necessary updates are made to project documentation, such as
requirements specifications, design documents, and test plans.
6. Testing and Validation:
 The modified requirements and associated deliverables are thoroughly tested
to ensure they meet the desired outcomes.
 The changes are validated against the initial objectives to verify that they
fulfill the intended purpose.
7. Communication:
 Throughout the process, effective communication with stakeholders is
essential to keep them informed about the change status and any potential
impacts on the project.
8. Documentation and Traceability:
 All changes and their associated decisions are well-documented for future
reference.
 A traceability matrix can help maintain the link between requirements and
corresponding changes.
9. Version Control:
 If using version control systems, ensure that changes to requirements and
project documentation are properly managed.
10. Lessons Learned:
 After the change is implemented, conduct a lessons-learned session to
understand the effectiveness of the process and identify areas for
improvement.

Remember that the requirement change management process may vary


depending on the specific industry, project type, and organization's practices. The
key is to have a structured approach that allows changes to be evaluated carefully,
balancing flexibility with maintaining project objectives and constraints.

You might also like