Cloud9: A Software Testing Service
|
|
|
- Noreen Reynolds
- 10 years ago
- Views:
Transcription
1 Cloud9: A Software Testing Service Liviu Ciortea, Cristian Zamfir, Stefan Bucur, Vitaly Chipounov, George Candea School of Computer and Communication Sciences École Polytechnique Fédérale de Lausanne (EPFL), Switzerland Abstract Cloud9 aims to reduce the resource-intensive and laborintensive nature of high-quality software testing. First, Cloud9 parallelizes symbolic execution (an effective, but still poorly scalable test automation technique) to large shared-nothing clusters. To our knowledge, Cloud9 is the first symbolic execution engine that scales to large clusters of machines, thus enabling thorough automated testing of real software in conveniently short amounts of time. Preliminary results indicate one to two orders of magnitude speedup over a state-of-the-art symbolic execution engine. Second, Cloud9 is an on-demand software testing service: it runs on compute clouds, like Amazon EC2, and scales its use of resources over a wide dynamic range, proportionally with the testing task at hand. 1 Introduction Software testing is resource-hungry, time-consuming, labor-intensive, and prone to human omission and error. Despite massive investments in quality assurance, serious code defects are routinely discovered after software has been released [17], and fixing them at so late a stage carries substantial cost [16]. In this paper, we introduce Cloud9, a cloud-based testing service that promises to make high-quality testing fast, cheap, and practical. Cloud9 runs on compute utilities like Amazon EC2 [1], and we envision the following three use cases: First, developers can upload their software to Cloud9 and test it swiftly, as part of their development cycle. Second, end users can upload recently downloaded programs or patches and test them before installing, with no upfront cost. Third, Cloud9 can function as a quality certification service, akin to Underwriters Labs [20], by publishing official coverage results for tested applications. In an ideal future, software companies would be required to subject their software to quality validation on such a service, akin to mandatory crash testing of vehicles. In the absence of such certification, software companies could be held liable for damages resulting from bugs. For a software testing service to be viable, it must aim for maximal levels of automation. This means the service must explore as many of the software s execution paths as possible without requiring a human to explicitly write test scripts. But such automation can suffer from the tension between soundness and completeness e.g., static analysis can be complete on large code bases, but typically has a large number of false positives (i.e., is unsound), while model checking is sound, but takes too long to achieve practical completeness on real, large code bases. Of course, some level of assistance is inherently necessary to specify the difference between correct and wrong behavior, but driving the program down execution paths should not require human effort. Cloud9 achieves high levels of automation by employing symbolic execution. Introduced in the 1970s [12], this technique can explore all feasible execution paths in a program, thus being an ideal candidate for test automation. Unfortunately, it faces serious challenges, namely high memory consumption and CPU-intensive constraint solving, both exponential in program size. On a presentday computer, it is only feasible to test programs with a few thousand lines of code; for larger programs, typically only the shorter paths can be explored. Thus, symbolic execution is virtually unheard of in the general software industry, because real software often has millions of lines of code, rendering symbolic execution infeasible. Cloud9 is the first parallel symbolic execution engine to run on large shared-nothing clusters of computers, thus harnessing their aggregate memory and CPU resources. While parallelizing symbolic execution is a natural way to improve the technique s scalability, doing so in a cluster presents significant research challenges: First, balancing execution workload among nodes becomes a complex multi-dimensional optimization problem with several unknown inputs. Second, global coordination can only be done infrequently, so new search strategies must be devised for exploring a program s paths in parallel. This paper presents preliminary steps toward solving these problems. After presenting the concept of a software testing service in more detail ( 2), we describe our techniques for efficiently parallelizing symbolic execution ( 3). An initial prototype suggests that our approach is practical and useful: compared to the state of the art, Cloud9 reduced automated testing time of 32 real UNIX utilities on average by a factor of 47, with a maximum of 250-fold speedup ( 4). The paper closes with related work ( 5) and conclusions ( 6). 1
2 2 Software Testing as a Service Unlike classic testing frameworks, Cloud9 runs as a Web service. It is primarily meant to operate on public cloud infrastructures like Amazon EC2 [1], but can also be used privately on clusters running cloud software like Eucalyptus [7]. Testing-as-a-service has several benefits. First, Cloud9 offers a cost-effective, flexible way to run massive test jobs with no upfront cost. Unlike owning a private cluster, Cloud9 allows necessary machines to be commissioned only when needed for testing, in a number suitable to the complexity of the testing task. If a team required, e.g., 1,000 nodes for one hour every fortnight, the corresponding yearly budget could be as low as $2,500 on EC2. This is orders of magnitude less than the cost of acquiring and operating a private cluster of the same size. Second, an automated-test service reduces the learning curve associated with test frameworks. A standard Web service API can hide the complexity of operating an automated test infrastructure, thus encouraging developers to use it more frequently and, especially for new hires, to adopt thorough testing practices early on. Third, running test infrastructure as a service offers high flexibility in resource allocation. Whereas one would normally have to reserve a test cluster ahead of time, a cloud-based service can provision resources on-demand, corresponding to the complexity of the testing task at hand (e.g., depending on program size). It can also elastically recruit more resources during compute-intensive phases of the tests and release them during the other phases. The service interface requires a user to upload the program to test, a testing goal, and a resource policy. The program can be in binary form, source code, or an intermediate representation like LLVM [14]. The test goal tells the symbolic engine how to determine whether it reached a termination condition e.g., the test goal might be to find inputs that crash the program or exercise a security vulnerability. The resource policy indicates a cost budget along with guidance on how to resolve tradeoffs between the test goal and the budget. E.g., one may want as high a coverage as possible, but all within a $1,000 budget. Cloud9 returns to the user a set of automatically discovered input tuples that trigger conditions specified in the test goal, together with statistical information. For example, if the test goal was 90% line coverage, Cloud9 would produce a test suite (i.e., a set of program input tuples, or test cases) that, in the aggregate, exercise 90% of the uploaded program. Alternatively, the goal may be to test for crashes, in which case Cloud9 produces a set of pathological input tuples that can be used to crash the program, prioritized based on severity. Each such input tuple can be accompanied by a corresponding coredump and stack trace, to speed up debugging. Cloud9 does not require any special software on the user s side the input tuples serve as the most eloquent evidence of the discovered bugs. Upon receiving the results, users may be charged for the service based on previously agreed terms. It is essential that the pricing model capture the true value offered by Cloud9. While compute clouds today adopt a rental model (e.g., EC2 nodes cost $0.10/hour/node), a Cloud9 user does not derive value proportional to this cost. We favor a model in which users are charged according to their test goal specification. For example, if the goal is a certain level of coverage, then the user is charged a telescoping amount $x for each percentage point of coverage. If the goal is to find crashes, then a charge of $x for each crash-inducing defect is reasonable. In both cases, x can be proportional to program size. A good pricing model encourages frequent use of the service, thus increasing the aggregate quality of the software on the market. Finally, a viable testing service must address issues related to confidentiality of both uploaded material and corresponding test results, as well as multi-tenancy. There are also opportunities for amortizing costs across customers, e.g., by reusing test results for frequently used libraries and frameworks, like libc, STL, log4j, etc. In the rest of this paper, we focus on our main research contribution: parallelizing symbolic execution. 3 Parallel Symbolic Execution Symbolic execution [12] offers great promise as a technique for automated testing [10, 15, 4], as it can find bugs without human assistance. Instead of running the program with regular inputs, a symbolic execution engine executes a program with symbolic inputs that are unconstrained, e.g., an integer input x is given as value a symbol α that can take on any integer value. When the program encounters a branch that depends on x, program state is forked to produce two parallel executions, one following the thenbranch and another following the else-branch. The symbolic values are constrained in the two clones so as to make the branch condition evaluate to true (e.g., α<0), respectively false (e.g., α 0). Execution recursively splits into sub-executions at each relevant branch, turning an otherwise linear execution into an execution tree (Fig. 1). void read( int x ){ if (x < 0) { if (x < -3) foo(x); else {... } } else { if (x > 5) bar(x); else { False x < 0 True x > 5 x < -3 Figure 1: Example of an execution tree. Symbolic execution, then, consists of the systematic exploration of this execution tree. Each inner node is a branching decision, and each leaf is a program state that contains its own address space, program counter, and set of constraints on program variables. When an execution 2
3 encounters a testing goal (e.g., a bug), the constraints collected from the root to the goal leaf can be solved to produce concrete program inputs that exercise the path to the bug. Thus, symbolic execution is substantially more efficient than exhaustive input-based testing (it analyzes the behavior of code for entire classes of inputs at a time, without having to try each one out), and equally complete. 3.1 Challenges Classic symbolic execution faces three major challenges: path explosion, constraint solving overhead, and memory usage. Path explosion is due to the number of execution paths in a program growing exponentially in the number of branch instructions that depend (directly or indirectly) on inputs; as a result, larger programs cause testing to take exponentially longer. Compounding this effect is the fact that the CPU-intensive constraint solver must be invoked every time a branch instruction that depends on symbolic inputs is executed; we have found constraint solving to consume on the order of half of the total execution time. Finally, high memory usage resulting from path explosion causes symbolic execution engines to run out of memory before having explored a substantial fraction of a program s paths. As a result, state-of-the-art symbolic execution engines [10, 4] can test only small programs with a few thousands of lines of code, while real software systems are orders of magnitude bigger. By parallelizing symbolic execution on clusters, we aim for the equivalent of a classic symbolic execution engine on a machine with endlessly expandable memory and CPU power. Parallel symbolic execution brings three new challenges: the need to do blindfolded work partitioning, distributing the search strategy without coordination, and avoiding work and memory redundancy. First, the path exploration work must be distributed among worker nodes without knowing how much work each portion of the execution tree entails. The size of subtrees cannot be known a priori: determining the propagation of symbolic inputs to other program variables requires executing the program first. It is precisely this propagation that determines which branch instructions will create new execution states, i.e., nodes in the execution tree. As it turns out, execution trees are highly unbalanced, and statically finding a balanced partitioning of an unexpanded execution tree reduces to the halting problem. In addition to subtree size, another unknown is how much memory and CPU will be required for a given state the amount of work for a subtree is the sum of all nodes work. Thus, work distribution requires (as we will see later) a dynamic load balancing technique. Second, distributed exploration of an execution tree requires coordinating the strategies of a large number of workers, which is expensive. Classic symbolic execution relies on heuristics to choose which state from the execution tree to explore first, so as to efficiently reach the test goal. In the parallel case, local heuristics must be coordinated across workers, to achieve the global goal while minimizing redundant work; but global coordination implies high communication overhead. Test goals, like maximizing test coverage, require more complex search strategies than, e.g., iterative deepening depth-first search, often used in model checkers. Third, in a shared-nothing cluster, the risks of redundancy in path exploration and the opportunities for memory duplication are many more than on a single node. For instance, symbolic execution engines [5, 4] use copy-on write to maximize sharing of memory between execution states, substantially decreasing memory consumption. To achieve this in a cluster, load balancing must take into account the memory sharing opportunities and group similar states on the same worker. Deduplication techniques, such as bitstate hashing used in SPIN [11], are not readily usable for nodes in a symbolic execution tree, since different nodes in the tree can turn out to have identical state (e.g., due to commutative path segments) and a distributed hashing data structure would need to be implemented, which requires special effort and also incurs some performance penalties. In general, the methods used so far in parallel model checkers [19, 3, 13, 2, 11] do not scale to shared-nothing clusters. They also rely often on a priori partitioning a finite state space. In a cloud setting, running parallel symbolic execution further requires coping with frequent fluctuation in resource quality, availability, and cost. Machines have variable performance characteristics, their network proximity to each other is unpredictable, and failures are frequent. A system like Cloud9 must therefore cope with these problems in addition to the fundamental challenges of parallel symbolic execution. 3.2 Overview of Our Solution Cloud9 consists of multiple workers and a load balancer (see Fig. 2). Each worker independently explores a subtree of the program s execution tree, by running a symbolic execution engine consisting of a runtime and a searcher and a constraint solver. Upon encountering a conditional branch in the program, the runtime initializes a child node in the execution tree corresponding to each branch outcome. The searcher is asked which node in the tree to go to next (e.g., a DFS strategy would dictate always choosing the leftmost unexplored child). Once the searcher returns a choice, the runtime calls upon the constraint solver to determine the feasibility of the chosen node, i.e., whether there exist values that would satisfy the conjunction of the branch predicates along the path to the chosen node. If the path is feasible, the runtime follows it and adds the corresponding branch predicate to the path s constraints; otherwise, a new choice is requested. A smart exploration strategy helps find sooner the paths leading to the requested goal. This is particularly relevant for symbolic execution trees of infinite size. The searcher 3
4 Load balancer Worker #1 Worker #2... Worker #n Program under Test Runtime W1 S1 S0 W2 S2 W1 S3 S1 S0 S4 S1 S4 S0 W2 S2 S5 S6 Searcher Constraint solver (a) S7 (b) Figure 2: Cloud9 architecture can choose any node on the unexplored horizon of the execution tree, not just the immediate descendants of the current node. The overall exploration is global, while Cloud9 searchers have visibility only into the execution trees assigned to their particular workers. Thus, worker-level strategies must be coordinated a tightly coordinated strategy could achieve as efficient an exploration (i.e., with as little redundant work) as a single-node symbolic execution engine. It is also possible to run multiple instances of the runtime and searcher on the same physical machine, in which case the strategies of the co-located searchers can see all subtrees on that machine. But tight coupling limits the ability of workers to function independently of each other, and would thus hurt scalability. In order to steer path exploration toward the global goal, Cloud9 employs several techniques: Two-phased load balancing ( 3.3) starts with an initial static split of the execution tree and adjusts it dynamically, as exploration progresses. Replacing a single strategy with a portfolio of strategies ( 3.4) not only compensates for the limited local visibility, but can also better exploit Cloud9 s parallelism. Finally, we employ techniques for reducing redundancy, handling worker failures, and coping with heterogeneity ( 3.5). 3.3 Load Balancing A measure of a Cloud9 worker s instantaneous load is the amount of work it is guaranteed to have in the near future. When a worker forks new states, it adds these states to a work queue, and the length of this queue provides a lower bound on the amount of work left. In order to account for heterogeneity of both the states and the underlying hardware, we are exploring other second-order metrics as well, such as states average queue wait time, amount of memory they consume, number of queries passed to the constraint solver, etc. Workers periodically report their load to the central load balancer, which computes the global load distribution. When Cloud9 starts, there is no load information, so it statically partitions the search space (execution tree) among workers. Figure 3(a) illustrates an initial choice for a two-worker Cloud9: one branch of the first branch instruction in the program is explored by worker W 1 and the other branch by worker W 2. Figure 3: (a) Initial partition of the search space; (b) Repartitioning: W 1 delegates to W 2 the subtree rooted at state S 4. Dotted circles indicate states that are remote; dotted edges similarly indicate locally-unexplored paths. The search space must be repartitioned on the fly, because the execution tree can become highly imbalanced. Consider the execution tree in Figure 1: calling foo(α) could execute substantially more branch instructions that depend on α than bar(α), thereby causing more new states to be created in the corresponding subtree. Figure 3b illustrates one of the simplest cases of work imbalance: worker W 2 finishes exploring its subtree before W 1, so W 1 delegates to W 2 the expansion of subtree S 4. More generally, the load balancer declares a load imbalance when the most loaded worker W has at least x times the load of the least loaded worker w. We obtained good results by using x = 10, which helps preventing high overheads associated with frequent load balancing. At this point, the load balancer instructs W and w to negotiate a way of equalizing their load. The two workers agree on the set of states {S i } to delegate from W to w, based not only on the number of states, but also on other locally-computed metrics, such as which states (subtrees) appear to have highest constraint solving time or highest memory footprint. The main load balancing primitive is a worker-to-worker operation delegate(s,w,w), which shifts the responsibility for exploring the subtree rooted at state S from overloaded worker W to the lighter-loaded w. The actual computation and delegation occur asynchronously, allowing the workers to continue exploring while load is being balanced. There are two ways to delegate subtrees: state copying and state reconstruction. In state copying, W marshals the states (roots of the subtrees to be explored) and sends them over the network to w, which unmarshals them and adds them to its work queue. In state reconstruction, the identity of a state S i is encoded as a bitvector representing the then/else decisions needed to reach from the program s start state to S i. For example, referring to Figure 3b, node S 1 is encoded as 0, S 4 as 01, S 7 as 000, etc. When delegating responsibility for S i, W merely sends the bitvector encoding of S i to w, after which w reconstructs S i by rerunning the program symbolically along the path indicated by the bitvector. Since the execution tree is uniquely determined by the program under test, each node can be deterministically reconstructed this way. Our bitvector encoding resembles encodings used in 4
5 stateless search, first introduced by Verisoft [9] for model checking concurrent programs. Choosing the best candidate for delegation is governed by the CPU vs. network tradeoff: sending bitvectors is network-efficient, but consumes CPU for reconstruction on the target worker, while transferring states is CPUefficient, but consumes network bandwidth. State reconstruction is cheaper for subtrees whose roots are shallow in the execution tree. In addition, to optimize reconstruction time, the target worker reconstructs from the deepest common ancestor between already-explored nodes and the newly received subtree. Since Cloud9 uses copy-onwrite to share common memory objects between states, the longer the common prefix of two nodes in the execution tree, the higher the memory sharing benefit will be. Finally, during reconstruction, Cloud9 need not invoke the constraint solver, since the bitvector-encoded path is guaranteed to be feasible. 3.4 Exploration Strategy Portfolio Load balancing provides the means of connecting local strategies to the global goal. For instance, if the goal is to obtain high coverage tests, Cloud9 searchers will assign a local score for each state S indicating the expected coverage one might obtain by exploring S. High-score states are moved to the head of each worker s queue and prioritized for delegation to less loaded workers, to be executed as soon as possible. Thus, each load balancing decision moves Cloud9 closer to the global goal. In contrast to sequential symbolic execution, which is constrained to using one search strategy at a time, Cloud9 can employ a portfolio of concurrent strategies. We think of this portfolio in analogy to financial investment portfolios: if a strategy is a stock, workers represent cash, and the portfolio s return is measured in results per unit of time, then we face the problem of allocating cash to stocks so as to maximize overall return. By casting the exploration problem as an investment portfolio optimization problem, we expect to reuse portfolio theory results, such as diversification and speculation, as well as quantitative techniques for improving returns, such as efficient frontier and alpha/beta coefficients. For example, we can speculatively devote a small number of workers to a strategy that works exceptionally well, but only for a small fraction of programs. Running this exploration on a copy of the execution tree in parallel with a classic strategy that bears less risk may improve the expected time of reaching the overall goal. 3.5 Minimizing Redundant Work An important aspect of achieving scalability is the avoidance of redundant work. One source of redundant work is state duplication, which occurs by expanding identical states on different machines, which occurs frequently when testing multi-threaded programs. We intend to handle this problem by exploring commutative thread interleavings on the same machine, and perform state deduplication locally, using dynamic partial order reduction [8]. Commutative (but different) path segments can also lead to different nodes being identical in terms of contents. We found constraint solving to account for half or more of total symbolic execution time. Some of this time goes into re-solving constraints previously solved. Thus, we are building a distributed cache of constraint solutions, which allows workers to reuse the computation performed by other workers. Failing workers a frequent occurrence in large clusters also lead to redundancy, as other workers have to redo the work of failed workers. In Cloud9 we employ checkpointing at multiple levels to enable restarting a failed search on a peer worker. Since symbolic execution is memory and CPU-intensive, asynchronous checkpoints to stable storage are cheap. Worker failure can be thought of as an extreme case of worker performance heterogeneity, which is normally handled by monitoring queue lengths and constraint solving times, as mentioned in Initial Prototype We built a preliminary Cloud9 prototype that runs on Amazon EC2 [1] and uses the single-node Klee symbolic execution engine [4]. Preliminary measurements indicate that Cloud9 can achieve substantial speedups over Klee. For our measurements, we used single-core EC2 nodes and instructed both Klee and Cloud9 to automatically generate tests to exercise various UNIX utilities, with the aim of maximizing test coverage, as in [4]. Speedup (t KLEE /t Cloud9 ) csplit ls prcomm du chgrp cut date cksum ln cpptx head join echo mv cat expand chown basename printf chmod fmt odfactor Tool rm mktemp fold chcon paste readlink nldircolors Figure 4: Time to match Klee s coverage with Cloud9. The 16 line represents linear speedup. We measured how much faster a 16-node Cloud9 can achieve the same level of coverage that Klee achieves in one hour. We tested a random subset of 32 UNIX utilities, with a uniform distribution of binary sizes between the smallest utility (echo at 40 KB) and the largest one (ls at 170 KB). Figure 4 shows the results: speedup ranges from 2 to 250, with an average speedup of 47. The speedup exceeds the 16-fold increase in computation resources, because Cloud9 not only partitions the search 5
6 across 16 nodes, but also increases the probability that a given worker will find states with high coverage potential. We also compared the amount of coverage obtained for a given level of CPU usage. We ran Klee for 16 hours on one node and Cloud9 for 1 hour on 16 nodes (Figure 5), thus giving each tool 16 CPU-hours. Cloud9 outperformed Klee in 28 out of 32 cases, reconfirming the multiplicative benefit of parallel symbolic execution. Coverage (%) Cloud9 (1 hr x 16 nodes) Klee (16 hrs) od echo csplit dircolors fold cat du fmt pr join date head cp chcon ls ptx readlink mktemp printf basename factor chown rm comm chgrp cksum cut paste nl ln mv expand chmod Figure 5: Coverage obtained by Cloud9 and Klee, using identical number of CPU-hours. 5 Related Work To our knowledge, we are the first to parallelize symbolic execution to clusters of computers. There has been work, however, on parallel model checking [19, 3, 2]. Nevertheless, there are currently no model checkers that can scale to many loosely connected computers, mainly due to the overhead of coordinating the search across multiple machines and transferring explicit states. SPIN is a mature model checker that parallelizes and diversifies its search strategy on a shared-memory multi-core system [3, 11]; we cannot directly apply those techniques to shared-nothing clusters. Moreover, for the programs tested in [3, 11], the search space could be statically partitioned a priori, which is not feasible for Cloud9. There have been previous efforts to scale symbolic execution that do not involve parallelization. For example, concolic testing [18] runs a program concretely, while at the same time collecting path constraints along the explored paths; the constraints are then used to find alternate inputs that would take the program along different paths. Another example is S 2 E [6], which improves scalability by automatically executing symbolically only those parts of a system that are of interest. Our techniques are complementary, and in our future work we intend to combine S 2 E with Cloud9. In general, Cloud9 benefits from almost all single-node improvements of symbolic execution. 6 Conclusion This paper proposes Cloud9, a cloud-based parallel symbolic execution service. Our work is motivated by the severe limitations of symbolic execution memory and CPU usage that prevent its wide use. Cloud9 is designed to scale gracefully to large shared-nothing clusters; Tool by harnessing the aggregate resources of such clusters, we aim to make automated testing based on symbolic execution feasible for large, real software systems. Cloud9 is designed to run as a Web service, thus opening up the possibility of doing automated testing in a payas-you-go manner. We believe that a cloud-based testing service can become an essential component of software development infrastructure: it provides affordable and effective software testing that can be provisioned ondemand and be accessible to all software developers. References [1] Amazon EC2. [2] J. Barnat, L. Brim, and P. Rockai. Scalable multi-core LTL model-checking. In Intl. SPIN Workshop, [3] J. Barnat, L. Brim, and J. Stribna. Distributed LTL modelchecking in SPIN. In Intl. SPIN Workshop, [4] C. Cadar, D. Dunbar, and D. R. Engler. KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs. In Symp. on Operating Systems Design and Implementation, [5] C. Cadar, V. Ganesh, P. M. Pawlowski, D. L. Dill, and D. R. Engler. EXE: Automatically generating inputs of death. In Conf. on Computer and Communication Security, [6] V. Chipounov, V. Georgescu, C. Zamfir, and G. Candea. Selective symbolic execution. In Workshop on Hot Topics in Dependable Systems, [7] Eucalyptus software. [8] C. Flanagan and P. Godefroid. Dynamic partial-order reduction for model checking software. SIGPLAN Not., [9] P. Godefroid. Model checking for programming languages using Verisoft. In Symp. on Principles of Programming Languages, [10] P. Godefroid, N. Klarlund, and K. Sen. DART: Directed automated random testing. In Conf. on Programming Language Design and Implementation, [11] G. J. Holzmann, R. Joshi, and A. Groce. Swarm verification. In Intl. Conf. on Automated Software Engineering, [12] J. C. King. Symbolic execution and program testing. Communications of the ACM, [13] R. Kumar and E. G. Mercer. Load balancing parallel explicit state model checking. In Intl. Workshop on Parallel and Distributed Methods in Verification, [14] C. Lattner and V. Adve. LLVM: A compilation framework for lifelong program analysis and transformation. In Intl. Symp. on Code Generation and Optimization, [15] R. Majumdar and K. Sen. Hybrid concolic testing. In Intl. Conf. on Software Engineering, [16] S. McConnell. Code Complete, chapter 3. Microsoft Press, [17] Redhat security. security/updates/classification/, [18] K. Sen. Concolic testing. In Intl. Conf. on Automated Software Engineering, [19] U. Stern and D. L. Dill. Parallelizing the Murφ verifier. In Intl. Conf. on Computer Aided Verification, [20] Underwriters Labs. 6
Automated Software Testing as a Service
Automated Software Testing as a Service George Candea, Stefan Bucur, Cristian Zamfir School of Computer and Communication Sciences École Polytechnique Fédérale de Lausanne (EPFL), Switzerland ABSTRACT
Cloud9 Parallel Symbolic Execution for Automated Real-World Software Testing
Cloud9 Parallel Symbolic Execution for Automated Real-World Software Testing Stefan Bucur, Vlad Ureche, Cristian Zamfir, George Candea School of Computer and Communication Sciences Automated Software Testing
REVIEW OF CLOUD TESTING, TYPES, CHALLENGES AND FUTURE SCOPE
http:// REVIEW OF CLOUD TESTING, TYPES, CHALLENGES AND FUTURE SCOPE 1 Bhumika Maurya, 2 Chandraprabha and 3 Rashmi Patil 1,2 Research Scholar, SRMS CET, Bareilly. (India) 3 Assistant Professor, SRMS CET,
AUTOMATED TEST GENERATION FOR SOFTWARE COMPONENTS
TKK Reports in Information and Computer Science Espoo 2009 TKK-ICS-R26 AUTOMATED TEST GENERATION FOR SOFTWARE COMPONENTS Kari Kähkönen ABTEKNILLINEN KORKEAKOULU TEKNISKA HÖGSKOLAN HELSINKI UNIVERSITY OF
Experimental Comparison of Concolic and Random Testing for Java Card Applets
Experimental Comparison of Concolic and Random Testing for Java Card Applets Kari Kähkönen, Roland Kindermann, Keijo Heljanko, and Ilkka Niemelä Aalto University, Department of Information and Computer
White Paper. Cloud Performance Testing
White Paper Cloud Performance Testing Table of Contents Introduction and Background Information...2 Challenges & Limitations of On-Premise Model. 2 Cloud Scope and Service Models... 3 Why Cloud for Performance
Oracle Solaris Studio Code Analyzer
Oracle Solaris Studio Code Analyzer The Oracle Solaris Studio Code Analyzer ensures application reliability and security by detecting application vulnerabilities, including memory leaks and memory access
Dsc+Mock: A Test Case + Mock Class Generator in Support of Coding Against Interfaces
Dsc+Mock: A Test Case + Mock Class Generator in Support of Coding Against Interfaces Mainul Islam, Christoph Csallner Computer Science and Engineering Department University of Texas at Arlington Arlington,
Multi-Datacenter Replication
www.basho.com Multi-Datacenter Replication A Technical Overview & Use Cases Table of Contents Table of Contents... 1 Introduction... 1 How It Works... 1 Default Mode...1 Advanced Mode...2 Architectural
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions Slide 1 Outline Principles for performance oriented design Performance testing Performance tuning General
Load Balancing in MapReduce Based on Scalable Cardinality Estimates
Load Balancing in MapReduce Based on Scalable Cardinality Estimates Benjamin Gufler 1, Nikolaus Augsten #, Angelika Reiser 3, Alfons Kemper 4 Technische Universität München Boltzmannstraße 3, 85748 Garching
Parallel Databases. Parallel Architectures. Parallelism Terminology 1/4/2015. Increase performance by performing operations in parallel
Parallel Databases Increase performance by performing operations in parallel Parallel Architectures Shared memory Shared disk Shared nothing closely coupled loosely coupled Parallelism Terminology Speedup:
Migration Scenario: Migrating Batch Processes to the AWS Cloud
Migration Scenario: Migrating Batch Processes to the AWS Cloud Produce Ingest Process Store Manage Distribute Asset Creation Data Ingestor Metadata Ingestor (Manual) Transcoder Encoder Asset Store Catalog
A Review of Customized Dynamic Load Balancing for a Network of Workstations
A Review of Customized Dynamic Load Balancing for a Network of Workstations Taken from work done by: Mohammed Javeed Zaki, Wei Li, Srinivasan Parthasarathy Computer Science Department, University of Rochester
Distributed Dynamic Load Balancing for Iterative-Stencil Applications
Distributed Dynamic Load Balancing for Iterative-Stencil Applications G. Dethier 1, P. Marchot 2 and P.A. de Marneffe 1 1 EECS Department, University of Liege, Belgium 2 Chemical Engineering Department,
Model Checking of Software
Model Checking of Software Patrice Godefroid Bell Laboratories, Lucent Technologies SpecNCheck Page 1 August 2001 A Brief History of Model Checking Prehistory: transformational programs and theorem proving
Virtual Platforms Addressing challenges in telecom product development
white paper Virtual Platforms Addressing challenges in telecom product development This page is intentionally left blank. EXECUTIVE SUMMARY Telecom Equipment Manufacturers (TEMs) are currently facing numerous
Reconfigurable Architecture Requirements for Co-Designed Virtual Machines
Reconfigurable Architecture Requirements for Co-Designed Virtual Machines Kenneth B. Kent University of New Brunswick Faculty of Computer Science Fredericton, New Brunswick, Canada [email protected] Micaela Serra
Overview Motivating Examples Interleaving Model Semantics of Correctness Testing, Debugging, and Verification
Introduction Overview Motivating Examples Interleaving Model Semantics of Correctness Testing, Debugging, and Verification Advanced Topics in Software Engineering 1 Concurrent Programs Characterized by
TPCalc : a throughput calculator for computer architecture studies
TPCalc : a throughput calculator for computer architecture studies Pierre Michaud Stijn Eyerman Wouter Rogiest IRISA/INRIA Ghent University Ghent University [email protected] [email protected]
Graph Database Proof of Concept Report
Objectivity, Inc. Graph Database Proof of Concept Report Managing The Internet of Things Table of Contents Executive Summary 3 Background 3 Proof of Concept 4 Dataset 4 Process 4 Query Catalog 4 Environment
CHAPTER 1 INTRODUCTION
1 CHAPTER 1 INTRODUCTION 1.1 MOTIVATION OF RESEARCH Multicore processors have two or more execution cores (processors) implemented on a single chip having their own set of execution and architectural recourses.
CiteSeer x in the Cloud
Published in the 2nd USENIX Workshop on Hot Topics in Cloud Computing 2010 CiteSeer x in the Cloud Pradeep B. Teregowda Pennsylvania State University C. Lee Giles Pennsylvania State University Bhuvan Urgaonkar
Chapter 18: Database System Architectures. Centralized Systems
Chapter 18: Database System Architectures! Centralized Systems! Client--Server Systems! Parallel Systems! Distributed Systems! Network Types 18.1 Centralized Systems! Run on a single computer system and
Load Balancing. Load Balancing 1 / 24
Load Balancing Backtracking, branch & bound and alpha-beta pruning: how to assign work to idle processes without much communication? Additionally for alpha-beta pruning: implementing the young-brothers-wait
Six Strategies for Building High Performance SOA Applications
Six Strategies for Building High Performance SOA Applications Uwe Breitenbücher, Oliver Kopp, Frank Leymann, Michael Reiter, Dieter Roller, and Tobias Unger University of Stuttgart, Institute of Architecture
Part V Applications. What is cloud computing? SaaS has been around for awhile. Cloud Computing: General concepts
Part V Applications Cloud Computing: General concepts Copyright K.Goseva 2010 CS 736 Software Performance Engineering Slide 1 What is cloud computing? SaaS: Software as a Service Cloud: Datacenters hardware
SHARED HASH TABLES IN PARALLEL MODEL CHECKING
SHARED HASH TABLES IN PARALLEL MODEL CHECKING IPA LENTEDAGEN 2010 ALFONS LAARMAN JOINT WORK WITH MICHAEL WEBER AND JACO VAN DE POL 23/4/2010 AGENDA Introduction Goal and motivation What is model checking?
Parametric Analysis of Mobile Cloud Computing using Simulation Modeling
Parametric Analysis of Mobile Cloud Computing using Simulation Modeling Arani Bhattacharya Pradipta De Mobile System and Solutions Lab (MoSyS) The State University of New York, Korea (SUNY Korea) StonyBrook
Optimizing Shared Resource Contention in HPC Clusters
Optimizing Shared Resource Contention in HPC Clusters Sergey Blagodurov Simon Fraser University Alexandra Fedorova Simon Fraser University Abstract Contention for shared resources in HPC clusters occurs
Centralized Systems. A Centralized Computer System. Chapter 18: Database System Architectures
Chapter 18: Database System Architectures Centralized Systems! Centralized Systems! Client--Server Systems! Parallel Systems! Distributed Systems! Network Types! Run on a single computer system and do
Data Structure with C
Subject: Data Structure with C Topic : Tree Tree A tree is a set of nodes that either:is empty or has a designated node, called the root, from which hierarchically descend zero or more subtrees, which
16.1 MAPREDUCE. For personal use only, not for distribution. 333
For personal use only, not for distribution. 333 16.1 MAPREDUCE Initially designed by the Google labs and used internally by Google, the MAPREDUCE distributed programming model is now promoted by several
Relocating Windows Server 2003 Workloads
Relocating Windows Server 2003 Workloads An Opportunity to Optimize From Complex Change to an Opportunity to Optimize There is much you need to know before you upgrade to a new server platform, and time
The Model Checker SPIN
The Model Checker SPIN Author: Gerard J. Holzmann Presented By: Maulik Patel Outline Introduction Structure Foundation Algorithms Memory management Example/Demo SPIN-Introduction Introduction SPIN (Simple(
What Is Specific in Load Testing?
What Is Specific in Load Testing? Testing of multi-user applications under realistic and stress loads is really the only way to ensure appropriate performance and reliability in production. Load testing
Data Warehousing und Data Mining
Data Warehousing und Data Mining Multidimensionale Indexstrukturen Ulf Leser Wissensmanagement in der Bioinformatik Content of this Lecture Multidimensional Indexing Grid-Files Kd-trees Ulf Leser: Data
International Journal of Scientific & Engineering Research, Volume 4, Issue 11, November-2013 349 ISSN 2229-5518
International Journal of Scientific & Engineering Research, Volume 4, Issue 11, November-2013 349 Load Balancing Heterogeneous Request in DHT-based P2P Systems Mrs. Yogita A. Dalvi Dr. R. Shankar Mr. Atesh
DISTRIBUTED SYSTEMS AND CLOUD COMPUTING. A Comparative Study
DISTRIBUTED SYSTEMS AND CLOUD COMPUTING A Comparative Study Geographically distributed resources, such as storage devices, data sources, and computing power, are interconnected as a single, unified resource
How To Trace
CS510 Software Engineering Dynamic Program Analysis Asst. Prof. Mathias Payer Department of Computer Science Purdue University TA: Scott A. Carr Slides inspired by Xiangyu Zhang http://nebelwelt.net/teaching/15-cs510-se
Cloud computing - Architecting in the cloud
Cloud computing - Architecting in the cloud [email protected] 1 Outline Cloud computing What is? Levels of cloud computing: IaaS, PaaS, SaaS Moving to the cloud? Architecting in the cloud Best practices
Code and Process Migration! Motivation!
Code and Process Migration! Motivation How does migration occur? Resource migration Agent-based system Details of process migration Lecture 6, page 1 Motivation! Key reasons: performance and flexibility
Binary search tree with SIMD bandwidth optimization using SSE
Binary search tree with SIMD bandwidth optimization using SSE Bowen Zhang, Xinwei Li 1.ABSTRACT In-memory tree structured index search is a fundamental database operation. Modern processors provide tremendous
BY STEVE BROWN, CADENCE DESIGN SYSTEMS AND MICHEL GENARD, VIRTUTECH
WHITE PAPER METRIC-DRIVEN VERIFICATION ENSURES SOFTWARE DEVELOPMENT QUALITY BY STEVE BROWN, CADENCE DESIGN SYSTEMS AND MICHEL GENARD, VIRTUTECH INTRODUCTION The complexity of electronic systems is rapidly
Cloud for Large Enterprise Where to Start. Terry Wise Director, Business Development Amazon Web Services
Cloud for Large Enterprise Where to Start Terry Wise Director, Business Development Amazon Web Services Amazon Retail Business Tens of millions of active customer accounts Seven countries: US, UK, Germany,
Top Ten Reasons to Transition Your IT Sandbox Environments to the Cloud
Top Ten Reasons to Transition Your IT Sandbox Environments to the Cloud WHITE PAPER BROUGHT TO YOU BY SKYTAP 2 Top Ten Reasons to Transition Your IT Sandbox Environments to the Cloud Contents Executive
Volunteer Computing, Grid Computing and Cloud Computing: Opportunities for Synergy. Derrick Kondo INRIA, France
Volunteer Computing, Grid Computing and Cloud Computing: Opportunities for Synergy Derrick Kondo INRIA, France Outline Cloud Grid Volunteer Computing Cloud Background Vision Hide complexity of hardware
A Static Analyzer for Large Safety-Critical Software. Considered Programs and Semantics. Automatic Program Verification by Abstract Interpretation
PLDI 03 A Static Analyzer for Large Safety-Critical Software B. Blanchet, P. Cousot, R. Cousot, J. Feret L. Mauborgne, A. Miné, D. Monniaux,. Rival CNRS École normale supérieure École polytechnique Paris
International journal of Engineering Research-Online A Peer Reviewed International Journal Articles available online http://www.ijoer.
RESEARCH ARTICLE ISSN: 2321-7758 GLOBAL LOAD DISTRIBUTION USING SKIP GRAPH, BATON AND CHORD J.K.JEEVITHA, B.KARTHIKA* Information Technology,PSNA College of Engineering & Technology, Dindigul, India Article
Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder
Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder Matt Department of Computer Science and Engineering University of Minnesota [email protected] Abstract We present
Using Peer to Peer Dynamic Querying in Grid Information Services
Using Peer to Peer Dynamic Querying in Grid Information Services Domenico Talia and Paolo Trunfio DEIS University of Calabria HPC 2008 July 2, 2008 Cetraro, Italy Using P2P for Large scale Grid Information
Introduction to AWS Economics
Introduction to AWS Economics Reducing Costs and Complexity May 2015 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved. Notices This document is provided for informational purposes
Elastic Application Platform for Market Data Real-Time Analytics. for E-Commerce
Elastic Application Platform for Market Data Real-Time Analytics Can you deliver real-time pricing, on high-speed market data, for real-time critical for E-Commerce decisions? Market Data Analytics applications
RevoScaleR Speed and Scalability
EXECUTIVE WHITE PAPER RevoScaleR Speed and Scalability By Lee Edlefsen Ph.D., Chief Scientist, Revolution Analytics Abstract RevoScaleR, the Big Data predictive analytics library included with Revolution
Infrastructure as a Service (IaaS)
Infrastructure as a Service (IaaS) (ENCS 691K Chapter 4) Roch Glitho, PhD Associate Professor and Canada Research Chair My URL - http://users.encs.concordia.ca/~glitho/ References 1. R. Moreno et al.,
Big Data Processing with Google s MapReduce. Alexandru Costan
1 Big Data Processing with Google s MapReduce Alexandru Costan Outline Motivation MapReduce programming model Examples MapReduce system architecture Limitations Extensions 2 Motivation Big Data @Google:
A Scalable Network Monitoring and Bandwidth Throttling System for Cloud Computing
A Scalable Network Monitoring and Bandwidth Throttling System for Cloud Computing N.F. Huysamen and A.E. Krzesinski Department of Mathematical Sciences University of Stellenbosch 7600 Stellenbosch, South
IaaS Cloud Architectures: Virtualized Data Centers to Federated Cloud Infrastructures
IaaS Cloud Architectures: Virtualized Data Centers to Federated Cloud Infrastructures Dr. Sanjay P. Ahuja, Ph.D. 2010-14 FIS Distinguished Professor of Computer Science School of Computing, UNF Introduction
Cloud Computing Trends
UT DALLAS Erik Jonsson School of Engineering & Computer Science Cloud Computing Trends What is cloud computing? Cloud computing refers to the apps and services delivered over the internet. Software delivered
New Features in PSP2 for SANsymphony -V10 Software-defined Storage Platform and DataCore Virtual SAN
New Features in PSP2 for SANsymphony -V10 Software-defined Storage Platform and DataCore Virtual SAN Updated: May 19, 2015 Contents Introduction... 1 Cloud Integration... 1 OpenStack Support... 1 Expanded
15-418 Final Project Report. Trading Platform Server
15-418 Final Project Report Yinghao Wang [email protected] May 8, 214 Trading Platform Server Executive Summary The final project will implement a trading platform server that provides back-end support
MapReduce and Distributed Data Analysis. Sergei Vassilvitskii Google Research
MapReduce and Distributed Data Analysis Google Research 1 Dealing With Massive Data 2 2 Dealing With Massive Data Polynomial Memory Sublinear RAM Sketches External Memory Property Testing 3 3 Dealing With
WORKFLOW ENGINE FOR CLOUDS
WORKFLOW ENGINE FOR CLOUDS By SURAJ PANDEY, DILEBAN KARUNAMOORTHY, and RAJKUMAR BUYYA Prepared by: Dr. Faramarz Safi Islamic Azad University, Najafabad Branch, Esfahan, Iran. Workflow Engine for clouds
INCREASING SERVER UTILIZATION AND ACHIEVING GREEN COMPUTING IN CLOUD
INCREASING SERVER UTILIZATION AND ACHIEVING GREEN COMPUTING IN CLOUD M.Rajeswari 1, M.Savuri Raja 2, M.Suganthy 3 1 Master of Technology, Department of Computer Science & Engineering, Dr. S.J.S Paul Memorial
MINIMIZING STORAGE COST IN CLOUD COMPUTING ENVIRONMENT
MINIMIZING STORAGE COST IN CLOUD COMPUTING ENVIRONMENT 1 SARIKA K B, 2 S SUBASREE 1 Department of Computer Science, Nehru College of Engineering and Research Centre, Thrissur, Kerala 2 Professor and Head,
Subgraph Patterns: Network Motifs and Graphlets. Pedro Ribeiro
Subgraph Patterns: Network Motifs and Graphlets Pedro Ribeiro Analyzing Complex Networks We have been talking about extracting information from networks Some possible tasks: General Patterns Ex: scale-free,
IMCM: A Flexible Fine-Grained Adaptive Framework for Parallel Mobile Hybrid Cloud Applications
Open System Laboratory of University of Illinois at Urbana Champaign presents: Outline: IMCM: A Flexible Fine-Grained Adaptive Framework for Parallel Mobile Hybrid Cloud Applications A Fine-Grained Adaptive
Load Distribution in Large Scale Network Monitoring Infrastructures
Load Distribution in Large Scale Network Monitoring Infrastructures Josep Sanjuàs-Cuxart, Pere Barlet-Ros, Gianluca Iannaccone, and Josep Solé-Pareta Universitat Politècnica de Catalunya (UPC) {jsanjuas,pbarlet,pareta}@ac.upc.edu
Building Scalable Applications Using Microsoft Technologies
Building Scalable Applications Using Microsoft Technologies Padma Krishnan Senior Manager Introduction CIOs lay great emphasis on application scalability and performance and rightly so. As business grows,
Introduction of Virtualization Technology to Multi-Process Model Checking
Introduction of Virtualization Technology to Multi-Process Model Checking Watcharin Leungwattanakit [email protected] Masami Hagiya [email protected] Mitsuharu Yamamoto Chiba University
Certification Authorities Software Team (CAST) Position Paper CAST-13
Certification Authorities Software Team (CAST) Position Paper CAST-13 Automatic Code Generation Tools Development Assurance Completed June 2002 NOTE: This position paper has been coordinated among the
Measuring the Performance of an Agent
25 Measuring the Performance of an Agent The rational agent that we are aiming at should be successful in the task it is performing To assess the success we need to have a performance measure What is rational
Storage as a Service: Leverage the benefits of scalability and elasticity with Storage as a Service
Storage as a Service: Leverage the benefits of scalability and elasticity with Storage as a Service Storage is one of the great opportunities for cloud computing, thanks to the scalability and elasticity
Optimal Service Pricing for a Cloud Cache
Optimal Service Pricing for a Cloud Cache K.SRAVANTHI Department of Computer Science & Engineering (M.Tech.) Sindura College of Engineering and Technology Ramagundam,Telangana G.LAKSHMI Asst. Professor,
Moving Virtual Storage to the Cloud. Guidelines for Hosters Who Want to Enhance Their Cloud Offerings with Cloud Storage
Moving Virtual Storage to the Cloud Guidelines for Hosters Who Want to Enhance Their Cloud Offerings with Cloud Storage Table of Contents Overview... 1 Understanding the Storage Problem... 1 What Makes
Microsoft Private Cloud Fast Track
Microsoft Private Cloud Fast Track Microsoft Private Cloud Fast Track is a reference architecture designed to help build private clouds by combining Microsoft software with Nutanix technology to decrease
The Association of System Performance Professionals
The Association of System Performance Professionals The Computer Measurement Group, commonly called CMG, is a not for profit, worldwide organization of data processing professionals committed to the measurement
The Classical Architecture. Storage 1 / 36
1 / 36 The Problem Application Data? Filesystem Logical Drive Physical Drive 2 / 36 Requirements There are different classes of requirements: Data Independence application is shielded from physical storage
IMPLEMENTATION OF SOURCE DEDUPLICATION FOR CLOUD BACKUP SERVICES BY EXPLOITING APPLICATION AWARENESS
IMPLEMENTATION OF SOURCE DEDUPLICATION FOR CLOUD BACKUP SERVICES BY EXPLOITING APPLICATION AWARENESS Nehal Markandeya 1, Sandip Khillare 2, Rekha Bagate 3, Sayali Badave 4 Vaishali Barkade 5 12 3 4 5 (Department
Moving Virtual Storage to the Cloud
Moving Virtual Storage to the Cloud White Paper Guidelines for Hosters Who Want to Enhance Their Cloud Offerings with Cloud Storage www.parallels.com Table of Contents Overview... 3 Understanding the Storage
Cluster, Grid, Cloud Concepts
Cluster, Grid, Cloud Concepts Kalaiselvan.K Contents Section 1: Cluster Section 2: Grid Section 3: Cloud Cluster An Overview Need for a Cluster Cluster categorizations A computer cluster is a group of
GameTime: A Toolkit for Timing Analysis of Software
GameTime: A Toolkit for Timing Analysis of Software Sanjit A. Seshia and Jonathan Kotker EECS Department, UC Berkeley {sseshia,jamhoot}@eecs.berkeley.edu Abstract. Timing analysis is a key step in the
PARALLELS CLOUD SERVER
PARALLELS CLOUD SERVER An Introduction to Operating System Virtualization and Parallels Cloud Server 1 Table of Contents Introduction... 3 Hardware Virtualization... 3 Operating System Virtualization...
Accelerating Time to Market:
Accelerating Time to Market: Application Development and Test in the Cloud Paul Speciale, Savvis Symphony Product Marketing June 2010 HOS-20100608-GL-Accelerating-Time-to-Market-Dev-Test-Cloud 1 Software
Network Infrastructure Services CS848 Project
Quality of Service Guarantees for Cloud Services CS848 Project presentation by Alexey Karyakin David R. Cheriton School of Computer Science University of Waterloo March 2010 Outline 1. Performance of cloud
MAPREDUCE Programming Model
CS 2510 COMPUTER OPERATING SYSTEMS Cloud Computing MAPREDUCE Dr. Taieb Znati Computer Science Department University of Pittsburgh MAPREDUCE Programming Model Scaling Data Intensive Application MapReduce
Using In-Memory Computing to Simplify Big Data Analytics
SCALEOUT SOFTWARE Using In-Memory Computing to Simplify Big Data Analytics by Dr. William Bain, ScaleOut Software, Inc. 2012 ScaleOut Software, Inc. 12/27/2012 T he big data revolution is upon us, fed
Cloud Computing: Elastic, Scalable, On-Demand IT Services for Everyone. Table of Contents. Cloud.com White Paper April 2010. 1 Executive Summary...
Cloud Computing: Elastic, Scalable, On-Demand IT Services for Everyone Cloud.com White Paper April 2010 Table of Contents 1 Executive Summary... 2 2 Motivation Around Cloud Computing... 2 3 Comparing Cloud
Resource Utilization of Middleware Components in Embedded Systems
Resource Utilization of Middleware Components in Embedded Systems 3 Introduction System memory, CPU, and network resources are critical to the operation and performance of any software system. These system
