What Is Software Construction?
The Collection of Activities focused on creating source code.
Engineering versus Programming
How many Programmers does it take to change a light bulb?
None. A defective light bulb is a hardware problem.
How many Software Engineers does it take to change a light bulb?
It takes six software engineers, each with a specific role:
1. Analyst – Writes the specification for changing the light bulb.
2. Architect – Designs the procedure for changing it.
3. Developer – Actually changes the light bulb.
4. Tester – Tests whether the new bulb works correctly.
5. Documenter – Writes detailed reports about the process.
6. Auditor – Ensures that the procedure was properly followed.
What Is Software Process?
A process is a method for doing or producing something. A software process is a method for
producing software.
Explain the concept of refactoring in software development and why it is
important?
Refactoring in software development is the process of improving the internal structure of
existing code without changing its external behavior or functionality. It focuses on cleaning up
the code, making it more readable, efficient, and maintainable.
Why Refactoring is Important:
1. Improves Code Quality: Makes the code easier to understand and work with.
2. Enhances Maintainability: Simplifies adding new features or fixing bugs in the future.
3. Reduces Technical Debt: Eliminates inefficient or messy code practices.
4. Boosts Performance: Optimizes code for better execution.
5. Adapts to Changing Requirements: Helps keep the code flexible for updates.
What is the difference between Agile and Waterfall Methodologies in software
development?
Exercise 1
1. Identify a process you use repeatedly in your daily life:
2. Why do you follow this process?
3. Are there any advantages to using a process?
4. Have you improved your process?
Disadvantages Of Process:
1. Overhead – Extra time, effort, and resources may be required.
2. Diminishes Spontaneity & Creativity – Strict processes can limit flexibility and
innovation.
3. Unsuitable for Certain Tasks – The chosen process may not always be the best fit for a
specific job.
Most Common Software Processes
1. Waterfall
A linear and sequential approach where each phase (e.g., requirements, design, implementation,
testing) is completed before moving to the next.
Advantages:
1. Simple and easy to manage due to its structured approach.
2. Clearly defined stages help in understanding project progress.
3. Well-documented process makes maintenance easier.
4. Best suited for projects with fixed requirements as it avoids frequent changes.
Disadvantage:
1. Difficult to make changes once a phase is completed.
2. Errors are discovered late, making fixes expensive.
3. Not suitable for complex or evolving projects.
4. Slow delivery as working software is available only at the end.
2. Agile
An iterative and flexible approach that focuses on delivering small, incremental improvements
through collaboration and adaptability.
Advantages:
1. Quick adaptation to changes ensures better alignment with user needs.
2. Continuous feedback loop improves software quality.
3. Frequent releases allow early detection and resolution of issues.
4. Encourages teamwork and collaboration among developers and stakeholders.
Disadvantage:
1. Needs constant involvement from developers and clients.
2. Frequent changes can affect budgeting and timelines.
3. Lack of detailed documentation can create issues in later stages.
4. Difficult to implement in large organizations with strict processes.
3. Spiral
A risk-driven process that combines iterative development with elements of the waterfall model,
focusing on risk assessment and prototyping.
Advantages:
1. Risk management reduces uncertainties in software development.
2. Early detection of potential problems helps avoid major failures.
3. Highly flexible approach allows adjustments throughout the process.
4. Suited for complex projects requiring continuous evaluation.
Disadvantage:
1. Requires risk management expertise.
2. It is Not Suitable for Small Projects
3. More costly due to repeated prototyping.
4. Takes longer compared to other models because of iterative cycles.
[Link] And Fix:
Code and fix is a development process where developers immediately start coding after receiving
basic requirements without details design or analysis, the process involves fixing issues and bugs
as they arise.
Advantages:
1. Fast initial development since there is no formal planning.
2. Flexible for small projects with simple requirements.
3. Immediate feedback allows quick adjustments.
4. No overhead from planning saves time and effort.
Disadvantages of Code and fix:
1. No clear goals due to lack of planning.
2. Hard to modify or scale unstructured code.
3. Fixing bugs is costly and time-consuming.
4. No documentation makes maintenance difficult.
5. Poor testing leads to unreliable software.
Types Of Process
1. Formal Process:
A formal process in software development is a structured and well-defined approach that
includes clear steps, documentation, and methodologies to ensure quality, efficiency, and
maintainability. Examples include Waterfall, Agile, and Spiral models.
Do We Need a Formal Process?
Some teams can work without a formal process if:
1. They have skilled programmers who understand both coding and business.
2. Developers take initiative and build software without strict planning.
3. A strong manager puts in extra effort to guide the team.
4. Motivated developers work extra hours to complete the project.
However, without a formal process, projects may lack organization, quality, and proper
documentation.
2. Implicit Process:
An implicit process is an informal, unwritten, or intuitive way of completing tasks. It relies on
experience, habits, or shared understanding rather than documented procedures.
Problems with an Implicit Process
1. Depends on Motivated, Talented Individuals
If your best programmer or architect quits, the team might struggle to continue the work.
2. Not Repeatable or Predictable
Without a clear process, it’s hard to estimate how long a project will take or calculate costs,
making it difficult to bid on future projects.
3. Stress and Burn-Out
Too much pressure on the team, uncertainty, and overtime can lead to frustration and burn-out.
There’s no time for personal development or skill improvement.
Why a Defined Process?
1. More Effective: A defined process leads to less time spent on planning, estimates, and
decisions, making the team more efficient.
2. Predictable: Having a clear process makes outcomes more predictable, which helps in better
planning.
3. Repeatable: A defined process ensures that you can repeat the same success in future projects.
4. Trackable: It allows you to measure predictability and track progress effectively.
5. Maintainability: A well-defined process ensures easier maintenance of the software over
time.
6. Quality: Consistent processes help ensure better quality of the software produced.
7. Capability Improvement: By using lessons from past experiences, teams can improve their
skills and processes continuously.
4 Key Factors in Development Speed
1. People– The skills, knowledge, and motivation of the team affect how fast the project moves.
2. Process– Focusing on customer needs and using good planning, quality checks, and risk
management speeds up development.
3. Product– The size and complexity of the product, and how it's built in phases, influence
speed.
4. Technology– The tools and software environment used in development can make the process
faster or slower.
Meta Thinking
Meta-thinking, or thinking about thinking, is when you reflect on how you think, learn, or solve
problems. It helps you become more aware of your thoughts and improve decision-making.
Agile Manifesto
1. Individual interactions
Individual interactions are more important than processes and tools. People drive the
development process and respond to business needs. They are the most important part of
development and should be valued above processes and tools. If the processes or tools drive
development, then the team will be less likely to respond and adapt to change and, therefore, less
likely to meet customer needs.
2. Focus on working software
A focus on working software rather than thorough documentation. Before Agile, a large amount
of time was spent documenting the product throughout development for delivery. The list of
documented requirements was lengthy and would cause long delays in the development process.
While Agile does not eliminate the use of documentation, it streamlines it in a way that provides
the developer with only the information that is needed to do the work -- such as user stories. The
Agile Manifesto continues to place value on the process of documentation, but it places higher
value on working Software.
3. Collaboration
Agile focuses on collaboration between the customer and project manager. Collaborating with
the customer means that they are included throughout the entire development process, not just at
the beginning and end, thus making it easier for teams to meet the needs of their customers.
For example, in Agile, the customer can be included at different intervals for demos of the
product. However, the customer could also be present and interact with the teams daily, attend all
meetings and ensure the product meets their desires.
4. Focus on responding to change
A focus on responding to change. Traditional software development used to avoid change
because it was considered an undesired expense. Agile eliminates this idea. The short iterations
in the Agile cycle allow changes to easily be made, helping the team modify the process to best
fit their needs rather than the other way around. Overall, Agile software development believes
change is always a way to improve the project and provide additional value.
12 principles or rules of Agile
1. Satisfy customers through early and continuous delivery of valuable work.
2. Break big work down into smaller tasks that can be completed quickly.
3. Recognize that the best work emerges from self-organized teams.
4. Provide motivated individuals with the environment and support they need and trust them to
get the job done.
5. Maintain a constant pace for completed work.
6. Welcome changing requirements, even late in a project.
7. Assemble the project team and business owners on a daily basis throughout the project.
8. Measure progress by the amount of completed work.
9. Harness change for a competitive advantage.
10. Do only what is necessary and avoid extra work.
11. The team should regularly think about what went well and what can be better.
12. Keep improving work quality, teamwork, and processes based on feedback.
Agile Core Practices (CRACK Model)
Collaborate – Work closely with the team and customers.
Representative – A customer representative is always available.
Authoritative – Teams have the power to make decisions.
Committed – Team members stay dedicated to the project.
Knowledgeable – Skilled professionals ensure quality work.
Heavy vs Light Software Process Model
1. Heavyweight Software Process Model
A heavyweight software process model is a structured and formal approach that follows strict
documentation, planning, and defined steps. These models are best suited for large-scale, critical
projects where predictability and thorough analysis are required.
Examples: Waterfall Model, V-Model, RUP (Rational Unified Process).
2. Lightweight Software Process Model
A lightweight software process model is a flexible and adaptive approach that focuses on quick
development, continuous improvement, and collaboration. It is best for projects with changing
requirements and short deadlines.
Examples: Agile, Scrum, Extreme Programming (XP), Kanban.
Plan-Driven vs. Agile Processes
Also known as Heavy-Weight vs. Light-Weight Models
1. Plan-Driven Processes
A plan-driven process is a software development approach where all activities are planned in
advance, and progress is measured against a predefined plan.. Changes are difficult to
accommodate once the process has started.
2. Agile Processes
An agile process is a flexible software development approach where planning is incremental,
allowing easier adaptation to changing customer requirements. Agile methods prioritize
collaboration, continuous feedback, and iterative development, making the process more
adaptable and responsive to changes.
Reality: Most real-world projects combine both plan-driven and agile elements to balance
structure and flexibility. There is no universally "right" or "wrong" process—each has its
advantages depending on the project.
Heavy-Weight Model: The Waterfall Model
The Waterfall Model is a structured software development process that follows a step-by-step
sequence. Each phase must be fully completed before moving to the next. It focuses heavily on
documentation and follows a strict plan.
Key Characteristics:
1. Each phase follows a set order.
2. Every step is recorded in detail.
3. Phases do not run at the same time.
4. Any updates require going back to earlier phases.
5. Issues may be found too late, making fixes expensive.
6. The complete product is released after all phases are done.
Dissatisfaction with Heavy-Weight Models
Traditional heavy-weight models like the Waterfall Model have led to major dissatisfaction due
to several issues:
1. Projects take too long to complete.
2. Costs often exceed initial estimates.
3. The final product may not fully satisfy functional and non-functional needs.
4. Difficult to make changes once development starts.
5. Risks are not well assessed early on.
6. Critical issues are often found too late, making fixes costly.
Continue……………………………………………………