5-Models-Software Engineering Knowledge Core Principles-30-01-2024
5-Models-Software Engineering Knowledge Core Principles-30-01-2024
Steve McConnell
3
PRINCIPLE 1: MANAGE USING PHASED
LIFECYCLE PLAN
• Create and Maintain a Life-Cycle Project Plan
• Essentials of a software project plan.
• Project overview
• Phased milestone plan.
• Project control plan( Work breakdown structure)
• Product control plan.(major activities involved in software product or
configuration control-configuration identification, configuration status
accounting, and configuration verification-and how these activities evolve
through the software life-cycle)
• Validation plan.
• Operations and maintenance plan.
• Orient the Plan Around a Phased Development Approach
• Requirements- analysis – design –coding and debug – testing – maintenance
• Use the Plan to Manage the Project
4
PRINCIPLE 2: PERFORM CONTINUOUS
VALIDATION
• Problem Symptoms ( Error detection and
correction ) @ which Phase?
• Getting Errors Out Early
• Specific activities which aid in eliminating errors in the
requirements and design phases are
• In-depth reviews, Early user documentation, Prototyping, Simulations,
Automated aids.
• Design inspections and walkthroughs.
5
PRINCIPLE 3: MAINTAIN DISCIPLINED
PRODUCT CONTROL
6
PRINCIPLE 4: USE MODERN
PROGRAMMING PRACTICES (MPP)
• Results to Date
• Guidelines :
• Ensure that management is committed to the MPP implementation effort.
• Embed the MPP implementation within an overall strategy for improving
software productivity
• Make sure that both managers and performers agree on an appropriate
set of objectives and performance criteria
• Don’t implement all the MPP at once.
• Allow enough time for training
• Make sure that the techniques are consistently applied.
• Avoid “structured purism.”
• Don’t be afraid of mistakes and false starts.
• Don’t expect instant results
• Establish a continuing evaluation activity with feedback into improving the
techniques used.
7
PRINCIPLE 5: MAINTAIN CLEAR
ACCOUNTABILITY FOR RESULTS
• Macroscale Accountability
• Intermediate-Scale Accountability
• Individual Accountability
• The primary items involved in ensuring accountability
are:
• Organizing the project with clearly defined responsibilities,
and providing authority commensurate with responsibility;
• Establishing a goal and incentive structure such that goals are
mutually reinforcing and incentives are well-aligned with
goals.
8
PRINCIPLE 6: USE BETTER AND
FEWER PEOPLE
• Variability Among Personnel
• Interpersonal Communications Overhead
• high-leverage applications of Principle
• Don’t try to solve project schedule problems by
adding more people
• Don’t load up a project with a lot of people in the
early stages.
• Set up career paths, salary scales, and other benefits
to reward high performers
• Phase out the bottom performers
9
PRINCIPLE 7: MAINTAIN A
COMMITMENT TO IMPROVE THE
PROCESS
•Data Collection and Analysis
•Maintaining Perspective
10
PRINCIPLES THAT GUIDE
FRAMEWORK ACTIVITY
11
Principles that Guide Process - I
• Principle #1. Be agile. Whether the process model you choose
is prescriptive or agile, the basic tenets of agile development
should govern your approach.
• Principle #2. Focus on quality at every step. The exit
condition for every process activity, action, and task should
focus on the quality of the work product that has been
produced.
• Principle #3. Be ready to adapt. Process is not a religious
experience and dogma has no place in it. When necessary,
adapt your approach to constraints imposed by the problem,
the people, and the project itself.
• Principle #4. Build an effective team. Software engineering
process and practice are important, but the bottom line is
people. Build a self-organizing team that has mutual trust
and respect.
12
Principles that Guide Process - II
• Principle #5. Establish mechanisms for communication and
coordination. Projects fail because important information
falls into the cracks and/or stakeholders fail to coordinate
their efforts to create a successful end product.
• Principle #6. Manage change. The approach may be either
formal or informal, but mechanisms must be established to
manage the way changes are requested, assessed, approved
and implemented.
• Principle #7. Assess risk. Lots of things can go wrong as
software is being developed. It’s essential that you establish
contingency plans.
• Principle #8. Create work products that provide value for
others. Create only those work products that provide value
for other process activities, actions or tasks.
13
Principles that Guide Practice
• Principle #1. Divide and conquer. Stated in a more
technical manner, analysis and design should
always emphasize separation of concerns (SoC).
• Principle #2. Understand the use of abstraction. At
it core, an abstraction is a simplification of some
complex element of a system used to
communication meaning in a single phrase.
• Principle #3. Strive for consistency. A familiar
context makes software easier to use.
• Principle #4. Focus on the transfer of information.
Pay special attention to the analysis, design,
construction, and testing of interfaces.
14
Principles that Guide Practice
• Principle #5. Build software that exhibits effective
modularity. Separation of concerns (Principle #1) establishes a
philosophy for software. Modularity provides a mechanism for
realizing the philosophy.
• Principle #6. Look for patterns. Brad Appleton [App00]
suggests that: “The goal of patterns within the software
community is to create a body of literature to help software
developers resolve recurring problems encountered
throughout all of software development.
• Principle #7. When possible, represent the problem and its
solution from a number of different perspectives.
• Principle #8. Remember that someone will maintain the
software.
15
Communication Principles
• Principle #1. Listen. Try to focus on the speaker’s words,
rather than formulating your response to those words.
• Principle # 2. Prepare before you communicate. Spend
the time to understand the problem before you meet with
others.
• Principle # 3. Someone should facilitate the activity.
Every communication meeting should have a leader (a
facilitator) to keep the conversation moving in a
productive direction; (2) to mediate any conflict that does
occur, and (3) to ensure than other principles are followed.
• Principle #4. Face-to-face communication is best. But it
usually works better when some other representation of
the relevant information is present.
16
Communication Principles
• Principle # 5. Take notes and document decisions. Someone
participating in the communication should serve as a “recorder” and write
down all important points and decisions.
• Principle # 6. Strive for collaboration. Collaboration and consensus
occur when the collective knowledge of members of the team is combined
• Principle # 7. Stay focused, modularize your discussion. The more
people involved in any communication, the more likely that discussion will
bounce from one topic to the next.
• Principle # 8. If something is unclear, draw a picture.
• Principle # 9.
• (a) Once you agree to something, move on;
• (b) If you can’t agree to something, move on;
• (c) If a feature or function is unclear and cannot be clarified at the moment, move
on.
18
Planning Principles…
• Principle #5. Consider risk as you define the plan. If you
have identified risks that have high impact and high
probability, contingency planning is necessary.
• Principle #6. Be realistic. People don’t work 100 percent of
every day.
• Principle #7. Adjust granularity as you define the plan.
Granularity refers to the level of detail that is introduced as a
project plan is developed.
• Principle #8. Define how you intend to ensure quality. The
plan should identify how the software team intends to
ensure quality.
• Principle #9. Describe how you intend to accommodate
change. Even the best planning can be obviated by
uncontrolled change.
• Principle #10. Track the plan frequently and make
adjustments as required. Software projects fall behind
schedule one day at a time. 19
Modeling Principles
• In software engineering work, two classes
of models can be created:
• Requirements models (also called analysis models)
represent the customer requirements by
depicting the software in three different
domains: the information domain, the
functional domain, and the behavioral domain.
21
Design Modeling Principles
• Principle #1. Design should be traceable to the requirements model.
• Principle #2. Always consider the architecture of the system to be
built.
• Principle #3. Design of data is as important as design of processing
functions.
• Principle #5. User interface design should be tuned to the needs of
the end-user. However, in every case, it should stress ease of use.
• Principle #6. Component-level design should be functionally
independent.
• Principle #7. Components should be loosely coupled to one another
and to the external environment.
• Principle #8. Design representations (models) should be easily
understandable.
• Principle #9. The design should be developed iteratively. With each
iteration, the designer should strive for greater simplicity.
22
Agile Modeling Principles
• Principle #1. The primary goal of the software team is to build software, not create models.
• Principle #2. Travel light—don’t create more models than you need.
• Principle #3. Strive to produce the simplest model that will describe the problem or the
software.
• Principle #4. Build models in a way that makes them amenable to change.
• Principle #5. Be able to state an explicit purpose for each model that is created.
• Principle #6. Adapt the models you develop to the system at hand.
• Principle #7. Try to build useful models, but forget about building perfect models.
• Principle #8. Don’t become dogmatic about the syntax of the model. If it communicates
content successfully, representation is secondary.
• Principle #9. If your instincts tell you a model isn’t right even though it seems okay on paper,
you probably have reason to be concerned.
• Principle #10. Get feedback as soon as you can.
23
Construction Principles
29