On the criteria to be used in decomposing systems into modules
Communications of the ACM
Software Reliability Allocation Based on Structure, Utility, Price, and Cost
IEEE Transactions on Software Engineering
A facility for defining and manipulating generalized data structures
ACM Transactions on Database Systems (TODS)
Fault Tolerant Operating Systems
ACM Computing Surveys (CSUR)
Perspectives in Software Engineering
ACM Computing Surveys (CSUR)
ICSE '79 Proceedings of the 4th international conference on Software engineering
Design and principles of a fault tolerant system
ICSE '78 Proceedings of the 3rd international conference on Software engineering
Concurrent software system design supported by SARA at the age of one
ICSE '78 Proceedings of the 3rd international conference on Software engineering
A place for assembler in structured programming
SIGCSE '77 Proceedings of the seventh SIGCSE technical symposium on Computer science education
Specialization of SARA for software synthesis
Proceedings of the Symposium on Design Automation and Microprocessors
Error resynchronization in producer-consumer systems
SOSP '75 Proceedings of the fifth ACM symposium on Operating systems principles
An approach to error-resistant software design
ICSE '76 Proceedings of the 2nd international conference on Software engineering
On structuring operating systems with monitors
ACM SIGOPS Operating Systems Review
An approach for categorizing end user programmers to guide software engineering research
WEUSE I Proceedings of the first workshop on End-user software engineering
Classics in software engineering
IEEE Transactions on Computers
Hi-index | 0.00 |
This paper assumes software structure to be characterized by the interfaces between subsystems or modules. Reliability is considered to be a measure of the extent to which the system can be expected to deliver usable services when those services are demanded. It is argued that reliability and correctness (in the sense used in current computer literature) are not synonyms. The differences suggest techniques by which the reliability of software can be improved even while the production of correct software remains beyond our reach. In general, the techniques involve considering certain unpleasant facts of life at an early stage in the design process, the stage where the structure is determined, rather than later. An appendix gives some specific examples of questions which, if they are thoughtfully considered early in the design, can lead to more reliable systems.