Software Engineering & Object-Oriented Analysis & Design β Software Process and Requirements, NEC licence examination syllabus (Nepal Engineering Council).
Computer-Aided Software Engineering (CASE)
Tools that support the software process β and why the 1990s promise of automation largely failed.
π Where this lives: CASE as a category is dead, but every tool in it survives, unbundled. The 1990s vision was one integrated environment that generated code from diagrams; what actually won was a loose collection of best-in-class tools glued by version control β an IDE, a linter, a CI server, an issue tracker, a profiler. The lesson is about integration strategy: monolithic suites lose to interoperable pieces, in tooling as much as in architecture. Meanwhile the original promise β generate the code from a model β is being attempted again by AI coding assistants, with the same open question about whether the generated artefact or the model is the source of truth. Search "why CASE tools failed model driven development".
Classification
BY POSITION IN THE PROCESS:
UPPER CASE (front-end)
supports the early phases: planning, requirements, analysis,
design
Β· diagram editors (DFD, ER, UML), requirement management,
prototyping, screen designers
LOWER CASE (back-end)
supports implementation and maintenance
Β· code generators, compilers, debuggers, test tools,
reverse-engineering tools
INTEGRATED CASE (I-CASE)
both, sharing a common repository so a change in the design
propagates to the code and vice versa
Β· this was the 1990s ambition, and it is where the category
failed
BY FUNCTION:
DIAGRAMMING draw and edit models
QUERY & REPORT interrogate the repository
DICTIONARY the central store of names, types, meanings
ANALYSIS & DESIGN check models for consistency and
completeness
CODE GENERATION produce source from a model
REVERSE ENGINEERING produce a model from existing source
REENGINEERING restructure existing code
DOCUMENTATION generate documents from the repository
CONFIGURATION MGT version control, build, release
TESTING test-case generation, coverage, execution
PROJECT MGT estimation, scheduling, tracking
METRICS measure size, complexity, quality
THE CENTRAL REPOSITORY is the architectural heart of I-CASE:
one store holding requirements, models, code, tests and their
RELATIONSHIPS, so that
Β· a requirement can be TRACED to the design element and code
that implement it and the test that verifies it
Β· a change can be assessed for impact before being made
Β· consistency can be checked automatically
That traceability is genuinely valuable and is still required
in regulated industries β which is why requirements-management
tools (DOORS, Jama, Polarion) remain a real market even though
"CASE" is not.
Forward and reverse engineering
FORWARD ENGINEERING
the normal direction: requirements β design β code.
CODE GENERATION from a model is the CASE promise.
β works well for repetitive, structured artefacts β
database schema from an ER model, API stubs from an
interface definition, boilerplate from an ORM
β fails for behaviour: a diagram that fully specifies logic
is as complex as the code, so nothing is saved. This is the
key reason full code generation failed.
REVERSE ENGINEERING
code β model. Recover the design of a system whose
documentation is lost or never existed.
β essential for LEGACY SOFTWARE (from the characteristics
topic): the business rules exist only in the code
β recovers STRUCTURE but not INTENT. A tool can produce a
class diagram; it cannot tell you why the design is that
shape or which parts are accidental.
RESTRUCTURING
code β better code, same functionality and same abstraction
level. Automated reformatting, dead-code removal, control-flow
simplification.
REENGINEERING
the full cycle: reverse engineer to recover the design,
improve it, then forward engineer to new code. Expensive, and
the honest alternative to a rewrite.
reengineering = reverse engineering
+ restructuring
+ forward engineering
ROUND-TRIP ENGINEERING β keep model and code synchronised in
both directions.
β THE PROBLEM THAT KILLED IT: which one is the source of
truth? If both can be edited, they diverge, and merging a
diagram is far harder than merging text. Every tool that
tried this eventually forced one direction to win.
The modern resolution is to make the CODE authoritative and
GENERATE diagrams from it on demand β which is why tools like
PlantUML, Mermaid and Doxygen won over graphical modellers.
A diagram in version control as text is diffable; a binary
model file is not.
Why the category failed, and what replaced it
WHAT WENT WRONG WITH I-CASE:
1. THE MODEL/CODE SYNCHRONISATION PROBLEM (above). Two
representations of one truth always diverge.
2. COST AND LOCK-IN. Tools were expensive, proprietary, and
stored work in formats only they could read. When the
vendor failed, so did your archive.
3. THE ABSTRACTION DID NOT PAY. Specifying behaviour
graphically is not simpler than specifying it textually β
it is usually harder, because text has better tooling
(diff, merge, search, grep).
4. PROCESS RIGIDITY. Tools encoded one methodology and
resisted any other, arriving just as the industry moved
toward lighter processes.
5. NOT INTEGRATED WITH THE REAL WORKFLOW. Developers lived in
editors and compilers; CASE lived elsewhere and had to be
visited.
WHAT ACTUALLY WON β the same functions, unbundled and
integrated through version control:
CASE category what shipped
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
diagramming PlantUML, Mermaid, draw.io
(text-based, diffable)
central repository GIT β the code IS the repository
analysis & design check linters, type checkers, static
analysis (ESLint, mypy, SonarQube)
code generation scaffolding, ORMs, OpenAPI codegen,
protobuf
reverse engineering IDE call hierarchies, Doxygen,
dependency graphs
configuration management git, GitHub/GitLab
testing JUnit/pytest, coverage tools, CI
project management Jira, Linear, GitHub Projects
metrics SonarQube, CodeClimate
documentation docs-as-code in the repository
THE PATTERN: each function survived; the INTEGRATION strategy
changed from "one vendor's repository" to "plain text files in
git, many tools reading them". That is why "docs as code" and
"diagrams as code" are now the default advice.
WHAT CASE GOT RIGHT, and is worth keeping:
Β· TRACEABILITY from requirement to test is genuinely valuable
Β· a single source of truth for names and definitions prevents
whole classes of misunderstanding
Β· automating the mechanical parts of engineering is correct;
the mistake was believing DESIGN is mechanical
CASE ENVIRONMENT vs WORKBENCH vs TOOL β the standard taxonomy:
TOOL one function (a debugger)
WORKBENCH several integrated tools for one activity
(an IDE)
ENVIRONMENT a complete set covering the whole process
(the I-CASE ambition)
The synchronisation failure is worth generalising: any system with two editable representations of one truth will diverge. It is the same problem as a cache without invalidation, denormalised data without a rebuild path, and documentation that repeats what the code says. The durable fix is always the same β pick one authoritative source and derive the other.
π Go further: the CASE dream is being retried right now with LLM coding assistants, and the unresolved question is identical: if a prompt or specification generates the code, which is the artefact you maintain? Teams that keep editing the generated code have the round-trip problem back; teams that keep the specification authoritative have to accept regenerating everything. The one place model-driven development genuinely succeeded is where the model is declarative and narrow β SQL schemas, protobuf definitions, Terraform, infrastructure as code β which supports the conclusion that the abstraction must be simpler than the code to be worth having. Search "model driven engineering where it works".
π‘ Exam angle: classify CASE tools as upper (front-end), lower (back-end) and integrated (I-CASE), and list functions by category. Explain the central repository and why it enables traceability. Define forward engineering, reverse engineering, restructuring and reengineering β the standard question is the relationship: reengineering = reverse + restructure + forward. Know the tool / workbench / environment taxonomy. A strong answer explains why full code generation failed: specifying behaviour graphically is no simpler than coding it, and two editable representations always diverge.
Syllabus points
CASE tools and categories
Create a free account to tick topics off, take notes as you read, watch the video lessons and get a day-by-day study plan built around your exam date.
Related topics in Software Process and Requirements