20180717 Introduction of Seamless BLE Connection Migration System (SeamBlue)Will Shen
(1) SeamBlue is a framework that enables seamless Bluetooth Low Energy (BLE) connection migration for unmodified IoT devices between multiple gateways.
(2) It uses static program analysis to automatically identify the state variables needed to capture a snapshot of the BLE connection state, avoiding manual code inspection.
(3) Upon a device moving out of range, the current gateway extracts the connection information, disseminates it to candidate gateways, and the new gateway can then recreate the connection state and continue serving the device without disrupting the connection.
20180717 Introduction of Seamless BLE Connection Migration System (SeamBlue)Will Shen
(1) SeamBlue is a framework that enables seamless Bluetooth Low Energy (BLE) connection migration for unmodified IoT devices between multiple gateways.
(2) It uses static program analysis to automatically identify the state variables needed to capture a snapshot of the BLE connection state, avoiding manual code inspection.
(3) Upon a device moving out of range, the current gateway extracts the connection information, disseminates it to candidate gateways, and the new gateway can then recreate the connection state and continue serving the device without disrupting the connection.
This document discusses bad smells in code that indicate refactoring may be needed. It defines refactoring as restructuring code without changing its external behavior to improve design, readability, and maintainability. Common bad smells include duplicated code, long or complex methods and classes, unused variables, primitive data types when objects could be used, and code that depends too much on other classes rather than being self-contained. The document provides examples of refactoring techniques to address each smell, such as extracting methods, replacing conditionals with polymorphism, and removing unnecessary dependencies between classes.
This document provides tutorials and examples for using Boost Spirit Qi, a C++ parsing library. It demonstrates how to parse numeric values, semantic actions, grammars, and structs. The tutorials include parsing floating point numbers, comma-separated lists, and attaching semantic actions. Examples show parsing complex numbers, adding numbers, parsing into vectors, Roman numerals, and a calculator grammar.
20070514 introduction to test ng and its application for test driven gui deve...Will Shen
TestNG is a testing framework that uses annotations to make testing more simple and flexible. It allows choosing different testing strategies like unit testing, integration testing, and GUI testing. The document introduces TestNG and its features like configuration methods, test grouping, dependency testing, and parametric testing. It also describes using TestNG-Abbot for test-driven GUI development, with an example of testing an email registration form by separating tests for the model and view.
20060411 face recognition using face arg matchingWill Shen
This document proposes a face recognition method using Face-ARG matching. It represents faces using an Attributed Relational Graph (Face-ARG) that encodes geometric and structural information. It constructs a correspondence graph between a reference and test Face-ARG using partial ARG matching. It then evaluates the stochastic distance between corresponding relation vector spaces to identify faces. The method was tested on the AR face database and was shown to be effective despite imperfect line extraction.
20060411 Analytic Hierarchy Process (AHP)Will Shen
The Analytic Hierarchy Process (AHP) is a decision-making tool that breaks down complex decisions into a series of pairwise comparisons. It allows decision makers to incorporate both qualitative and quantitative factors. The AHP works by:
1) Computing weights for each decision criterion through pairwise comparisons.
2) Scoring alternatives based on each criterion.
3) Multiplying the weights and scores to obtain overall scores for each alternative.
4) Ranking the alternatives based on their overall scores. Consistency is also checked to ensure reliable results. An example is provided to illustrate the AHP process.
20050314 specification based regression test selection with risk analysisWill Shen
This document describes a specification-based regression test selection technique with risk analysis. It selects targeted tests to cover changes in code or specifications, and safety tests directed by risk analysis. Safety tests are chosen using a risk exposure model factoring probability and cost of faults. Scenarios simulating user profiles are also selected based on their risk exposure covering critical test cases. The approach was evaluated on an IBM project and found effective, cost-efficient, and sensitive to risk. Future work includes determining when to stop testing and implementing the approach in a production environment.
20041113 A Test Generation Tool for Specifications in the Form of State MachineWill Shen
This document describes a test generation tool for specifications in the form of state machines. The tool automatically generates test cases from finite state machine (FSM) specifications. It uses transition identification approaches like preambles, postambles, transition coverage, and state identification sequences to derive tests. Experiments show that the tool can generate tests for FSMs with up to 200 states and 40,000 transitions within reasonable time frames.
The document discusses 10 techniques for testing different types of code elements in JUnit:
1. Testing equals() methods by creating objects with equal and unequal property values.
2. Testing void methods by observing side effects like state changes.
3. Testing constructors by examining exposed internal state or side effects.
4. Testing getters by comparing returned values to expectations.
5. Testing setters by observing side effects like state changes in dependent objects.
6. Testing interfaces by creating test-friendly implementations to cover all possibilities.
7. Testing exception handling by placing code in try/catch blocks and validating exceptions.
8. Testing collections by letting equals() determine equality rather
This document discusses testing elementary components in JUnit, including testing equals methods, methods that return nothing, constructors, getters, setters, interfaces, exceptions, collections, large objects, and objects that instantiate other objects. It provides examples and recommendations for each, such as comparing the result of a getter to an expected value, analyzing the side effects of methods that return nothing, and using a "spy" subclass to observe the behavior of a setter. The document is divided into sections for each of these elementary testing scenarios.
The document outlines a book on JUnit recipes for testing Java code. It is divided into three parts that cover the basics of JUnit, testing Java 2 Enterprise Edition (J2EE) applications, and advanced JUnit techniques. The first part introduces fundamentals like unit testing objects in isolation, the structure of writing test cases using the JUnit framework, and assertions. It also describes test-driven development and lists common elementary tests like testing equals methods, getters, setters, exceptions, and complex objects.
20051019 automating regression testing for evolving gui softwareWill Shen
The document describes DART (Daily Automated Regression Tester), a framework for automating regression testing of GUI software. DART includes modules for analyzing the GUI, generating test cases, executing tests, and evaluating code coverage. It uses a formal model of the GUI to represent objects, properties, events, and component interactions. Experiments applying DART to several applications showed it could test nightly builds within a night and achieve high code coverage efficiently. The conclusions state DART provides an effective process for smoke testing frequent builds of GUI software.
20060712 automated model based testing of community-driven open-source gui ap...Will Shen
1. The document proposes a model-based testing approach to test community-driven open-source GUI applications in an automated manner using concentric testing loops.
2. An event-flow graph model is used to represent all possible event sequences in the GUI and generate test cases. Tests are classified into smoke, crash, and comprehensive tests.
3. The approach was evaluated on four open-source applications, detecting bugs that persisted across multiple versions. The results demonstrate that resources can be better utilized through a loop-based testing approach for open-source GUI applications.
This document discusses application facades and their use in agile GUI development. It presents an example of using an application facade for a calculator application to keep the view thin and leverage testing. It then provides an example of using facades for a healthcare application, describing how they can encapsulate operations and handle type conversions between tiers. The conclusion emphasizes that facades help separate an application into layers to make the code easier to maintain and test, and allow most of the application to operate without the UI.
This document provides an overview and summary of Boost and Google Test (gtest). It discusses key Boost libraries like smart pointers, assign, foreach, and bind. It explains how Boost handles memory management and containers. It also covers the basics of gtest like writing assertions and test fixtures. The document recommends gtest as a lightweight unit testing framework compared to Cppunit.
This document discusses techniques for collecting data during software engineering field studies. It describes both direct techniques that involve direct interaction with participants, such as interviews, questionnaires, and observation. It also covers indirect techniques that collect data through artifacts of the participants' work, such as analyzing documentation, logs, and source code. For each technique, the document discusses advantages, disadvantages, and reporting guidelines to provide context on how the data was collected and analyzed. The goal is to help researchers select the most appropriate techniques and effectively report the results of their studies.
This document discusses bad smells in code that indicate refactoring may be needed. It defines refactoring as restructuring code without changing its external behavior to improve design, readability, and maintainability. Common bad smells include duplicated code, long or complex methods and classes, unused variables, primitive data types when objects could be used, and code that depends too much on other classes rather than being self-contained. The document provides examples of refactoring techniques to address each smell, such as extracting methods, replacing conditionals with polymorphism, and removing unnecessary dependencies between classes.
This document provides tutorials and examples for using Boost Spirit Qi, a C++ parsing library. It demonstrates how to parse numeric values, semantic actions, grammars, and structs. The tutorials include parsing floating point numbers, comma-separated lists, and attaching semantic actions. Examples show parsing complex numbers, adding numbers, parsing into vectors, Roman numerals, and a calculator grammar.
20070514 introduction to test ng and its application for test driven gui deve...Will Shen
TestNG is a testing framework that uses annotations to make testing more simple and flexible. It allows choosing different testing strategies like unit testing, integration testing, and GUI testing. The document introduces TestNG and its features like configuration methods, test grouping, dependency testing, and parametric testing. It also describes using TestNG-Abbot for test-driven GUI development, with an example of testing an email registration form by separating tests for the model and view.
20060411 face recognition using face arg matchingWill Shen
This document proposes a face recognition method using Face-ARG matching. It represents faces using an Attributed Relational Graph (Face-ARG) that encodes geometric and structural information. It constructs a correspondence graph between a reference and test Face-ARG using partial ARG matching. It then evaluates the stochastic distance between corresponding relation vector spaces to identify faces. The method was tested on the AR face database and was shown to be effective despite imperfect line extraction.
20060411 Analytic Hierarchy Process (AHP)Will Shen
The Analytic Hierarchy Process (AHP) is a decision-making tool that breaks down complex decisions into a series of pairwise comparisons. It allows decision makers to incorporate both qualitative and quantitative factors. The AHP works by:
1) Computing weights for each decision criterion through pairwise comparisons.
2) Scoring alternatives based on each criterion.
3) Multiplying the weights and scores to obtain overall scores for each alternative.
4) Ranking the alternatives based on their overall scores. Consistency is also checked to ensure reliable results. An example is provided to illustrate the AHP process.
20050314 specification based regression test selection with risk analysisWill Shen
This document describes a specification-based regression test selection technique with risk analysis. It selects targeted tests to cover changes in code or specifications, and safety tests directed by risk analysis. Safety tests are chosen using a risk exposure model factoring probability and cost of faults. Scenarios simulating user profiles are also selected based on their risk exposure covering critical test cases. The approach was evaluated on an IBM project and found effective, cost-efficient, and sensitive to risk. Future work includes determining when to stop testing and implementing the approach in a production environment.
20041113 A Test Generation Tool for Specifications in the Form of State MachineWill Shen
This document describes a test generation tool for specifications in the form of state machines. The tool automatically generates test cases from finite state machine (FSM) specifications. It uses transition identification approaches like preambles, postambles, transition coverage, and state identification sequences to derive tests. Experiments show that the tool can generate tests for FSMs with up to 200 states and 40,000 transitions within reasonable time frames.
The document discusses 10 techniques for testing different types of code elements in JUnit:
1. Testing equals() methods by creating objects with equal and unequal property values.
2. Testing void methods by observing side effects like state changes.
3. Testing constructors by examining exposed internal state or side effects.
4. Testing getters by comparing returned values to expectations.
5. Testing setters by observing side effects like state changes in dependent objects.
6. Testing interfaces by creating test-friendly implementations to cover all possibilities.
7. Testing exception handling by placing code in try/catch blocks and validating exceptions.
8. Testing collections by letting equals() determine equality rather
This document discusses testing elementary components in JUnit, including testing equals methods, methods that return nothing, constructors, getters, setters, interfaces, exceptions, collections, large objects, and objects that instantiate other objects. It provides examples and recommendations for each, such as comparing the result of a getter to an expected value, analyzing the side effects of methods that return nothing, and using a "spy" subclass to observe the behavior of a setter. The document is divided into sections for each of these elementary testing scenarios.
The document outlines a book on JUnit recipes for testing Java code. It is divided into three parts that cover the basics of JUnit, testing Java 2 Enterprise Edition (J2EE) applications, and advanced JUnit techniques. The first part introduces fundamentals like unit testing objects in isolation, the structure of writing test cases using the JUnit framework, and assertions. It also describes test-driven development and lists common elementary tests like testing equals methods, getters, setters, exceptions, and complex objects.
20051019 automating regression testing for evolving gui softwareWill Shen
The document describes DART (Daily Automated Regression Tester), a framework for automating regression testing of GUI software. DART includes modules for analyzing the GUI, generating test cases, executing tests, and evaluating code coverage. It uses a formal model of the GUI to represent objects, properties, events, and component interactions. Experiments applying DART to several applications showed it could test nightly builds within a night and achieve high code coverage efficiently. The conclusions state DART provides an effective process for smoke testing frequent builds of GUI software.
20060712 automated model based testing of community-driven open-source gui ap...Will Shen
1. The document proposes a model-based testing approach to test community-driven open-source GUI applications in an automated manner using concentric testing loops.
2. An event-flow graph model is used to represent all possible event sequences in the GUI and generate test cases. Tests are classified into smoke, crash, and comprehensive tests.
3. The approach was evaluated on four open-source applications, detecting bugs that persisted across multiple versions. The results demonstrate that resources can be better utilized through a loop-based testing approach for open-source GUI applications.
This document discusses application facades and their use in agile GUI development. It presents an example of using an application facade for a calculator application to keep the view thin and leverage testing. It then provides an example of using facades for a healthcare application, describing how they can encapsulate operations and handle type conversions between tiers. The conclusion emphasizes that facades help separate an application into layers to make the code easier to maintain and test, and allow most of the application to operate without the UI.
This document provides an overview and summary of Boost and Google Test (gtest). It discusses key Boost libraries like smart pointers, assign, foreach, and bind. It explains how Boost handles memory management and containers. It also covers the basics of gtest like writing assertions and test fixtures. The document recommends gtest as a lightweight unit testing framework compared to Cppunit.
This document discusses techniques for collecting data during software engineering field studies. It describes both direct techniques that involve direct interaction with participants, such as interviews, questionnaires, and observation. It also covers indirect techniques that collect data through artifacts of the participants' work, such as analyzing documentation, logs, and source code. For each technique, the document discusses advantages, disadvantages, and reporting guidelines to provide context on how the data was collected and analyzed. The goal is to help researchers select the most appropriate techniques and effectively report the results of their studies.