A list of terms that are either found in the articles of the December 2015 edition, or are related to concepts relevant to those articles.
Action Based Testing (ABT)
A refinement of the keyword-driven test approach that provides a powerful framework for organizing test design, automation and execution around keywords. In ABT, keywords are called “actions”. Actions are the tasks that are executed during a test. Rather than automating an entire test as one long script, tests are assembled using individual actions. Unlike traditional test design, which begins with a written narrative that must be interpreted by each tester or automation engineer, ABT test design takes place in a spreadsheet format called a test module. Actions, test data and any necessary GUI interface information are stored in separate files and referenced by the main test module.
Behavior Driven Development (BDD)
A software development methodology in which an application is specified and designed by describing how its behavior should appear to an outside observer. BDD combines the general techniques and principles of test-driven development (TDD) with ideas from domain-driven design and object-oriented analysis and design to provide software development and management teams with shared tools and a shared process to collaborate on software development. BDD offers the ability to enlarge the pool of input and feedback to include business stakeholders and end users who may have little software development knowledge. Because of this expanded feedback loop, BDD works well in continuous integration and continuous delivery environments.
Concurrency refers to multiple things happening at the same time. In testing, it’s all about the fact that your web application, mobile application, etc., may be required, in a real world setting, to respond to multiple demands occurring in parallel. Load testing is the method by which we test to ensure that an application, and the resources it has to work with, is equipped to handle the level of concurrency that it can expect to find in the field.
Continuous Integration (CI)
A software engineering practice in which the changes made by developers to working copies of code are added to the mainline code base on a frequent basis, and immediately tested. The goal is to provide rapid feedback so that, if a defect is introduced into the mainline, it can be identified quickly and corrected as soon as possible. Continuous integration software tools are often used to automate the testing and build a document trail. Because CI detects deficiencies early on in development, defects are typically smaller, less complex, and easier to resolve. In the end, well-implemented CI reduces the cost of software development and helps speed time to market.
(Term derived from the words “Development” and “Operations”) A software development practice, grounded in agile philosophy, that emphasizes close collaboration between an organization’s software developers and other IT professionals, while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and organizational workflow in which building, testing, and releasing software happens rapidly, frequently, and more reliably.
(Also referred to as domain-specific language) A computer language tailored for a specific application or discipline (domain). In automated testing, for example, the keyword-driven approach, such as that which is implemented by LogiGear’s TestArchitect automation tool, allows teams to develop their own customized domain languages. Such languages allow for easier implementation of testing scenarios, and aid in communication between organizational teams.
The process of restructuring existing computer code without changing its external behavior. From a functional standpoint (or at least from the standpoint of satisfying existing specifications) code refactoring should be transparent. Instead, it is the nonfunctional attributes of the software that are improved. Code refactoring is considered a form of “hygiene”, the advantages of which include improved readability and reduced complexity. These in turn can improve source code maintainability and create a more expressive internal architecture or object model to improve extensibility. If done well, code refactoring may also resolve hidden, dormant, or undiscovered computer bugs or vulnerabilities in the system by simplifying the underlying logic and eliminating unnecessary levels of complexity.