Specify
State what behavior, inputs, outputs, constraints, and failure conditions the software is responsible for.
Software organizes computation into programs that can be understood, translated, executed, tested, and changed. The discipline spans programming abstractions, language semantics, modular design, runtime systems, distributed execution, and evidence that behavior matches intent.
Writing source code is one stage. Software also has to be translated, executed in an environment, observed, repaired, and evolved as requirements and dependencies change.
State what behavior, inputs, outputs, constraints, and failure conditions the software is responsible for.
Encode that behavior using data, control flow, functions, modules, types, interfaces, and language constructs.
Interpret or compile source into forms the runtime and machine can execute, possibly through several intermediate representations.
Create processes, allocate memory, perform I/O, call services, update state, and interact with the operating environment.
Use tests, logs, traces, metrics, debugging, and user-visible outcomes to compare actual behavior with intended behavior.
Change requirements, dependencies, architecture, performance, and implementation while preserving the properties that still matter.
A representation interpreted according to a type or protocol: number, string, object, handle, address, token, message, or another unit of information.
Information that persists across operations. Where state lives and who may change it strongly shapes program behavior and complexity.
Rules that determine what executes next: sequence, branching, iteration, function calls, events, exceptions, scheduling, and concurrency.
A boundary that defines what one component promises to another while hiding implementation details that need not be shared.