The Stream X-machine ( SXM ) is a model of computation introduced by Gilbert Laycock in his 1993 PhD thesis, The Theory and Practice of Specification Based Software Testing . Based on Samuel Eilenberg 's X-machine , an extended finite-state machine for processing data of the type X , the Stream X-Machine is a kind of X-machine for processing a memory data type Mem with associated input and output streams In * and Out *, that is, where X = Out * × Mem × In *. The transitions of a Stream X-Machine are labelled by functions of the form φ: Mem × In → Out × Mem , that is, which compute an output value and update the memory, from the current memory and an input value.
42-615: Although the general X-machine had been identified in the 1980s as a potentially useful formal model for specifying software systems, it was not until the emergence of the Stream X-Machine that this idea could be fully exploited. Florentin Ipate and Mike Holcombe went on to develop a theory of complete functional testing , in which complex software systems with hundreds of thousands of states and millions of transitions could be decomposed into separate SXMs that could be tested exhaustively, with
84-417: A PCB, functional test fixtures assess the entire board's functionality by applying power and verifying that the system operates correctly. Types Functional testing includes but is not limited to: Functional testing typically involves six steps This software-engineering -related article is a stub . You can help Misplaced Pages by expanding it . Software development Software development
126-412: A deadline. Software analysis begins with a requirements analysis to capture the business needs of the software. Challenges for the identification of needs are that current or potential users may have different and incompatible needs, may not understand their own needs, and change their needs during the process of software development. Ultimately, the result of analysis is a detailed specification for
168-434: A guaranteed proof of correct integration. Because of the intuitive interpretation of Stream X-Machines as "processing agents with inputs and outputs", they have attracted increasing interest, because of their utility in modelling real-world phenomena. The SXM model has important applications in fields as diverse as computational biology , software testing and agent-based computational economics . A Stream X-Machine (SXM)
210-460: A program by checking it against the published user or system requirements. As a form of system testing , functional testing tests slices of functionality of the whole system. Despite similar naming, functional testing is not testing the code of a single function . The concept of incorporating testing earlier in the delivery cycle is not restricted to functional testing. In fixture testing, while ICT fixtures test each individual component on
252-431: A sequence. In other words, the relation extracts the head of the input stream, modifies memory and appends a value to the tail of the output stream. Because of the above equivalence, attention may focus on the way a Stream X-Machine processes inputs into outputs, using an auxiliary memory. Given an initial memory state mem 0 and an input stream ins , the machine executes in a step-wise fashion, consuming one input at
294-401: A time, and generating one output at a time. Provided that (at least) one recognised path path = φ 1 ... φ n exists leading to a state in which the input has been consumed, the machine yields a final memory state mem n and an output stream outs . In general, we can think of this as the relation computed by all recognised paths: | path | : In * → Out *. This is often called
336-414: A transition is enabled if the domain of the associated function φ i includes the next input value and the current memory state. If (at most) one transition is enabled in a given state, the machine is deterministic . Crossing a transition is equivalent to applying the associated function φ i , which consumes one input, possibly modifies the memory and produces one output. Each recognised path through
378-449: Is black-box meaning the internal program structure is ignored (unlike for white-box testing ). Functional testing can evaluate compliance to functional requirements . Sometimes, functional testing is a quality assurance (QA) process. Functional testing differs from acceptance testing . Functional testing verifies a program by checking it against design document(s) or specification(s), while acceptance testing validates
420-511: Is a framework that provides the viewpoints on the system and its environment , to be used in the software development process . It is a graphical representation of the underlying semantics of a view. The purpose of viewpoints and views is to enable human engineers to comprehend very complex systems and to organize the elements of the problem around domains of expertise . In the engineering of physically intensive systems, viewpoints often correspond to capabilities and responsibilities within
462-408: Is a popular way of managing changes made to the software. Whenever a new version is checked in, the software saves a backup of all modified files. If multiple programmers are working on the software simultaneously, it manages the merging of their code changes. The software highlights cases where there is a conflict between two sets of changes and allows programmers to fix the conflict. A view model
SECTION 10
#1733105246137504-431: Is an extended finite-state machine with auxiliary memory, inputs and outputs. It is a variant of the general X-machine , in which the fundamental data type X = Out * × Mem × In *, that is, a tuple consisting of an output stream, the memory and an input stream. A SXM separates the control flow of a system from the processing carried out by the system. The control is modelled by a finite-state machine (known as
546-449: Is correctly incorporated with the newer software. Design involves choices about the implementation of the software, such as which programming languages and database software to use, or how the hardware and network communications will be organized. Design may be iterative with users consulted about their needs in a process of trial and error . Design often involves people expert in aspect such as database design , screen architecture, and
588-833: Is essential to success. This is more easily achieved if the team is small, used to working together, and located near each other. Communications also help identify problems at an earlier state of development and avoid duplicated effort. Many development projects avoid the risk of losing essential knowledge held by only one employee by ensuring that multiple workers are familiar with each component. Software development involves professionals from various fields, not just software programmers but also individuals specialized in testing, documentation writing, graphic design , user support, marketing , and fundraising. Although workers for proprietary software are paid, most contributors to open-source software are volunteers. Alternately, they may be paid by companies whose business model does not involve selling
630-399: Is helpful for new developers to understand the project when they begin working on it. In agile development, the documentation is often written at the same time as the code. User documentation is more frequently written by technical writers . Accurate estimation is crucial at the feasibility stage and in delivering the product on time and within budget. The process of generating estimations
672-422: Is inefficient, difficult to understand, or lacking documentation on its functionality. These standards are especially likely to break down in the presence of deadlines. As a result, testing, debugging, and revising the code becomes much more difficult. Code refactoring , for example adding more comments to the code, is a solution to improve the understandability of code. Testing is the process of ensuring that
714-440: Is often delegated by the project manager . Because the effort estimation is directly related to the size of the complete application, it is strongly influenced by addition of features in the requirements—the more requirements, the higher the development cost. Aspects not related to functionality, such as the experience of the software developers and code reusability, are also essential to consider in estimation. As of 2019 , most of
756-432: Is often used to break down the customer's requirements into pieces that can be implemented by software programmers. The underlying logic of the program may be represented in data-flow diagrams , data dictionaries , pseudocode , state transition diagrams , and/or entity relationship diagrams . If the project incorporates a piece of legacy software that has not been modeled, this software may be modeled to help ensure it
798-401: Is robust to heavy levels of input or usage), integration testing (to ensure that the software is adequately integrated with other software), and compatibility testing (measuring the software's performance across different operating systems or browsers). When tests are written before the code, this is called test-driven development . Production is the phase in which software is deployed to
840-850: Is the process of designing and implementing a software solution to satisfy a user . The process is more encompassing than programming , writing code , in that it includes conceiving the goal, evaluating feasibility, analyzing requirements , design , testing and release . The process is part of software engineering which also includes organizational management , project management , configuration management and other aspects. Software development involves many skills and job specializations including programming , testing , documentation , graphic design , user support , marketing , and fundraising . Software development involves many tools including: compiler , integrated development environment (IDE), version control , computer-aided software engineering , and word processor . The details of
882-428: The associated automaton ) whose transitions are labelled with processing functions chosen from a set Φ (known as the type of the machine), which act upon the fundamental data type. Each processing function in Φ is a partial function, and can be considered to have the type φ: Mem × In → Out × Mem , where Mem is the memory type, and In and Out are respectively the input and output types. In any given state,
SECTION 20
#1733105246137924-407: The behaviour of the Stream X-Machine. The behaviour is deterministic, if (at most) one transition is enabled in each state. This property, and the ability to control how the machine behaves in a step-wise fashion in response to inputs and memory, makes it an ideal model for the specification of software systems. If the specification and implementation are both assumed to be Stream X-Machines, then
966-471: The programming language ). Documentation comes in two forms that are usually kept separate—that intended for software developers, and that made available to the end user to help them use the software. Most developer documentation is in the form of code comments for each file, class , and method that cover the application programming interface (API)—how the piece of software can be accessed by another—and often implementation details. This documentation
1008-542: The SXM is still only deterministic if (at most) one transition is enabled in each state. A general X-machine handles input and output using a prior encoding function α: Y → X for input, and a posterior decoding function β: X → Z for output, where Y and Z are respectively the input and output types. In a Stream X-Machine, these types are streams: and the encoding and decoding functions are defined as: where ins: In *, outs: Out * and mem i : Mem . In other words,
1050-489: The available methodologies are best suited to specific kinds of projects, based on various technical, organizational, project, and team considerations. Another focus in many programming methodologies is the idea of trying to catch issues such as security vulnerabilities and bugs as early as possible ( shift-left testing ) to reduce the cost of tracking and fixing them. In 2009, it was estimated that 32 percent of software projects were delivered on time and budget, and with
1092-423: The code executes correctly and without errors. Debugging is performed by each software developer on their own code to confirm that the code does what it is intended to. In particular, it is crucial that the software executes on all inputs, even if the result is incorrect. Code reviews by other developers are often used to scrutinize new code added to the project, and according to some estimates dramatically reduce
1134-408: The end user. During production, the developer may create technical support resources for users or a process for fixing bugs and errors that were not caught earlier. There might also be a return to earlier development phases if user needs changed or were misunderstood. Software development is performed by software developers , usually working on a team. Efficient communications between team members
1176-430: The engineering organization. Fitness functions are automated and objective tests to ensure that the new developments don't deviate from the established constraints, checks and compliance controls. Intellectual property can be an issue when developers integrate open-source code or libraries into a proprietary product, because most open-source licenses used for software require that modifications be released under
1218-477: The full functionality. An additional 44 percent were delivered, but missing at least one of these features. The remaining 24 percent were cancelled prior to release. Software development life cycle refers to the systematic process of developing applications . The sources of ideas for software products are plentiful. These ideas can come from market research including the demographics of potential new customers, existing customers, sales prospects who rejected
1260-511: The implementation may be tested for conformance to the specification machine, by observing the inputs and outputs at each step. Laycock first highlighted the utility of single-step processing with observations for testing purposes. Holcombe and Ipate developed this into a practical theory of software testing which was fully compositional, scaling up to very large systems. A proof of correct integration guarantees that testing each component and each integration layer separately corresponds to testing
1302-475: The machine is initialized with the whole of the input stream; and the decoded result is the whole of the output stream, provided the input stream is eventually consumed (otherwise the result is undefined). Each processing function in a SXM is given the abbreviated type φ SXM : Mem × In → Out × Mem . This can be mapped onto a general X-machine relation of the type φ: X → X if we treat this as computing: where :: denotes concatenation of an element and
Stream X-Machine - Misplaced Pages Continue
1344-468: The machine therefore generates a list φ 1 ... φ n of functions, and the SXM composes these functions together to generate a relation on the fundamental data type |φ 1 ... φ n |: X → X . The Stream X-Machine is a variant of X-machine in which the fundamental data type X = Out * × Mem × In *. In the original X-machine , the φ i are general relations on X . In the Stream X-Machine, these are usually restricted to functions ; however
1386-407: The number of bugs persisting after testing is complete. Once the code has been submitted, quality assurance —a separate department of non-programmers for most large companies—test the accuracy of the entire software product. Acceptance tests derived from the original software requirements are a popular tool for this. Quality testing also often includes stress and load checking (whether the software
1428-403: The performance of servers and other hardware. Designers often attempt to find patterns in the software's functionality to spin off distinct modules that can be reused with object-oriented programming . An example of this is the model–view–controller , an interface between a graphical user interface and the backend . The central feature of software development is creating and understanding
1470-463: The process used for a development effort varies. The process may be confined to a formal, documented standard , or it can be customized and emergent for the development effort. The process may be sequential, in which each major phase (i.e. design, implement and test) is completed before the next begins, but an iterative approach – where small aspects are separately designed, implemented and tested – can reduce risk and cost and increase quality. Each of
1512-424: The product that developers can work from. Software analysts often decompose the project into smaller objects, components that can be reused for increased cost-effectiveness, efficiency, and reliability. Decomposing the project may enable a multi-threaded implementation that runs significantly faster on multiprocessor computers. During the analysis and design phases of software development, structured analysis
1554-466: The product, other internal software development staff, or a creative third party. Ideas for software products are usually first evaluated by marketing personnel for economic feasibility, fit with existing channels of distribution, possible effects on existing product lines, required features , and fit with the company's marketing objectives. In the marketing evaluation phase, the cost and time assumptions become evaluated. The feasibility analysis estimates
1596-503: The project's return on investment , its development cost and timeframe. Based on this analysis, the company can make a business decision to invest in further development. After deciding to develop the software, the company is focused on delivering the product at or below the estimated cost and time, and with a high standard of quality (i.e., lack of bugs) and the desired functionality. Nevertheless, most software projects run late and sometimes compromises are made in features or quality to meet
1638-427: The software that implements the desired functionality. There are various strategies for writing the code. Cohesive software has various components that are independent from each other. Coupling is the interrelation of different software components, which is viewed as undesirable because it increases the difficulty of maintenance . Often, software programmers do not follow industry best practices, resulting in code that
1680-403: The software, but something else—such as services and modifications to open source software. Computer-aided software engineering (CASE) is tools for the partial automation of software development. CASE enables designers to sketch out the logic of a program, whether one to be written, or an already existing one to help integrate it with new code or reverse engineer it (for example, to change
1722-520: The tools for estimating the amount of time and resources for software development were designed for conventional applications and are not applicable to web applications or mobile applications . An integrated development environment (IDE) supports software development with enhanced features compared to a simple text editor . IDEs often include automated compiling , syntax highlighting of errors, debugging assistance, integration with version control , and semi-automation of tests. Version control
Stream X-Machine - Misplaced Pages Continue
1764-470: The whole system. This divide-and-conquer approach makes exhaustive testing feasible for large systems. The testing method is described in a separate article on the Stream X-Machine testing methodology . Functional testing In software development , functional testing is a form of software system testing that verifies whether software matches its design. Generally, functional testing
#136863