Advanced Software Development

Chapter 1
Professional Software Engineering Foundations

Bachelors Program in Computer Science Engineering
Advanced Software Development   •   Bachelor

Professional Software Engineering Foundations

Introduction

Software is no longer an isolated technical artifact. It is part of banking, transportation, healthcare, education, government, manufacturing, entertainment, and scientific research. A software product may include source code, data, documentation, deployment infrastructure, operational procedures, legal constraints, and the people who use and maintain it. Consequently, professional software engineering is concerned not only with programming, but also with understanding problems, managing complexity, coordinating teams, assuring quality, and delivering sustainable systems.

Software engineering is the systematic, disciplined, and measurable application of engineering principles to the development, operation, and maintenance of software. The term emphasizes responsibility and repeatability. A professional engineer must be able to explain why a design is appropriate, identify its assumptions and risks, evaluate quality, and adapt the process to changing circumstances.

This chapter establishes foundational concepts for advanced software development. It introduces software engineering terminology, abstraction, modularity, complexity, quality attributes, socio-technical systems, and major software development lifecycle models. It also compares iterative, incremental, Agile, and plan-driven approaches and shows how these ideas guide practical engineering decisions.

Learning Objectives

After studying this chapter, you should be able to:

  1. Distinguish important software engineering terms and explain their professional significance.
  2. Use abstraction and modularity to manage software complexity.
  3. Explain essential internal and external software quality attributes.
  4. Analyze software as a socio-technical system rather than code alone.
  5. Compare plan-driven, iterative, incremental, and Agile lifecycle models.
  6. Select and tailor a development process for a particular project context.
  7. Evaluate engineering decisions using risk, feedback, quality, and stakeholder considerations.

1. Software Engineering as an Engineering Discipline

A software system is a collection of programs, configuration data, documentation, interfaces, and operational information that together provide capabilities to users or other systems. A software product is a system delivered to customers or users. A software service provides capabilities continuously, often through a network, and may be updated without a traditional product release.

Software engineering differs from programming in scope. Programming focuses primarily on expressing computational solutions in code. Software engineering includes:

  • requirements discovery and analysis;
  • architecture and detailed design;
  • implementation and integration;
  • verification and validation;
  • configuration and change management;
  • deployment and operations;
  • maintenance, evolution, and retirement; and
  • communication, planning, governance, and professional judgment.

A requirement is a needed capability, condition, or constraint. Functional requirements describe what a system should do; non-functional requirements describe qualities or constraints, such as response time, security, or legal compliance. A specification is a precise statement of required behavior or constraints. A design describes how the system will satisfy those requirements.

Verification asks whether the product was built according to its specified requirements: “Are we building the product right?” Validation asks whether the resulting product satisfies real stakeholder needs: “Are we building the right product?” Testing contributes to both, but neither verification nor validation is limited to testing. Reviews, analysis, demonstrations, prototypes, usability studies, and operational evaluation are also relevant.

Software engineering is constrained by the project’s scope, schedule, budget, people, technology, regulations, and risk tolerance. These constraints interact. For example, reducing schedule may require additional people, reduced scope, automation, or increased technical risk. There is no universally optimal process; professional engineering involves making and revisiting contextual trade-offs.

2. Essential Terminology and Levels of Description

Software is described at several levels:

  • Problem domain: the real-world area in which the problem exists, such as banking or logistics.
  • Solution domain: the technical structures used to address the problem.
  • Architecture: the significant structures, components, interfaces, deployment arrangements, and principles governing a system.
  • Component: a replaceable part of a system with defined interfaces and responsibilities.
  • Module: a unit of implementation or organization, often designed to hide internal details.
  • Interface: the externally visible operations, data, protocols, or contracts through which elements interact.
  • Dependency: a relationship in which one element relies on another.
  • Technical debt: the future cost created by expedient or incomplete technical decisions. Like financial debt, it can be deliberate or accidental and may produce benefits initially, but it incurs repayment costs.
  • Defect: an imperfection in a work product, such as incorrect code or an incomplete requirement.
  • Failure: externally observable behavior that does not meet a requirement or expectation.
  • Fault: an underlying cause that can produce a failure when executed under suitable conditions.

A useful distinction is between a system’s state and its behavior. State is the information held at a point in time; behavior is how the system responds to events and inputs. An interface should specify observable behavior without unnecessarily exposing internal state. This separation supports change and reduces accidental dependencies.

3. Abstraction: Controlling What Must Be Considered

Abstraction is the deliberate representation of essential characteristics while suppressing unnecessary detail. It allows engineers to reason about a system at an appropriate level. For example, a payment interface may expose authorize(amount, account) without revealing database indexing, encryption libraries, or network retry logic.

Abstraction occurs at multiple levels:

  1. Conceptual abstraction: identifies domain concepts such as Customer, Order, or Invoice.
  2. Architectural abstraction: identifies major subsystems and their interactions.
  3. Interface abstraction: specifies services without exposing implementation.
  4. Data abstraction: represents data through meaningful operations rather than storage details.
  5. Control abstraction: represents a complex control strategy through a simpler operation, such as retryWithBackoff().

Good abstraction has a clear purpose, stable responsibilities, and an interface that is smaller than the implementation it hides. Poor abstraction may hide essential behavior, create misleading names, or force clients to understand internal details. An abstraction is therefore not simply “more general” or “less code”; it is a carefully selected boundary for reasoning and change.

A practical test is to ask: if the implementation changes, which clients should remain unaffected? If many unrelated clients must change, the abstraction or interface may be poorly designed.

4. Modularity and Separation of Concerns

Modularity divides a system into units that can be understood, developed, tested, deployed, and changed with limited impact on other units. A module should have a coherent responsibility and a controlled set of dependencies.

Two classic properties help evaluate modularity:

  • Cohesion: the degree to which the responsibilities within a module belong together. High cohesion is desirable.
  • Coupling: the degree of dependency between modules. Low coupling is generally desirable, provided necessary collaboration remains possible.

These are not absolute rules. A highly distributed system may reduce code-level coupling but introduce network, operational, and consistency dependencies. Therefore, coupling must be evaluated at the level relevant to the decision.

Separation of concerns means organizing a system so that different concerns—such as authentication, business rules, persistence, presentation, logging, and error handling—can be considered separately. Layered architectures, service boundaries, adapters, and dependency inversion are common techniques.

A useful module contract identifies:

  • provided services;
  • required services;
  • input and output data;
  • preconditions and postconditions;
  • error behavior;
  • performance and security expectations; and
  • ownership and versioning rules.

For example, an inventory module might guarantee that a successful reservation reduces available stock exactly once. The contract should define what happens if the product is unavailable, a request is duplicated, or the persistence service is unreachable.

Modularity has costs. Too few modules create large, difficult-to-change units; too many create coordination overhead, excessive interfaces, and integration complexity. The appropriate decomposition follows change patterns, domain responsibilities, team boundaries, performance constraints, and operational needs.

5. Complexity and Technical Reasoning

Software complexity arises from the number and interaction of concepts, states, dependencies, rules, exceptions, and external constraints. A system can be difficult even when its code is short if its behavior depends on many interacting conditions.

Two forms are especially useful:

  • Essential complexity comes from the inherent difficulty of the problem domain, such as tax legislation or medical decision rules.
  • Accidental complexity is introduced by tools, poor design, unnecessary dependencies, unclear requirements, duplication, or inadequate processes.

Engineering cannot eliminate essential complexity, but it can reduce accidental complexity and represent essential complexity clearly.

Complexity is often assessed qualitatively through dependency maps, architecture reviews, scenario analysis, and change-impact analysis. Quantitative measures can supplement judgment. For a module with control-flow graph complexity, the cyclomatic complexity is commonly expressed as:

M = E − N + 2P

where M is cyclomatic complexity, E is the number of control-flow edges, N is the number of control-flow nodes, and P is the number of connected components, usually P = 1 for a single routine. Under the standard graph interpretation, M gives the number of linearly independent paths and can help estimate a minimum basis set of paths for structural testing. It is not a complete measure of maintainability, correctness, or overall system complexity.

For example, if a routine’s control-flow graph has 12 edges, 10 nodes, and one connected component, then M = 12 − 10 + 2(1) = 4. This suggests four independent paths in the graph, not four total execution paths. Loops and data interactions may still make exhaustive testing impractical.

Complexity management practices include:

  • divide responsibilities according to stable concepts;
  • minimize unnecessary state;
  • make invariants explicit;
  • use meaningful names and contracts;
  • remove duplication where it creates inconsistency;
  • automate repetitive verification;
  • document decisions and assumptions;
  • keep dependencies visible; and
  • refactor continuously rather than postponing all improvement.

6. Software Quality Attributes

Quality is the degree to which a software product satisfies stated and implied needs. A quality attribute is a measurable or assessable characteristic of a system. Quality is multidimensional: improving one attribute can reduce another. For example, stronger encryption may increase security but affect performance or usability.

Important quality attributes include:

AttributeMeaningTypical evidence or measure
Functional suitabilityThe system provides required functions correctly and completelyAcceptance tests, defect trends
ReliabilityThe system performs consistently under stated conditionsFailure frequency, recovery behavior
AvailabilityThe system is operational when requiredUptime and service monitoring
Performance efficiencyResources and response times are acceptableLatency, throughput, CPU or memory use
UsabilityIntended users can learn and operate the system effectivelyTask success, error rate, user studies
SecurityConfidentiality, integrity, authenticity, and availability are protectedThreat analysis, penetration testing
MaintainabilityThe system can be analyzed, modified, and tested economicallyChange effort, coupling, testability
PortabilityThe system can operate in other environmentsMigration effort, platform coverage
ScalabilityCapacity can grow while meeting performance objectivesLoad tests and capacity models
AccessibilityPeople with diverse abilities can use the systemConformance evaluation and user testing

Quality attributes must be converted into testable scenarios. “The system shall be fast” is weak. “For 95% of authenticated search requests under a load of 500 requests per second, the response time shall be no greater than 400 milliseconds” is more useful, provided the measurement method, environment, and workload are defined.

Availability is often discussed using the relationship:

Availability = MTBF ÷ (MTBF + MTTR)

Here, MTBF is mean time between failures and MTTR is mean time to repair or restore service. Both must use the same time unit, and the expression assumes a long-run operational model in which failure and restoration behavior can reasonably be summarized by these averages. If MTBF is 99 hours and MTTR is 1 hour, availability is 99 ÷ 100 = 0.99, or 99%. This simple measure does not capture planned maintenance, degraded service, correlated failures, or differing failure severities.

Quality must be built into the lifecycle. Reviews, static analysis, automated tests, secure design, observability, usability evaluation, and operational rehearsals are examples of preventive and evaluative activities. Testing alone cannot compensate for ambiguous requirements or an unsafe architecture.

7. Software as a Socio-Technical System

A socio-technical system combines technical elements with people, organizational structures, processes, regulations, and culture. Software behavior is influenced by users, administrators, managers, vendors, business policies, and surrounding systems. A technically elegant system can fail if users reject it, operators cannot support it, or organizational incentives encourage unsafe workarounds.

The system boundary should therefore include relevant human and organizational elements. Stakeholder analysis asks:

  • Who uses the system directly and indirectly?
  • Who owns data, decisions, and risks?
  • Who operates, maintains, audits, or regulates it?
  • Which groups may be disadvantaged by its behavior?
  • What incentives or constraints shape actual use?

Requirements are often negotiated rather than discovered as fixed facts. Different stakeholders may use the same term differently, value different outcomes, or have conflicting priorities. Prototypes, scenarios, workshops, observation, and usability evaluation help reveal tacit needs.

Socio-technical risks include automation bias, unclear accountability, privacy violations, discriminatory outcomes, unsafe human-computer interaction, and operational overload. In systems that use machine learning or generative AI, additional concerns include data provenance, model drift, explainability, prompt or data leakage, and the need for human oversight. AI should be treated as a component whose behavior, limitations, and failure modes require engineering controls; it is not a substitute for requirements, testing, or accountability.

Professional practice also includes ethical responsibilities. Engineers should protect public safety, respect privacy, communicate significant risks, avoid deceptive claims, preserve confidentiality, and disclose conflicts of interest. Legal compliance is necessary but not always sufficient: a system may be lawful yet harmful, inaccessible, or unfair.

8. Software Lifecycle Models

A software lifecycle model describes how development activities, artifacts, feedback, and decisions are organized. It is a planning and communication model, not a guarantee of project success.

Plan-Driven Processes

In a plan-driven process, substantial analysis and planning occur before implementation. Requirements, architecture, schedule, responsibilities, and verification activities are documented and controlled. A sequential waterfall model is a well-known example, although real projects often use staged or overlapping variants.

Plan-driven approaches are useful when requirements are stable, contractual obligations are significant, safety evidence is required, interfaces must be coordinated early, or change is expensive. Their strengths include traceability, predictability of planned activities, and explicit governance. Their weaknesses include delayed user feedback, the risk of building the wrong product, and expensive changes when assumptions are discovered late.

Plan-driven does not mean “no iteration.” Engineering reviews, prototypes, test cycles, and controlled revisions can occur within a plan-driven framework.

Iterative Development

Iterative development repeats activities so that understanding and the product improve over successive cycles. Each iteration may revisit requirements, architecture, design, implementation, and evaluation. Iteration is valuable when the problem is uncertain or risks must be explored early.

The main benefit is learning. A prototype may reveal that users misunderstand a workflow, or a technical spike may show that a proposed integration is infeasible. Iteration also allows architectural risks to be addressed before the system is fully built. However, iteration can become ineffective if each cycle produces only discussion, if goals are unclear, or if feedback is ignored.

Incremental Development

Incremental development delivers the system in functional portions called increments. Each increment adds useful capability to an integrated product. An increment should be engineered to a suitable quality level, not merely be unfinished code.

Iteration concerns repeated learning and refinement; increment concerns staged delivery of capability. They often occur together, but they are conceptually different. A team may iterate on the design of an increment, and a project may deliver increments using a plan-driven schedule.

Incremental delivery reduces the time before stakeholders receive value and makes prioritization possible. It also creates integration, architecture, migration, and release-management challenges. The team must establish a coherent product foundation and avoid a sequence of disconnected demonstrations.

Agile Processes

Agile development emphasizes early and continuous delivery of valuable software, collaboration with customers, responsiveness to change, and frequent feedback. Agile is a family of approaches rather than a single prescriptive method. Scrum, Extreme Programming, Kanban, and hybrid approaches apply these principles differently.

Common Agile practices include a prioritized product backlog, short timeboxed cycles, continuous integration, automated regression testing, regular demonstrations, retrospectives, and close collaboration between technical and domain participants. Agile teams seek a working increment that is usable and evaluated, not merely a collection of documents or partially integrated components.

Agile does not mean absence of architecture, planning, documentation, governance, or quality control. It means that these activities are performed at an appropriate level and revisited as knowledge changes. Agile can be difficult when customer access is limited, regulatory evidence is extensive, teams are geographically disconnected, or organizational incentives reward local optimization rather than product outcomes.

9. Comparing and Selecting Processes

The choice of lifecycle should be based on uncertainty, risk, change cost, regulatory obligations, team capability, system criticality, stakeholder availability, and deployment constraints.

ContextOften suitable emphasis
Stable requirements and formal contractPlan-driven governance with controlled change
Uncertain user needsIterative discovery and prototypes
Need for early business valueIncremental delivery
Rapidly changing marketAgile feedback and short delivery cycles
Safety-critical systemRigorous assurance, traceability, reviews, and controlled iteration
Complex legacy integrationIncremental migration, risk-driven experiments, and operational rehearsal
Continuous online serviceAgile development combined with DevOps and strong observability

A hybrid process is often appropriate. For example, a medical system may use plan-driven hazard analysis and traceability while using iterative prototyping and incremental implementation. The important question is not whether a process has an appealing label, but whether it provides adequate feedback, control, evidence, and learning for the project’s risks.

Process tailoring should be explicit. A team should document why it selected a lifecycle, what practices are mandatory, how changes are approved, what evidence is required, and how quality will be measured. Process should serve product risk rather than become ceremonial activity.

10. Integration of Engineering Practices

Lifecycle models become effective when supported by disciplined technical practices:

  • Version control records changes and enables collaboration and recovery.
  • Continuous integration frequently integrates changes and runs automated checks.
  • Continuous delivery or deployment automates release preparation or production deployment subject to appropriate controls.
  • Code review provides independent examination of correctness, security, maintainability, and consistency.
  • Automated testing provides rapid, repeatable evidence, but should be supplemented by exploratory and system-level evaluation.
  • Infrastructure as code makes environments reproducible and reviewable.
  • Observability uses logs, metrics, traces, and alerts to reveal operational behavior.
  • Configuration and change management preserve the identity and integrity of released artifacts.
  • Retrospectives and post-incident reviews convert experience into process improvement without unfairly blaming individuals.

These practices create feedback loops. A change is proposed, reviewed, integrated, tested, deployed, observed, and improved. Effective feedback must be timely and actionable; a report arriving months after the relevant decision has limited preventive value.

11. Illustrative Case: University Online Assessment Platform

Background

A university decides to replace a fragmented online assessment process. The new platform must support question banks, timed examinations, accessibility accommodations, grading workflows, and integration with the student information system.

Problem

Stakeholders initially request “a secure and easy-to-use examination system.” This statement is insufficient. Students need reliable access and clear feedback; instructors need efficient authoring and grading; administrators need audit records; accessibility staff need compatible interfaces; and legal officers require privacy protection. Examination periods create highly variable loads, and failure can affect academic progression.

Analysis

The project identifies the following risks:

  • uncertain student and instructor workflows;
  • peak demand during examination windows;
  • privacy and examination-integrity requirements;
  • integration failures with identity and student-record systems;
  • accessibility barriers;
  • recovery requirements if a service interruption occurs.

The team converts these into scenarios. For example, under a defined load, a student should be able to save an answer within a specified response-time objective; a disconnected client should recover without duplicating a submission; and an authorized accessibility accommodation should be applied without exposing sensitive information to unauthorized users.

Approach and Solution

A hybrid lifecycle is selected. Early iterative prototypes test navigation, accommodation workflows, and instructor authoring with representative users. The platform is then delivered incrementally: identity and course enrollment, assessment authoring, student delivery, submission and recovery, grading, and reporting.

Plan-driven controls are applied to privacy, auditability, release approval, and integration contracts. Automated tests run in continuous integration. Load tests model examination peaks. Threat modeling addresses account takeover, unauthorized access, data leakage, and tampering. Accessibility evaluation includes automated checks and testing with users who rely on assistive technologies. Operational rehearsals verify backup restoration and incident procedures.

Outcome

The prototype reveals that students interpret a “submit” button differently from instructors and that a timer displayed without a clear time zone creates confusion. These issues are corrected before large-scale deployment. Incremental delivery allows the university to pilot the authoring and submission functions with one department while the grading and reporting features continue development.

Learning Points

The case demonstrates that requirements are socio-technical, quality attributes must be expressed as scenarios, and lifecycle choices should reflect risk. Iteration reduces uncertainty about usability; increments deliver value and enable piloting; plan-driven controls provide traceability and assurance. No single model provides all benefits automatically.

12. Challenges, Limitations, and Best Practices

Software projects face uncertainty that cannot be removed entirely. Requirements change because markets, regulations, technologies, and organizational priorities change. Estimates are uncertain because work includes discovery and rework, not merely code production. Metrics can be gamed when used as targets without context. Agile ceremonies can become mechanical, while plan-driven documentation can become disconnected from reality.

Best practices include:

  1. Establish a shared problem statement and identify affected stakeholders.
  2. Separate essential requirements from assumptions and preferences.
  3. Make quality attributes explicit and measurable where possible.
  4. Address the highest technical and socio-technical risks early.
  5. Design interfaces and module contracts around responsibilities and change boundaries.
  6. Integrate and test continuously, while retaining appropriate exploratory evaluation.
  7. Treat security, privacy, accessibility, and safety as design concerns rather than final inspections.
  8. Record important decisions, alternatives, assumptions, and consequences.
  9. Use metrics for learning and control, not simplistic individual ranking.
  10. Tailor the lifecycle and explain the rationale.
  11. Monitor production behavior and use incidents as evidence for improvement.
  12. Retire obsolete features and systems responsibly, including data retention and migration planning.

Chapter Summary

Professional software engineering applies disciplined engineering judgment to the complete software lifecycle. It encompasses requirements, architecture, design, implementation, verification, validation, operation, maintenance, governance, and communication. Abstraction reduces the amount of detail that must be considered at once, while modularity organizes responsibilities and controls dependencies through cohesion, coupling, interfaces, and contracts.

Software complexity includes essential difficulty in the domain and accidental difficulty introduced by poor structures or processes. Quality is multidimensional and includes functionality, reliability, performance, usability, security, maintainability, portability, scalability, and accessibility. Quality attributes should be expressed as observable scenarios and addressed throughout development.

Software is a socio-technical system: people, organizations, policies, regulations, and culture influence its outcomes. Ethical and professional engineering therefore includes privacy, safety, fairness, accessibility, accountability, and transparent communication of risk.

Plan-driven processes provide structure, traceability, and control; iterative processes support learning; incremental processes deliver capability in stages; and Agile processes emphasize collaboration, frequent feedback, and responsiveness to change. These approaches are not mutually exclusive. A responsible engineer selects and tailors a lifecycle according to uncertainty, risk, change cost, criticality, stakeholder access, and required evidence.

Key Terms

Software engineering: The disciplined application of engineering principles to software development, operation, and maintenance.

Requirement: A needed capability, condition, or constraint.

Specification: A precise statement of required behavior or constraints.

Verification: Evaluation of whether a product satisfies specified requirements.

Validation: Evaluation of whether a product satisfies stakeholder needs.

Abstraction: Representation of essential characteristics while suppressing unnecessary detail.

Modularity: Division of a system into units with controlled responsibilities and dependencies.

Cohesion: The degree to which a module’s responsibilities belong together.

Coupling: The degree of dependency between modules.

Interface: The externally visible means by which system elements interact.

Architecture: Significant structures, relationships, interfaces, and principles of a system.

Essential complexity: Difficulty inherent in the problem domain.

Accidental complexity: Difficulty introduced by implementation, tools, or poor organization.

Quality attribute: A characteristic such as security, performance, or maintainability.

Socio-technical system: A system comprising technical elements and interacting human, organizational, and social elements.

Plan-driven process: A lifecycle emphasizing advance planning, documentation, and controlled change.

Iterative development: Repeated cycles of development and learning.

Incremental development: Delivery of functionality in integrated, usable portions.

Agile development: An adaptive approach emphasizing collaboration, feedback, frequent delivery, and responsiveness to change.

Technical debt: Future cost resulting from expedient or incomplete technical decisions.

Review Questions

Short Answer Questions

  1. What is the difference between verification and validation?
  2. Define abstraction and give one software engineering example.
  3. Distinguish cohesion from coupling.
  4. What is meant by a socio-technical system?
  5. State one major difference between iterative and incremental development.

Long Answer Questions

  1. Explain how abstraction, modularity, interfaces, cohesion, and coupling work together to manage software complexity.
  2. Discuss at least six software quality attributes and explain how each could be evaluated.
  3. Compare plan-driven and Agile processes, including situations in which each may be appropriate.
  4. Explain why software quality cannot be assured through final-stage testing alone.
  5. Discuss the ethical and organizational responsibilities of engineers developing systems that process personal data.

Analytical / Application Questions

  1. A team is developing a public-sector benefits system with strict audit requirements but frequently changing user needs. Propose a lifecycle approach and justify which plan-driven, iterative, incremental, and Agile practices you would combine.
  2. A payment service has an MTBF of 199 hours and an MTTR of 1 hour. Using the stated availability formula, calculate its availability and explain two limitations of interpreting this value alone.
  3. Analyze the university assessment-platform case. Identify two essential complexities, two accidental complexities, three quality-attribute scenarios, and the engineering practices that address them.

Multiple Choice Questions with Answers

Question 1

Which statement best distinguishes verification from validation?

A. Verification evaluates stakeholder satisfaction, while validation checks coding style.

B. Verification checks conformance to specified requirements, while validation checks whether stakeholder needs are met.

C. Verification occurs only after deployment, while validation occurs only before coding.

D. Verification concerns security only, while validation concerns performance only.

Correct Answer: B. Verification checks conformance to specified requirements, while validation checks whether stakeholder needs are met.

Question 2

Which design property indicates that the responsibilities within a module strongly belong together?

A. High coupling

B. Low cohesion

C. High cohesion

D. High duplication

Correct Answer: C. High cohesion

Question 3

What is the principal purpose of abstraction?

A. To expose every implementation detail

B. To suppress irrelevant detail while retaining essential characteristics

C. To eliminate the need for requirements

D. To guarantee that software has no defects

Correct Answer: B. To suppress irrelevant detail while retaining essential characteristics

Question 4

A control-flow graph has 12 edges, 10 nodes, and one connected component. What is its cyclomatic complexity?

A. 2

B. 3

C. 4

D. 5

Correct Answer: C. 4

Question 5

Which quality attribute concerns protection of confidentiality, integrity, authenticity, and availability?

A. Portability

B. Security

C. Usability

D. Maintainability

Correct Answer: B. Security

Question 6

Which statement about iterative and incremental development is correct?

A. Iteration means delivery of separate products, while increment means repeated learning only.

B. Iteration involves repeated refinement and learning, while increment involves staged delivery of capability.

C. They are identical terms with no conceptual distinction.

D. Neither approach permits stakeholder feedback.

Correct Answer: B. Iteration involves repeated refinement and learning, while increment involves staged delivery of capability.

Question 7

Which situation most strongly supports a plan-driven approach?

A. Requirements are unknown and users are continuously available for experiments.

B. A regulated system requires extensive traceability and controlled evidence.

C. A startup is testing an unproven market idea weekly.

D. A team is rapidly exploring several user-interface alternatives.

Correct Answer: B. A regulated system requires extensive traceability and controlled evidence.

Question 8

Using Availability = MTBF ÷ (MTBF + MTTR), what is the availability when MTBF is 99 hours and MTTR is 1 hour?

A. 0.90

B. 0.95

C. 0.98

D. 0.99

Correct Answer: D. 0.99

Question 9

Why is a software system described as socio-technical?

A. Because it contains only social-media features.

B. Because its outcomes depend on technical elements as well as people, organizations, processes, and regulations.

C. Because software cannot operate without artificial intelligence.

D. Because all technical decisions are made by government agencies.

Correct Answer: B. Because its outcomes depend on technical elements as well as people, organizations, processes, and regulations.

Question 10

Which practice most directly makes deployment environments reproducible and reviewable?

A. Infrastructure as code

B. Removing version control

C. Avoiding automated tests

D. Postponing integration until the final release

Correct Answer: A. Infrastructure as code

Advanced Software Development
Chapter 1 of 15