Software Engineering Practice
1. Software engineering practice
2. Communication practices
3. Planning practices
4. Analysis modeling practices
5. Design modeling practices
6. Construction practices
7. Deployment practices
The Essence of Problem Solving
1. Understand the problem (communication and analysis)
- Who has a stake in the solution to the problem?
- What are the unknowns (data, function, behavior)?
- Can the problem be compartmentalized?
- Can the problem be represented graphically?
2. Plan a solution (planning, modeling and software design)
- Have you seen similar problems like this before?
- Has a similar problem been solved and is the solution reusable?
- Can subproblems be defined and are solutions available for the subproblems?
3. Carry out the plan (construction; code generation)
- Does the solution conform to the plan? Is the source code traceable back to the design?
- Is each component of the solution correct? Has the design and code been reviewed?
4. Examine the results for accuracy (testing and quality assurance)
- Is it possible to test each component of the solution?
- Does the solution produce results that conform to the data, function, and behavior that are required?
Seven Core Principles for Software Engineering
1. Remember the reason that the software exists
The software should provide value to its users and satisfy the requirements
2. Keep it simple, stupid (KISS)
All design and implementation should be as simple as possible
3. Maintain the vision of the project
A clear vision is essential to the project’s success
4. Others will consume what you produce
Always specify, design, and implement knowing that someone else will later have to understand and modify what you did
5. Be open to the future
Never design yourself into a corner; build software that can be easily changed and adapted
6. Plan ahead for software reuse
Reuse of software reduces the long-term cost and increases the value of the program and the reusable components
7. Think, then act
Placing clear, complete thought before action will almost always produce better results
Communication Principles
1. Listen to the speaker and concentrate on what is being said
2. Prepare before you meet by researching and understanding the problem
3. Someone should facility the meeting and have an agenda
4. Face-to-face communication is best, but also have a document or presentation to focus the discussion
5. Take notes and document decisions
6. Strive for collaboration and consensus
7. Stay focused on a topic; modularize your discussion
8. If something is unclear, draw a picture
9. Move on to the next topic a) after you agree to something, b) if you cannot agree to something, or c) if a feature or function is unclear and cannot be clarified at the moment
10. Negotiation is not a contest or a game; it works best when both parties win
Planning Principles
1. Understand the scope of the project
2. Involve the customer in the planning activity
3. Recognize that planning is iterative; things will change
4. Estimate based only on what you know
5. Consider risk as you define the plan
6. Be realistic on how much can be done each day by each person and how well
7. Adjust granularity as you define the plan
8. Define how you intend to ensure quality
9. Describe how you intend to accommodate change
10. Track the plan frequently and make adjustments as required