PSE Material of Chapter 1, 2 and 3
PSE Material of Chapter 1, 2 and 3
Engineering
Chapter 1
1. System Software
2. System software manages the computer's hardware and provides a foundation for running
applications. It operates in the background and ensures system stability and performance.
3. Types of System Software:
4. Operating System (OS) – Manages computer resources (e.g., Windows, macOS, Linux).
5. Utility Programs – Perform maintenance tasks (e.g., Antivirus, Disk Cleanup, Backup
Software).
6. Device Drivers – Allow the OS to communicate with hardware (e.g., Printer drivers,
GPU drivers).
📌 Example: When you plug in a new printer, the device driver helps the OS recognize and
use it.
4. Middleware
Middleware acts as a bridge between different software applications or systems, ensuring
smooth communication.
• Examples:
• Database Middleware – Helps applications interact with databases (e.g., MySQL
Connector).
5. Firmware
Firmware is pre-installed software embedded in hardware devices, providing low-level
control. Unlike regular software, firmware is stored in ROM (Read-Only Memory) and
is not easily changed.
• Examples:
• BIOS – Controls the startup process of a computer.
• Smartphone Firmware – Runs on Android and iOS devices.
• Embedded Systems Firmware – Found in smart TVs, routers, and medical devices.
Definition
Generic software refers to software applications that are developed to be used by a wide range of
users and organizations, rather than being customized for a specific client or business. These
software products are designed to meet the common needs of many users and can be used across
different industries.
1. Microsoft Office Suite (Word, Excel, PowerPoint) – Used for document processing, data
analysis, and presentations.
2. Adobe Photoshop – Used for graphic design and image editing.
3. Google Chrome / Mozilla Firefox – Web browsers used by the general public.
4. Operating Systems (Windows, Linux, macOS) – Used to run various applications.
5. Enterprise Resource Planning (ERP) Software – Like SAP or Oracle ERP, which are
used by many businesses.
Lower Cost – Since it is developed for multiple users, the cost is shared.
Quick Availability – Readily available in the market.
Tested & Reliable – Used by many users, making it well-tested and stable.
Regular Updates – Maintained and updated by the developer company.
Definition
Bespoke software engineering refers to the process of designing and developing software that is
specifically tailored to meet the unique requirements of an individual client, business, or
organization. Unlike generic software, bespoke software is custom-built to address specific needs
that cannot be fully met by off-the-shelf solutions.
Career Paths:
Software Engineering leads to careers like software developer, web developer, DevOps engineer,
and IT project manager. Computer Science careers include data scientist, AI/ML engineer,
cybersecurity analyst, and researcher.
Key Differences:
Software Engineering is practical and follows structured development methods, while Computer
Science is more theoretical and research-oriented. SE aims to build reliable software, whereas
CS advances computing technologies.
Scope:
Software Engineering is concerned only with software products, while System Engineering
involves integrating software, hardware, networking, and other system components to meet user
requirements.
Career Paths:
Software Engineers work as software developers, application engineers, DevOps engineers, and
QA testers.
System Engineers work as system architects, IT infrastructure managers, and network
engineers, handling both software and hardware integration.
Key Differences:
Software Engineering focuses only on software solutions, while System Engineering considers
the entire system, including hardware, networks, and human interactions.
Software Engineers follow structured methodologies like Agile and DevOps, while System
Engineers use system modeling and analysis techniques to ensure overall system efficiency.
Software Engineering ensures high-quality software, whereas System Engineering ensures that
all system components work together effectively.
Software engineering is indeed a layered technology, and to develop high-quality software, each
layer builds on the previous one. Each of the layers you mentioned contributes to the overall
development and ensures the software meets both technical and user needs. Here's how these
layers fit into the development process:
Purpose:
This layer ensures that the software being developed meets the desired quality standards,
including performance, reliability, security, and usability.
Key Aspects:
Quality Assurance (QA): Involves practices and methodologies aimed at preventing defects and
ensuring the software meets the expected standards.
Testing: Extensive testing (unit, integration, system, acceptance) is performed to find bugs and
ensure quality.
Continuous Improvement: Regularly reviewing processes and results to enhance software
quality over time.
Outcome:
A product that meets user expectations, performs reliably, and satisfies functional and non-
functional requirements.
Purpose:
This layer defines the set of practices and workflows that guide the entire software development
process.
Key Aspects:
Software Development Life Cycle (SDLC): Defines the stages the software goes through, such as
planning, design, development, testing, deployment, and maintenance.
Methodologies: Different methodologies like Waterfall, Agile, and DevOps fall under this layer,
helping to organize and streamline the process.
Process Models: Define how different stages of development will interact, manage resources,
and handle transitions.
Outcome:
An organized and efficient process for managing the complexity of software development,
ensuring that each step is clear and well-defined.
3. Methods Layer
Purpose:
This layer defines the specific approaches, techniques, and best practices that are used within the
software engineering process.
Key Aspects:
Modeling: Techniques like object-oriented modeling (UML), data modeling, and process
modeling to represent the software design and requirements.
Design Patterns: Reusable solutions to common problems, like the Singleton pattern or Factory
pattern.
Algorithm Design: Developing algorithms to solve specific problems in an efficient manner.
Coding Standards: Defined practices for writing clean, maintainable, and efficient code.
Outcome:
A structured approach to software development, where each step is backed by proven methods
and techniques that ensure the software is well-architected and effective.
Purpose:
This layer involves the tools and technologies that support and automate various aspects of
software development, making the process more efficient and effective.
Key Aspects:
Integrated Development Environments (IDEs): Tools like Eclipse, IntelliJ IDEA, or Visual Studio
to write and debug code.
Version Control Systems (VCS): Tools like Git, SVN, and Mercurial for tracking changes in the
codebase.
Automation Tools: Continuous integration/continuous delivery (CI/CD) tools like Jenkins,
CircleCI, and GitLab CI for automating the build, test, and deployment process.
Testing Tools: Tools like Selenium, JUnit, or TestNG to automate and manage testing.
Outcome:
The tools layer ensures that development is streamlined, errors are minimized, and code quality
is enhanced, making it easier to implement the process and methods.
Quality Focus drives the Process Layer, ensuring that each step in the development
cycle meets the highest standards.
Process Layer defines the overarching structure and stages of development, which
requires the application of Methods to carry out each phase effectively.
Methods provide specific approaches and techniques, which are implemented through
various Tools to automate and streamline the process.
Each layer depends on the fulfillment of the previous one, ensuring that quality is
maintained at every stage of software development.
Ensure that software products meet the required quality, performance, and security standards.
Example: A software engineer should adhere to coding standards and conduct rigorous testing to
ensure that the software performs efficiently.
Keep skills up-to-date with the latest technologies and trends in software engineering.
Example: A software engineer could attend Agile methodology workshops to stay current with project
management trends.
Work collaboratively with colleagues, clients, and stakeholders to meet project goals.
Example: Participating in code reviews to ensure the team's work adheres to quality standards and
learning from peers.
Engineers must ensure that the software works as expected under all conditions and minimize risk to
users.
Consider failures, recovery strategies, and the impact of errors.
Example: Engineers should ensure that data loss in a system has a backup strategy in place to prevent
serious consequences.
2. Ethical Responsibilities
2.1 Public Safety and Welfare
Software engineers must prioritize public safety, privacy, and the welfare of users.
They must avoid harm to individuals or society through unethical software development.
Example: A software engineer working on healthcare software must ensure that the application protects patient data and
complies with privacy laws.
Avoid situations where personal or financial interests conflict with professional duties.
Example: If a software engineer has financial ties to a company selling competing products, they must disclose the conflict and
may need to recuse themselves from related decisions.
Provide accurate information about software products and progress, both internally and to clients or customers.
Example: If a software feature does not work as intended, the engineer must report the issue honestly rather than hide it.
Example: Software engineers should ensure they license third-party libraries properly and avoid using proprietary code without
permission.
Example: A software engineer working for a financial institution must ensure that user data is kept secure and protected from
unauthorized access.
Engineers should consider the broader societal impact of their software, such as its effect on jobs, the economy, and the
environment.
They should avoid developing software that can contribute to social harm.
Example: A software engineer developing a social media platform should consider the psychological impact of the platform on
users and take steps to prevent harm.
Usability reflects how easy and user-friendly the software is. It focuses on:
Ease of use: The software should be simple and intuitive for users to operate without requiring
extensive training.
Learnability: New users should quickly learn to use the software with minimal effort.
User interface design: A clean, intuitive, and responsive design enhances user satisfaction.
Example: A mobile app should have an intuitive interface that allows users to navigate through
features without confusion.
4. Efficiency
Efficiency refers to how well the software performs tasks with minimal resources. Key factors
include:
Performance: The software should perform its tasks quickly and efficiently.
Resource utilization: The software should make efficient use of system resources, such as CPU,
memory, and network bandwidth.
Example: A video streaming service should deliver high-quality videos without lag and use
minimal bandwidth.
5. Maintainability
Maintainability is the ease with which software can be modified to fix defects, improve
performance, or adapt to changes. This involves:
Modularity: The software should be broken into smaller, independent modules, making it easier
to maintain and update.
Code clarity: Clear, readable code is easier to maintain and modify.
Testability: The software should be easy to test and debug.
Example: A content management system (CMS) should allow developers to easily add new
features and fix bugs without major rework.
6. Portability
Portability refers to the software's ability to function on different platforms with minimal
modification. It includes:
Adaptability: The software should be able to work on various devices or operating systems.
Installability: The software should be easy to install and configure across different
environments.
Example: A cross-platform mobile application should work seamlessly on both iOS and
Android
Software Crises
The term "Software Crisis" refers to the challenges and problems faced by the software
development industry due to the growing complexity, demand, and scale of software systems. It
describes the mismatch between the growing demand for software and the ability of the industry
to produce it efficiently, securely, and reliably.
Origins of the Software Crisis:
The software crisis began in the 1960s when software became an essential component of
computers and applications.
As technology rapidly advanced, the demand for more sophisticated and complex software
increased, leading to a shortage of skilled engineers and an inability to meet deadlines and
performance requirements.
The software crisis highlights the growing challenges faced by the industry due to increased
software complexity, limited resources, and the need for better quality. However, adopting
modern methodologies, tools, and practices can help address these issues and create a more
efficient software development process.
Iterative process flow: repeats one or more of the activities before proceeding to the next.
Evolutionary process flow: executes the activities in a “circular” manner. Each circuit through
the five activities leads to a more complete version of the software.
Build
Fix
"Agile process model" refers to a software development approach based on iterative development.
Agile methods break tasks into smaller iterations, or parts do not directly involve long term planning.
The project scope and requirements are laid down at the beginning of the development process. Plans
regarding the number of iterations, the duration and the scope of each iteration are clearly defined in
advance.
Software engineers and other project stakeholders (managers, customers, end users) work together on
an agile team—a team that is self-organizing and in control of its own destiny.
An agile team care for communication and collaboration among all who serve on it.
Why is it important?
The modern business environment that use computer-based systems and software products is
Agile development might best be termed “software engineering lite.” The basic framework
But they form into a minimal task set that pushes the project team toward construction and delivery.
Both the customer and the software engineer have the same view—the only really important work
product is an operational “software increment” that is delivered to the customer on the appropriate
commitment date.
If the agile team agrees that the process works, and the team produces deliverable software
“We are uncovering better ways of developing software by doing it and helping others do it.
That is, while there is value in the items on the right, we value the items on the left more.”
What is “Agile”?
Agile is a time boxed, iterative approach to software delivery that builds software incrementally from
the start of the project, instead of trying to deliver it all at once near the end.
It works by breaking projects down into little bits of user functionality called User Stories, prioritizing
them, and then continuously delivering them in short two week cycles called iterations.
• User stories are features our customers might one day like to see in their software.
Iterations
• An Agile iteration is a short one to two week period where a team takes a couple of their
customers most important user stories and builds them completely as running-tested-
software.
•This means everything happens during an iteration. Analysis, design, coding, testing. It all happens
here. The beauty of working this way, is every couple weeks the customer gets something of great value
(working software).
At its core, Agile does the same thing you and I do when faced with too much to do and not enough
time.
Sitting down with your customer you make a list of features they would like to see in
their software. We call these things User stories and they become the To Do list for
your project.
Then, using Agile estimation techniques, you size your stories relatively to each other,
coming up with a guess as to how long you think each user story will take.
Like most lists, there always seems to be more to do than time allows. So you ask your
customer to prioritize their list so you get the most important stuff done first, and save
the least important for last.
Then you start delivering some value. You start at the top. Work your way to the
bottom. Building, iterating, and getting feedback from your customer as you go.
Perhaps the most popular of Agile methods today, Scrum is an project management framework that
encourages teams to self organize and deliver functionality iteratively in two week time boxes called
sprints.
Agile is a foundational philosophy and mindset, while scrum is a framework that materialize or bring
that philosophy into life.
Transparency
Make the most significant aspects of our work visible to those responsible for the outcomes.
Inspection
Conducting timely checks towards the outcomes of a sprint goal to detect undesirable variances.
Adaptation
Proactive adjustment to reduce risk or keep the project aligned with goals..
Five Values
Commitment:
Personally committing to achieving the goals of the scrum team.
Courage:
The scrum team members must have courage to do the right things and work on tough
problems.
Focus:
Everyone focusing on the work of the sprint and the overall goals of the scrum team.
Openness:
The scrum team and its stakeholders agree to be open about all the work and challenges with
performing the work.
Respect:
Team members should respect the opinions , skills, and independence of their teammates.
Scrum Team
The fundamental unit of Scrum is a small team of people, a Scrum Team. The Scrum Team consists of
one Scrum Master, one Product Owner, and Developers.
Developers
Developers are the people in the Scrum Team that are committed to creating any aspect of a usable
Increment.
Product Owner
The Product Owner is accountable for maximizing the value of the product.
Scrum Master
The Scrum Master is accountable for establishing Scrum as defined in the Scrum Guide.
• Sprint
• Sprints are the heartbeat of Scrum, where ideas are turned into value.
• They are fixed length events of one month or less to create consistency
• Daily Scrum
• The Daily Scrum is a 15-minute event for the Developers of the Scrum Team.
• Sprint Review
• Scrum Team and stakeholders review what was accomplished in the Sprint and what has
changed in their environment.
• Product Backlog
• Product Backlog items that can be Done by the Scrum Team within one Sprint are
deemed ready for selection.
Often include such attributes as description, value, order, estimate, and size.
• Sprint Backlog
• Real-time picture of the work that the Developers plan to accomplish during the Sprint
in order to achieve the Sprint Goal
User-stories
User-story template:
Sprint backlog
Key Principles of XP
Waterfall XP
XP Core Practices
3) Continuous Integration: Integrate code into a shared repository several times a day.
• One programmer writes code, while the other reviews and provides feedback.
• Benefits:
Shared knowledge.
• Challenges:
• What is TDD?
• Benefits of TDD:
Continuous Integration
• Benefits of CI:
Refactoring
• What is Refactoring?
• Improving the design and structure of the existing code without changing its
functionality.
• Why Refactor?
• Maintain code simplicity.
• Improve performance and scalability.
• Reduce technical debt.
• On-site Customer:
• User Stories:
• Advantages:
• Benefits:
Coding Standards
• XP Approach:
• Advantages of XP:
• Frequent releases.
• Challenges of XP: