Traditional engineering, also known as sequential engineering, is the process of marketing, engineering design, manufacturing, testing and production where each stage of the development process is carried out separately, and the next stage cannot start until the previous stage is finished. Therefore, the information flow is only in one direction, and it is not until the end of the chain that errors, changes and corrections can be relayed to the start of the sequence, causing estimated costs to be under predicted.
This can cause many problems; such as time consumption due to many modifications being made as each stage does not take into account the next. This method is hardly used today[citation needed], as the concept of concurrent engineering is more efficient.
Traditional engineering is also known as over the wall engineering as each stage blindly throws the development to the next stage over the wall.
Lean manufacturing[edit]
Traditional manufacturing has been driven by sales forecasts that companies need to produce and stockpile inventory to support. Lean manufacturing is based on the concept that production should be driven by the actual customer demands and requirements. Instead of pushing product to the marketplace, it is pulled through by the customers' actual needs.
Sequential engineering stages[edit]
- Research
- Design
- Manufacture
- Quality Control
- Distribution
- Sales
Disadvantages of sequential engineering[edit]
- This orderly step-by-step process will bring control to complex projects but is very slow.
- In today’s highly competitive market place this can lead to product failures and lost sales.[1]
See also[edit]
References[edit]
- ^'Archived copy'. Archived from the original on 2012-09-18. Retrieved 2012-09-21.CS1 maint: Archived copy as title (link)
Retrieved from 'https://en.wikipedia.org/w/index.php?title=Traditional_engineering&oldid=849222156'
Software development |
---|
Core activities |
Paradigms and models |
Methodologies and frameworks |
Supporting disciplines |
Practices |
Tools |
Standards and Bodies of Knowledge |
Glossaries |
The unmodified 'waterfall model'. Progress flows from the top to the bottom, like a cascading waterfall.
The waterfall model is a relatively linear sequentialdesign approach for certain areas of engineering design. In software development, it tends to be among the less iterative and flexible approaches, as progress flows in largely one direction ('downwards' like a waterfall) through the phases of conception, initiation, analysis, design, construction, testing, deployment and maintenance.
The waterfall development model originated in the manufacturing and construction industries; where the highly structured physical environments meant that design changes became prohibitively expensive much sooner in the development process. When first adopted for software development, there were no recognized alternatives for knowledge-based creative work.[1]
History[edit]
The first known presentation describing use of such phases in software engineering was held by Herbert D. Benington at the Symposium on Advanced Programming Methods for Digital Computers on 29 June 1956.[2] This presentation was about the development of software for SAGE. In 1983 the paper was republished with a foreword by Benington pointing out that the process was not in fact performed in a strict top-down fashion, but depended on a prototype.[1]
The first formal description of the waterfall model is often cited as a 1970 article by Winston W. Royce,[3][4] although Royce did not use the term waterfall in that article. Royce presented this model as an example of a flawed, non-working model; which is how the term is generally used in writing about software development—to describe a critical view of a commonly used software development practice.[5]
The earliest use of the term 'waterfall' may have been in a 1976 paper by Bell and Thayer.[6]
In 1985, the United States Department of Defense captured this approach in DOD-STD-2167A, their standards for working with software development contractors, which stated that 'the contractor shall implement a software development cycle that includes the following six phases: Preliminary Design, Detailed Design, Coding and Unit Testing, Integration, and Testing'.[7]
Model[edit]
In Royce's original waterfall model, the following phases are followed in order:
- System and software requirements: captured in a product requirements document
- Analysis: resulting in models, schema, and business rules
- Design: resulting in the software architecture
- Coding: the development, proving, and integration of software
- Testing: the systematic discovery and debugging of defects
- Operations: the installation, migration, support, and maintenance of complete systems
Thus the waterfall model maintains that one should move to a phase only when its preceding phase is reviewed and verified.
Various modified waterfall models (including Royce's final model), however, can include slight or major variations on this process.[3] These variations included returning to the previous cycle after flaws were found downstream, or returning all the way to the design phase if downstream phases deemed insufficient.
Supporting arguments[edit]
Time spent early in the software production cycle can reduce costs at later stages. For example, a problem found in the early stages (such as requirements specification) is cheaper to fix than the same bug found later on in the process (by a factor of 50 to 200).[8]
In common practice, waterfall methodologies result in a project schedule with 20–40% of the time invested for the first two phases, 30–40% of the time to coding, and the rest dedicated to testing and implementation. The actual project organisation needs to be highly structured. Most medium and large projects will include a detailed set of procedures and controls, which regulate every process on the project.[9]
A further argument for the waterfall model is that it places emphasis on documentation (such as requirements documents and design documents) as well as source code. In less thoroughly designed and documented methodologies, knowledge is lost if team members leave before the project is completed, and it may be difficult for a project to recover from the loss. If a fully working design document is present (as is the intent of Big Design Up Front and the waterfall model), new team members or even entirely new teams should be able to familiarise themselves by reading the documents.[10]
The waterfall model provides a structured approach; the model itself progresses linearly through discrete, easily understandable and explainable phases and thus is easy to understand; it also provides easily identifiable milestones in the development process. It is perhaps for this reason that the waterfall model is used as a beginning example of a development model in many software engineering texts and courses.[11]
It is argued that the waterfall model can be suited to projects where requirements and scope are fixed, the product itself is firm and stable, and the technology is clearly understood.[12]
Criticism[edit]
Clients may not know exactly what their requirements are before they see working software and so change their requirements, leading to redesign, redevelopment, and retesting, and increased costs.[13]
Designers may not be aware of future difficulties when designing a new software product or feature, in which case it is better to revise the design than persist in a design that does not account for any newly discovered constraints, requirements, or problems.[14]
Organisations may attempt to deal with a lack of concrete requirements from clients by employing systems analysts to examine existing manual systems and analyse what they do and how they might be replaced. However, in practice, it is difficult to sustain a strict separation between systems analysis and programming.[15] This is because implementing any non-trivial system will almost inevitably expose issues and edge cases that the systems analyst did not consider.
In response to the perceived problems with the pure waterfall model, modified waterfall models were introduced, such as 'Sashimi (Waterfall with Overlapping Phases), Waterfall with Subprojects, and Waterfall with Risk Reduction'.[8]
Some organisations, such as the United States Department of Defense, now have a stated preference against waterfall-type methodologies, starting with MIL-STD-498, which encourages evolutionary acquisition and Iterative and Incremental Development.[16]
While advocates of agile software development argue the waterfall model is an ineffective process for developing software, some sceptics suggest that the waterfall model is a false argument used purely to market alternative development methodologies.[17]
Rational Unified Process (RUP) phases acknowledge the programmatic need for milestones, for keeping a project on track, but encourage iterations (especially within Disciplines) within the Phases. La metro tap card number. RUP Phases are often referred to as 'waterfall-like'.[citation needed]
Modified waterfall models[edit]
In response to the perceived problems with the 'pure' waterfall model, many modified waterfall models have been introduced. These models may address some or all of the criticisms of the 'pure' waterfall model.
These include the Rapid Development models that Steve McConnell calls 'modified waterfalls'
- [8] Peter DeGrace's 'sashimi model' (waterfall with overlapping phases), waterfall with subprojects, and waterfall with risk reduction. Other software development model combinations such as 'incremental waterfall model' also exist.[18]
Royce's final model[edit]
Winston W. Royce's final model, his intended improvement upon his initial 'waterfall model', illustrated that feedback could (should, and often would) lead from code testing to design (as testing of code uncovered flaws in the design) and from design back to requirements specification (as design problems may necessitate the removal of conflicting or otherwise unsatisfiable / undesignable requirements). In the same paper Royce also advocated large quantities of documentation, doing the job 'twice if possible' (a sentiment similar to that of Fred Brooks, famous for writing the Mythical Man Month, an influential book in software project management, who advocated planning to 'throw one away'), and involving the customer as much as possible (a sentiment similar to that of Extreme Programming).
See also[edit]
- Structured Systems Analysis and Design Method (SSADM)
References[edit]
- ^ abBenington, Herbert D. (1 October 1983). 'Production of Large Computer Programs'(PDF). IEEE Annals of the History of Computing. IEEE Educational Activities Department. 5 (4): 350–361. doi:10.1109/MAHC.1983.10102. Retrieved 2011-03-21.
- ^United States, Navy Mathematical Computing Advisory Panel (29 June 1956), Symposium on advanced programming methods for digital computers, [Washington, D.C.]: Office of Naval Research, Dept. of the Navy, OCLC10794738
- ^ abRoyce, Winston (1970), 'Managing the Development of Large Software Systems'(PDF), Proceedings of IEEE WESCON, 26 (August): 1–9
- ^Wasserfallmodell > Entstehungskontext, Markus Rerych, Institut für Gestaltungs- und Wirkungsforschung, TU-Wien. Retrieved on 2007-11-28 from http://cartoon.iguw.tuwien.ac.at/fit/fit01/wasserfall/entstehung.html
- ^Conrad Weisert, Waterfall methodology: there's no such thing!
- ^Bell, Thomas E., and T. A. Thayer. Software requirements: Are they really a problem?Proceedings of the 2nd international conference on Software engineering. IEEE Computer Society Press, 1976.
- ^Military Standard Defense System Software Development
- ^ abcMcConnell, Steve (1996). Rapid Development: Taming Wild Software Schedules. Microsoft Press. ISBN1-55615-900-5.
- ^'Waterfall Software Development Model'. 5 February 2014. Retrieved 11 August 2014.
- ^Arcisphere technologies (2012). 'Tutorial: The Software Development Life Cycle (SDLC)'(PDF). Retrieved 2012-11-13.
- ^Hughey, Douglas (2009). 'Comparing Traditional Systems Analysis and Design with Agile Methodologies'. University of Missouri – St. Louis. Retrieved 11 August 2014.
- ^'When should you use Waterfall Model?'. Retrieved 2016-09-28.
- ^Parnas, David L.; Clements, Paul C. (1986). 'A rational design process: How and why to fake it'(PDF). IEEE Transactions on Software Engineering: 251–257. Retrieved 2011-03-21.
- ^McConnell, Steve (2004). Code Complete, 2nd edition. Microsoft Press. ISBN1-55615-484-4.
- ^Ensmenger, Nathan (2010). The Computer Boys Take Over. p. 42. ISBN978-0-262-05093-7.
- ^Larman, Craig; Basili, Victir (2003). 'Iterative and Incremental Development: A Brief History'. IEEE Computer (June ed.). 36: 47–56. doi:10.1109/MC.2003.1204375.
- ^A Waterfall Systems Development Methodology … Seriously? by David Dischave. 2012. Archived July 2, 2014, at the Wayback Machine
- ^'Methodology:design methods'.
External links[edit]
Wikimedia Commons has media related to Waterfall models. |
- Going Over the Waterfall with the RUP by Philippe Kruchten
Retrieved from 'https://en.wikipedia.org/w/index.php?title=Waterfall_model&oldid=896387321'
In computer science, communicating sequential processes (CSP) is a formal language for describing patterns of interaction in concurrent systems.[1] It is a member of the family of mathematical theories of concurrency known as process algebras, or process calculi, based on message passing via channels. CSP was highly influential in the design of the occam programming language,[1][2] and also influenced the design of programming languages such as Limbo,[3]RaftLib, Go,[4]Crystal, and Clojure's core.async.[5]
CSP was first described in a 1978 paper by Tony Hoare,[6] but has since evolved substantially.[7] CSP has been practically applied in industry as a tool for specifying and verifying the concurrent aspects of a variety of different systems, such as the T9000 Transputer,[8] as well as a secure ecommerce system.[9] The theory of CSP itself is also still the subject of active research, including work to increase its range of practical applicability (e.g., increasing the scale of the systems that can be tractably analyzed).[10]
- 1History
- 2Informal description
- 3Formal definition
- 3.2Formal semantics
History[edit]
The version of CSP presented in Hoare's original 1978 paper was essentially a concurrent programming language rather than a process calculus. It had a substantially different syntax than later versions of CSP, did not possess mathematically defined semantics,[11] and was unable to represent unbounded nondeterminism.[12] Programs in the original CSP were written as a parallel composition of a fixed number of sequential processes communicating with each other strictly through synchronous message-passing. In contrast to later versions of CSP, each process was assigned an explicit name, and the source or destination of a message was defined by specifying the name of the intended sending or receiving process. For example, the process
repeatedly receives a character from the process named
west
, and then sends that character to process named east
. The parallel compositionassigns the names
west
to the DISASSEMBLE
process, X
to the COPY
process, and east
to the ASSEMBLE
process, and executes these three processes concurrently.[6]Following the publication of the original version of CSP, Hoare, Stephen Brookes, and A. W. Roscoe developed and refined the theory of CSP into its modern, process algebraic form. The approach taken in developing CSP into a process algebra was influenced by Robin Milner's work on the Calculus of Communicating Systems (CCS), and vice versa. The theoretical version of CSP was initially presented in a 1984 article by Brookes, Hoare, and Roscoe,[13] and later in Hoare's book Communicating Sequential Processes,[11] which was published in 1985. In September 2006, that book was still the third-most citedcomputer science reference of all time according to Citeseer[citation needed] (albeit an unreliable source due to the nature of its sampling). The theory of CSP has undergone a few minor changes since the publication of Hoare's book. Most of these changes were motivated by the advent of automated tools for CSP process analysis and verification. Roscoe's The Theory and Practice of Concurrency[1] describes this newer version of CSP.
Applications[edit]
An early and important application of CSP was its use for specification and verification of elements of the INMOS T9000 Transputer, a complex superscalar pipelined processor designed to support large-scale multiprocessing. CSP was employed in verifying the correctness of both the processor pipeline, and the Virtual Channel Processor which managed off-chip communications for the processor.[8]
Industrial application of CSP to software design has usually focused on dependable and safety-critical systems. For example, the Bremen Institute for Safe Systems and Daimler-Benz Aerospace modeled a fault management system and avionics interface (consisting of some 23,000 lines of code) intended for use on the International Space Station in CSP, and analyzed the model to confirm that their design was free of deadlock and livelock.[14][15] The modeling and analysis process was able to uncover a number of errors that would have been difficult to detect using testing alone. Similarly, Praxis High Integrity Systems applied CSP modeling and analysis during the development of software (approximately 100,000 lines of code) for a secure smart-card Certification Authority to verify that their design was secure and free of deadlock. Praxis claims that the system has a much lower defect rate than comparable systems.[9]
Since CSP is well-suited to modeling and analyzing systems that incorporate complex message exchanges, it has also been applied to the verification of communications and security protocols. A prominent example of this sort of application is Lowe’s use of CSP and the FDR refinement-checker to discover a previously unknown attack on the Needham-Schroeder public-key authentication protocol, and then to develop a corrected protocol able to defeat the attack.[16]
Informal description[edit]
As its name suggests, CSP allows the description of systems in terms of component processes that operate independently, and interact with each other solely through message-passing communication. However, the 'Sequential' part of the CSP name is now something of a misnomer, since modern CSP allows component processes to be defined both as sequential processes, and as the parallel composition of more primitive processes. The relationships between different processes, and the way each process communicates with its environment, are described using various process algebraic operators. Using this algebraic approach, quite complex process descriptions can be easily constructed from a few primitive elements.
Resident Evil 4 Game Full Version Repack (PC / ISO) Resident Evil 4 Game Full Version Repack (PC / ISO) – Game Full ini sering saya mainkan saat pulang sekolah langsung pergi ke Rental Playstation 2. Saya memainkan game ini selalu bersama teman-teman saya, kalau sendirian jujur kurang berani hehe. Game pc iso resident evil 4.
Primitives[edit]
CSP provides two classes of primitives in its process algebra:
- Events
- Events represent communications or interactions. They are assumed to be indivisible and instantaneous. They may be atomic names (e.g. on, off), compound names (e.g. valve.open, valve.close), or input/output events (e.g. mouse?xy, screen!bitmap).
- Primitive processes
- Primitive processes represent fundamental behaviors: examples include STOP (the process that communicates nothing, also called deadlock), and SKIP (which represents successful termination).
Algebraic operators[edit]
CSP has a wide range of algebraic operators. The principal ones are:
- Prefix
- The prefix operator combines an event and a process to produce a new process. For example,
- is the process which is willing to communicate a with its environment, and, after a, behaves like the process P.
- Deterministic Choice
- The deterministic (or external) choice operator allows the future evolution of a process to be defined as a choice between two component processes, and allows the environment to resolve the choice by communicating an initial event for one of the processes. For example,
- is the process which is willing to communicate the initial events a and b, and subsequently behaves as either P or Q depending on which initial event the environment chooses to communicate. If both a and b were communicated simultaneously the choice would be resolved nondeterministically.
- Nondeterministic Choice
- The nondeterministic (or internal) choice operator allows the future evolution of a process to be defined as a choice between two component processes, but does not allow the environment any control over which one of the component processes will be selected. For example,
- can behave like either or . It can refuse to accept a or b, and is only obliged to communicate if the environment offers both a and b. Nondeterminism can be inadvertently introduced into a nominally deterministic choice if the initial events of both sides of the choice are identical. So, for example,
- is equivalent to
- Interleaving
- The interleaving operator represents completely independent concurrent activity. The process
- behaves as both P and Q simultaneously. The events from both processes are arbitrarily interleaved in time.
- Interface Parallel
- The interface parallel operator represents concurrent activity that requires synchronization between the component processes: any event in the interface set can only occur when all component processes are able to engage in that event. For example, the process
- requires that P and Q must both be able to perform event a before that event can occur. So, for example, the process
- can engage in event a, and become the process
- while
- will simply deadlock.
- Hiding
- The hiding operator provides a way to abstract processes, by making some events unobservable. A trivial example of hiding is
- which, assuming that the event a doesn't appear in P, simply reduces to
Examples[edit]
One of the archetypal CSP examples is an abstract representation of a chocolate vending machine and its interactions with a person wishing to buy some chocolate. This vending machine might be able to carry out two different events, “coin” and “choc” which represent the insertion of payment and the delivery of a chocolate respectively. A machine which demands payment (only in cash) before offering a chocolate can be written as:
A person who might choose to use a coin or card to make payments could be modelled as:
These two processes can be put in parallel, so that they can interact with each other. The behaviour of the composite process depends on the events that the two component processes must synchronise on. Thus,
whereas if synchronization was only required on “coin”, we would obtain
If we abstract this latter composite process by hiding the “coin” and “card” events, i.e.
Design Process Model
we get the nondeterministic process
This is a process which either offers a “choc” event and then stops, or just stops. In other words, if we treat the abstraction as an external view of the system (e.g., someone who does not see the decision reached by the person), nondeterminism has been introduced.
Formal definition[edit]
Syntax[edit]
The syntax of CSP defines the “legal” ways in which processes and events may be combined. Let e be an event, and X be a set of events. Then the basic syntax of CSP can be defined as:
Note that, in the interests of brevity, the syntax presented above omits the process, which represents divergence, as well as various operators such as alphabetized parallel, piping, and indexed choices.
Formal semantics[edit]
CSP has been imbued with several different formal semantics, which define the meaning of syntactically correct CSP expressions. The theory of CSP includes mutually consistent denotational semantics, algebraic semantics, and operational semantics.
Denotational semantics[edit]
The three major denotational models of CSP are the traces model, the stable failures model, and the failures/divergences model. Semantic mappings from process expressions to each of these three models provide the denotational semantics for CSP.[1]
The traces model defines the meaning of a process expression as the set of sequences of events (traces) that the process can be observed to perform. For example,
- since performs no events
- since the process can be observed to have performed no events, the event a, or the sequence of events a followed by b
More formally, the meaning of a process P in the traces model is defined as such that:
- (i.e. contains the empty sequence)
- (i.e. is prefix-closed)
where is the set of all possible finite sequences of events.
The stable failures model extends the traces model with refusal sets, which are sets of events that a process can refuse to perform. A failure is a pair , consisting of a trace s, and a refusal set X which identifies the events that a process may refuse once it has executed the trace s. The observed behavior of a process in the stable failures model is described by the pair . For example,
The failures/divergence model further extends the failures model to handle divergence. The semantics of a process in the failures/divergences model is a pair where is defined as the set of all traces that can lead to divergent behavior and .
Tools[edit]
Over the years, a number of tools for analyzing and understanding systems described using CSP have been produced. Early tool implementations used a variety of machine-readable syntaxes for CSP, making input files written for different tools incompatible. However, most CSP tools have now standardized on the machine-readable dialect of CSP devised by Bryan Scattergood, sometimes referred to as CSPM.[17] The CSPM dialect of CSP possesses a formally defined operational semantics, which includes an embedded functional programming language.
The most well-known CSP tool is probably Failures/Divergence Refinement 2 (FDR2), which is a commercial product developed by Formal Systems (Europe) Ltd. FDR2 is often described as a model checker, but is technically a refinement checker, in that it converts two CSP process expressions into Labelled Transition Systems (LTSs), and then determines whether one of the processes is a refinement of the other within some specified semantic model (traces, failures, or failures/divergence).[18] FDR2 applies various state-space compression algorithms to the process LTSs in order to reduce the size of the state-space that must be explored during a refinement check. FDR2 has been succeeded by FDR3, a completely re-written version incorporating amongst other things parallel execution and an integrated type checker. It is released by the University of Oxford, which also released FDR2 in the period 2008-12.[19]
The Adelaide Refinement Checker (ARC)[20] is a CSP refinement checker developed by the Formal Modelling and Verification Group at The University of Adelaide. ARC differs from FDR2 in that it internally represents CSP processes as Ordered Binary Decision Diagrams (OBDDs), which alleviates the state explosion problem of explicit LTS representations without requiring the use of state-space compression algorithms such as those used in FDR2.
The ProB project,[21] which is hosted by the Institut für Informatik, Heinrich-Heine-Universität Düsseldorf, was originally created to support analysis of specifications constructed in the B method. However, it also includes support for analysis of CSP processes both through refinement checking, and LTL model-checking. ProB can also be used to verify properties of combined CSP and B specifications. A ProBE CSP Animator is integrated in FDR3.
The Process Analysis Toolkit (PAT)[22][23] is a CSP analysis tool developed in the School of Computing at the National University of Singapore. PAT is able to perform refinement checking, LTL model-checking, and simulation of CSP and Timed CSP processes. The PAT process language extends CSP with support for mutable shared variables, asynchronous message passing, and a variety of fairness and quantitative time related process constructs such as
deadline
and waituntil
. The underlying design principle of the PAT process language is to combine a high-level specification language with procedural programs (e.g. an event in PAT may be a sequential program or even an external C# library call) for greater expressiveness. Mutable shared variables and asynchronous channels provide a convenient syntactic sugar for well-known process modelling patterns used in standard CSP. The PAT syntax is similar, but not identical, to CSPM.[24] The principal differences between the PAT syntax and standard CSPM are the use of semicolons to terminate process expressions, the inclusion of syntactic sugar for variables and assignments, and the use of slightly different syntax for internal choice and parallel composition.VisualNets[25] produces animated visualisations of CSP systems from specifications, and supports timed CSP.
CSPsim[26] is a lazy simulator. It does not model check CSP, but is useful for exploring very large (potentially infinite) systems.
SyncStitch is a CSP refinement checker with interactive modeling and analyzing environment. It has a graphical state-transition diagram editor. The user can model the behavior of processes as not only CSP expressions but also state-transition diagrams. The result of checking are also reported graphically as computation-trees and can be analyzed interactively with peripheral inspecting tools. In addition to refinement checks, It can perform deadlock check and livelock check.
Related formalisms[edit]
Several other specification languages and formalisms have been derived from, or inspired by, the classic untimed CSP, including:
- Timed CSP[permanent dead link], which incorporates timing information for reasoning about real-time systems
- Receptive Process Theory, a specialization of CSP that assumes an asynchronous (i.e. nonblocking) send operation
- TCOZ, an integration of Timed CSP and Object Z
- Circus, an integration of CSP and Z based on the Unifying Theories of Programming
- CML (COMPASS Modelling Language), a combination of Circus and VDM developed for the modelling of Systems of Systems (SoS)
- CspCASL, an extension of CASL that integrates CSP
- LOTOS, an international standard[27] that incorporates features of CSP and CCS.
- PALPS, a probabilistic extension with locations for ecological models developed by Anna Philippou and Mauricio toro bermúdez [es]
Comparison with the actor model[edit]
Seetha serials. In as much as it is concerned with concurrent processes that exchange messages, the Actor model is broadly similar to CSP. However, the two models make some fundamentally different choices with regard to the primitives they provide:
- CSP processes are anonymous, while actors have identities.
- CSP uses explicit channels for message passing, whereas actor systems transmit messages to named destination actors. These approaches may be considered duals of each other, in the sense that processes receiving through a single channel effectively have an identity corresponding to that channel, while the name-based coupling between actors may be broken by constructing actors that behave as channels.
- CSP message-passing fundamentally involves a rendezvous between the processes involved in sending and receiving the message, i.e. the sender cannot transmit a message until the receiver is ready to accept it. In contrast, message-passing in actor systems is fundamentally asynchronous, i.e. message transmission and reception do not have to happen at the same time, and senders may transmit messages before receivers are ready to accept them. These approaches may also be considered duals of each other, in the sense that rendezvous-based systems can be used to construct buffered communications that behave as asynchronous messaging systems, while asynchronous systems can be used to construct rendezvous-style communications by using a message/acknowledgement protocol to synchronize senders and receivers.
See also[edit]
- Trace theory, the general theory of traces.
- Trace monoid and history monoid
- VerilogCSP is a set of macros added to Verilog HDL to support communicating sequential processes channel communications.
- Joyce is a programming language based on the principles of CSP, developed by Brinch Hansen around 1989.
- SuperPascal is a programming language also developed by Brinch Hansen, influenced by CSP and his earlier work with Joyce.
- Ada implements features of CSP such as the rendezvous.
- DirectShow is the video framework inside DirectX, it uses the CSP concepts to implement the audio and video filters.
- OpenComRTOS is a formally developed network-centric distributed RTOS based on a pragmatic superset of CSP.
References[edit]
- ^ abcdRoscoe, A. W. (1997). The Theory and Practice of Concurrency. Prentice Hall. ISBN978-0-13-674409-2.
- ^INMOS (1995-05-12). occam 2.1 Reference Manual(PDF). SGS-THOMSON Microelectronics Ltd., INMOS document 72 occ 45 03
- ^'Resources about threaded programming in the Bell Labs CSP style'. Retrieved 2010-04-15.
- ^'Language Design FAQ: Why build concurrency on the ideas of CSP?'.
- ^'Clojure core.async Channels'.
- ^ abHoare, C. A. R. (1978). 'Communicating sequential processes'. Communications of the ACM. 21 (8): 666–677. doi:10.1145/359576.359585.
- ^Abdallah, Ali E.; Jones, Cliff B.; Sanders, Jeff W. (2005). Communicating Sequential Processes: The First 25 Years. LNCS. 3525. Springer. ISBN9783540258131.
- ^ abBarrett, G. (1995). 'Model checking in practice: The T9000 Virtual Channel Processor'. IEEE Transactions on Software Engineering. 21 (2): 69–78. doi:10.1109/32.345823.
- ^ abHall, A; Chapman, R. (2002). 'Correctness by construction: Developing a commercial secure system'(PDF). IEEE Software. 19 (1): 18–25. CiteSeerX10.1.1.16.1811. doi:10.1109/52.976937.
- ^Creese, S. (2001). 'Data Independent Induction: CSP Model Checking of Arbitrary Sized Networks'. D. Phil. Oxford University.
- ^ abHoare, C. A. R. (1985). Communicating Sequential Processes. Prentice Hall. ISBN978-0-13-153289-2.
- ^Clinger, William (June 1981). 'Foundations of Actor Semantics'. Mathematics Doctoral Dissertation. MIT. hdl:1721.1/6935.
- ^Brookes, Stephen; Hoare, C. A. R.; Roscoe, A. W. (1984). 'A Theory of Communicating Sequential Processes'. Journal of the ACM. 31 (3): 560–599. doi:10.1145/828.833.
- ^Buth, B.; M. Kouvaras; J. Peleska; H. Shi (December 1997). 'Deadlock analysis for a fault-tolerant system'. Proceedings of the 6th International Conference on Algebraic Methodology and Software Technology (AMAST’97). pp. 60–75.
- ^Buth, B.; J. Peleska; H. Shi (January 1999). 'Combining methods for the livelock analysis of a fault-tolerant system'. Proceedings of the 7th International Conference on Algebraic Methodology and Software Technology (AMAST’98). pp. 124–139.
- ^Lowe, G. (1996). 'Breaking and fixing the Needham-Schroeder public-key protocol using FDR'. Tools and Algorithms for the Construction and Analysis of Systems (TACAS). Springer-Verlag. pp. 147–166.
- ^Scattergood, J.B. (1998). 'The Semantics and Implementation of Machine-Readable CSP'. D.Phil. Oxford University Computing Laboratory.
- ^A.W. Roscoe (1994). 'Model-checking CSP'. In A Classical Mind: essays in Honour of C.A.R. Hoare. Prentice Hall.
- ^'Introduction — FDR 4.2.4 documentation'. www.cs.ox.ac.uk.
- ^Parashkevov, Atanas N.; Yantchev, Jay (1996). 'ARC – a tool for efficient refinement and equivalence checking for CSP'. IEEE Int. Conf. on Algorithms and Architectures for Parallel Processing ICA3PP '96. pp. 68–75. CiteSeerX10.1.1.45.3212.
- ^Leuschel, Michael; Fontaine, Marc (2008). 'Probing the Depths of CSP-M: A new FDR-compliant Validation Tool'(PDF). ICFEM 2008. Springer-Verlag. Archived from the original(PDF) on 2011-07-19. Retrieved 2008-11-26.
- ^Sun, Jun; Liu, Yang; Dong, Jin Song (2009). 'PAT: Towards Flexible Verification under Fairness'(PDF). Proceedings of the 20th International Conference on Computer-Aided Verification (CAV 2009). Lecture Notes in Computer Science. 5643. Springer. Archived from the original(PDF) on 2011-06-11. Retrieved 2009-06-16.
- ^Sun, Jun; Liu, Yang; Dong, Jin Song (2008). 'Model Checking CSP Revisited: Introducing a Process Analysis Toolkit'(PDF). Proceedings of the Third International Symposium on Leveraging Applications of Formal Methods, Verification and Validation (ISoLA 2008). Communications in Computer and Information Science. 17. Springer. pp. 307–322. Archived from the original(PDF) on 2009-01-08. Retrieved 2009-01-15.
- ^Sun, Jun; Liu, Yang; Dong, Jin Song; Chen, Chunqing (2009). 'Integrating Specifications and Programs for System Specification and Verification'(PDF). IEEE Int. Conf. on Theoretical Aspects of Software Engineering TASE '09. Archived from the original(PDF) on 2011-06-11. Retrieved 2009-04-13.
- ^Green, Mark; Abdallah, Ali (2002). 'Performance Analysis and Behaviour Tuning for Optimisation of Communicating Systems'(PDF). Communicating Process Architectures 2002.
- ^Brooke, Phillip; Paige, Richard (2007). 'Lazy Exploration and Checking of CSP Models with CSPsim'. Communicating Process Architectures 2007.
- ^ISO 8807, Language of Temporal Ordering Specification
Further reading[edit]
- Hoare, C. A. R. (2004) [1985]. Communicating Sequential Processes. Prentice Hall International. ISBN978-0-13-153271-7.
- This book has been updated by Jim Davies at the Oxford University Computing Laboratory and the new edition is available for download as a PDF file at the Using CSP website.
- Roscoe, A. W. (1997). The Theory and Practice of Concurrency. Prentice Hall. ISBN978-0-13-674409-2.
- Some links relating to this book are available here. The full text is available for download as a PS or PDF file from Bill Roscoe's list of academic publications.
External links[edit]
- A PDF version of Hoare's CSP book – Copyright restriction apply, see the page text before downloading.
- WoTUG, a User Group for CSP and occam style systems, contains some information about CSP and useful links.
Retrieved from 'https://en.wikipedia.org/w/index.php?title=Communicating_sequential_processes&oldid=897746980'