SEPM Chapter 2 (Module 3)
SEPM Chapter 2 (Module 3)
Steve McConnell's editorial highlights the distinction between technology-specific knowledge and
enduring software engineering principles.
1. Technology-Specific Knowledge:
o These principles do not have a short half-life and are likely to be useful
throughout a programmer's career.
o By the year 2000, McConnell estimated that about 75 percent of the knowledge
needed to develop a complex system resided within this stable core.
In essence, McConnell emphasizes the importance of focusing not only on transient technological
skills but also on enduring software engineering principles that form the stable foundation of the
discipline.
Core principles
The core principles of software engineering are essential for both the process and practice levels,
providing a foundation and guiding values for effective development.
o Keep work products concise and make local decisions when possible.
3. Be Ready to Adapt:
o Adapt approaches based on constraints from the problem, people, and project.
4. Build an Effective Team:
6. Manage Change:
o Produce only those work products that are necessary and valuable for subsequent
process activities.
o Ensure modules are cohesive in function, have low coupling, and are
interconnected simply.
6. Look for Patterns:
7. When possible, represent the problem and its solution from a number of different
perspectives
o Examine problems and solutions from multiple viewpoints (e.g., data- oriented,
function-oriented, behavioral) for greater insight and error detection.
8. Remember That Someone Will Maintain the Software:
These principles establish a robust foundation for every software engineering method and guide the
development of high-quality, operational software that meets stakeholders' needs.
Communication Principles
Effective communication is crucial in software projects, particularly when gathering customer
requirements. These principles apply to all forms of communication within a project but are
especially important for customer interactions:
1. Listen: Focus on the speaker’s words and ask for clarification without constant
interruptions.
2. Prepare Before You Communicate: Understand the problem and prepare an agenda if
you’re conducting a meeting.
3. Someone should facilitate the activity: Ensure meetings have a leader to keep
discussions productive and mediate conflicts.
Planning Principles
Effective planning provides guidance to the software team and helps manage the project's
progression:
1. Understand the Scope of the Project: Know the project’s destination to use a road map
effectively.
2. Involve Stakeholders in the Planning Activity: Engage stakeholders to define
priorities and establish constraints.
3. Recognize That Planning Is Iterative: Adjust the plan as work progresses and new
information emerges.
4. Estimate Based on What You Know: Provide estimates based on the current
understanding of the work.
5. Consider Risk as You Define the Plan: Adjust the project plan to
accommodate high-impact, high-probability risks.
6. Be Realistic: Account for human factors, communication noise, and the likelihood
of changes and mistakes.
7. Adjust Granularity as You Define the Plan: Plan in detail for the short term and
Modeling Principles
Models help in understanding and building the software. There are two types of models:
requirements models (analysis models) and design models. Agile modeling principles, although
intended for agile processes, apply to all software engineering:
1. The primary goal of the software team is to build software, not create models: Create
models that facilitate getting software to the customer quickly.
2. Travel light – don’t create more models than you need: Create only necessary
models to avoid wasting time on upkeep and construction delays.
3. Strive to produce the simplest model that will describe the problem or the software:
By keeping models simple, the resultant software will also be simple. Simple models are easier for
members of the software team to understand and critique, resulting in an ongoing form of feedback
that optimizes the end result.
4. Build models in a way that makes them amendable to change: Keep models simple to
ensure the software is simple, easier to integrate, test, and maintain.
5. Be able to state an explicit purpose for each model that is created: Create models
that can be easily updated as requirements change.
6. Adapt the models you develop to the system at hand: Justify the creation of each
model; if not justified, don’t create it.
7. Try to build useful models, but forget about building perfect models: Tailor model
notation or rules to the specific application.
8. Don’t become dogmatic about the syntax of the model. If it communicates content
successfully, representation is secondary: Aim for useful models rather than perfect
These principles collectively guide software engineering efforts, ensuring that processes and
practices are effective, efficient, and adaptable to changing requirements and circumstances.
o Encompasses data flow into the system, data flow out, and data stores.
o Both internal and external interfaces must be designed for efficiency, error
reduction, and simplicity.
5. User interface design should be turned to the needs of the end user. However, in every
case, it should stress ease of use
9. The design should be developed iteratively. With each iteration, the designer should strive
for greater simplicity
o Design should evolve iteratively, aiming for simplicity with each iteration.
Construction Principles
The construction phase involves coding and testing tasks leading to operational software:
Coding Principles
1. Preparation Principles: Before you write one line of code, be sure you
o Understand the problem and design principles.
o Select data structures that will meet the needs of the design.
o Understand the software architecture and create interfaces that are consistent with it.
o Select meaningful variable names and follow other local coding standards
3. Validation Principles: After you’ve completed your first coding pass, be sure you
Testing Principles
1. All tests should be traceable to customer requirements
o Plan tests early, ideally as soon as requirements and design models are solidified.
3. The Pareto principle applies to software testing
4. Testing should begin “in the small” and progress toward testing “in the large”
Deployment Principles
Deployment involves delivery, support, and feedback:
documents.
3. A support regime must be established before the software is delivered