02 - Software Construction

Class: CSCE-331


Notes:

1.1 What is Software Construction?

Definition and Metaphor

The Place of Construction in Software Development Software development involves numerous distinct activities. Construction is the central activity, often sandwiched between requirements/architecture and system testing,.

The activities in the software development process include:

Specific Construction Tasks Construction is not a single action but a collection of specific tasks, including:

What Construction is NOT While construction is central, it is distinct from other major software development phases. Important non-construction activities include:

Key Takeaway If software development were a dog, it would "nuzzle up to construction, wag its tail at design and testing, and bark at the other development activities". Construction is the hands-on implementation phase where the rubber meets the road.

Here are the comprehensive notes for Chapter 1.2: Why Is Software Construction Important?, continuing the format from the previous section.

1.2 Why Is Software Construction Important?

1. Construction comprises a large portion of software development

2. Construction is the central activity

3. Productivity varies significantly during construction

4. Source code is often the only accurate description of the software

5. Construction is the only activity guaranteed to be done

3.1 Importance of Prerequisites

The Role of Preparation in Quality

Barriers to Preparation Three common reasons programmers do not prepare adequately before coding:

  1. Lack of Expertise: Many developers lack training in upstream activities (requirements, planning, architecture) and therefore do not know how to perform them effectively.
  2. The "WISCA" Syndrome: "Why Isn't Sam Coding Anything?" There is often pressure from management to see immediate coding, as planning is not perceived as "work".
  3. The Urge to Code: Programmers often prefer the immediate gratification of coding over the abstract work of planning.

The Argument for Prerequisites When justifying preparation time to management, three appeals are effective:

Cost of Fixing Defects (Data) The cost to fix a defect rises dramatically the later it is detected:

Applicability to Modern/Iterative Projects

The "Boss-Readiness" Test To determine if a project is ready for construction, avoid self-fulfilling prophecies like "We'd better start coding right away because we're going to have a lot of debugging to do." Instead, aim for the state where: "We’ve investigated requirements and design so much that I can’t think of any major problems we’ll run into during coding or debugging.".

3.3 Problem-definition Prerequisite

Concept and Terminology

What is a Problem Definition?

The User’s Point of View

The Penalty of Neglect

3.4 Requirements Prerequisite

Definition and Terminology

Why Have Official Requirements? Explicit requirements are crucial for several reasons:

The Myth of Stable Requirements

Handling Requirements Changes During Construction Since change is inevitable, use these strategies to minimize the negative impact:

  1. Assess Quality: Use a checklist to evaluate the quality of your requirements. If they are not good enough, stop and fix them before proceeding.
  2. Communicate Costs: Make sure everyone knows the cost of changes. When a client requests a change, offer a revised schedule and cost estimate. This often converts "must haves" into "nice to haves".
  3. Establish Change-Control: Set up a formal procedure (e.g., a change-control board) to review and approve changes. This keeps you happy (changes happen at specific times) and the customer happy (their input is handled).
  4. Use Flexible Approaches: Utilize development approaches that accommodate change, such as evolutionary prototyping or evolutionary delivery (building in short cycles).
  5. Focus on Business Value: Evaluate changes based on the business case. Many "features" disappear when evaluated against their actual incremental business value.
  6. Dump the Project: If requirements are exceptionally bad or volatile, and other strategies fail, consider cancelling the project.

Requirements Checklist Highlights When evaluating requirements, consider these key areas:

4.1 Choice of Programming Language

The Impact of Language Choice The programming language selected for a project can significantly influence productivity and code quality.

The Sapir-Whorf Hypothesis

Language Expressiveness (Ratios) Different languages require different amounts of code to express the same functionality. Table 4-1 compares high-level languages to C code:

Brief Descriptions of Common Languages

4.4 Selection of Major Construction Practices

The Necessity of Choice

Key Decisions Checklist You should explicitly decide whether to include or exclude specific practices in the following areas before construction begins:

1. Coding Practices

2. Teamwork

3. Quality Assurance

4. Tools