Skip to main content

QuCAT: A Combinatorial Testing Tool for Quantum Software

Description

With the increased developments in quantum computing, the availability of systematic and automatic testing approaches for quantum programs is becoming more and more essential. To this end, we present the quantum software testing tool QuCAT for combinatorial testing of quantum programs. QuCAT provides two functionalities of use. With the first functionality, the tool generates a test suite of a given strength (e.g., pair-wise). With the second functionality, it generates test suites with increasing strength until a failure is triggered or a maximum strength is reached. QuCAT uses two test oracles to check the correctness of test outputs. We assess the cost and effectiveness of QuCAT with 3 faulty versions of 5 quantum programs. Results show that combinatorial test suites with a low strength can find faults with limited cost, while a higher strength performs better to trigger some difficult faults with relatively higher cost.

Installation

  • Install Anaconda. You can download Anaconda for your OS from https://www.anaconda.com/
  • Install PICT. You can download PICT for your OS from https://github.com/Microsoft/pict
    • If you add it into system variable, you don't need to specify PICT root in the configuration file introduced later
  • Create a conda environment (e.g., with name "qucat"):
    conda create -n qucat python=3.9
    
  • Activate the environment and install Qiskit and rpy2
    conda activate qucat
    pip install qucat-cover
    

How to use QuCAT?

Quantum Program File

  • The quantum program should be written with Qiskit.
  • The code has to be structured in a function named as 'run' with one parameter that refers to the quantum circuit.
  • Users only need to add gates to the circuit and measure output qubits to get the output. They don't need to set any register, initialize circuits, choose the simulation, or execute the circuits in 'run' function.

A sample quantum program is available here.

Configuration File

The configuration file should be written in an INI file. The configuration file is described below.

[program]
root= 
;(Required)
;Description: The absolute root of your quantum program file.
num_qubit= 
;(Required)
;Description: The total number of qubit of your quantum program.
inputID= 
;(Required)
;Description: The IDs of input qubits.
;Format: A non-repeating sequence separated by commas.
outputID= 
;(Required)
;Description: The IDs of output qubits which are the qubits to be measured.
;Format: A non-repeating sequence separated by commas

[qucat_configuration]
pict_root=
;(Optional)
;Description: The absolute root to run pict. If the root is added to system variable, users don't need to specify it. pict_root='.' by default.
k=
;(Optional)
;Description: Order of combinations. In Functionality Two, it refers to the maximum value of strength. o = 2 by default. 
significance_level=
;(Optional)
;Description: The significance level for statistical test. significance_level = 0.01 by default.

[program_specification]
;Description: The program specification.
;Format:input string (binary),output string (binary)=probability
;Example:
;00,1=0.5
;00,0=0.5
;01,1=0.5
;01,0=0.5
;or
;0-,-=0.5
;Attention: '-' can refer to both '0' and '1'.

A sample configuration file is available here .

First, you need to activate the conda environment:

conda activate qucat

Second, you can write the Python program as follows as an example:

from qucat_cover.qucat_run import qucat
qucat(1,"/Users/user/qram_sample.ini", "")

There are three parameters for qucat method.

  • Functionality, value can be either 1 or 2
  • The root of the configuration file
  • The root of the seedrow file. ("" represents no seedrow file)

After all the preparation, QuCAT will generate test cases your requirement and execute to get results.

After running, you get 2 text files. They contain

  • Test Suites
  • Test Outputs and Assessment Results

Video Demonstration

A video demo is available here.

Extension

One can checkout the code from GitHub and provide extensions to QuCAT.

Metadata

Release files for qucat-cover 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qucat-cover 1.1.1
File Size Uploaded Provenance Actions
qucat_cover-1.1.1.tar.gz 13.8 kB Without provenance Details for qucat_cover-1.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for qucat-cover 1.1.1
File Interpreter ABI Platform Actions
qucat_cover-1.1.1-py3-none-any.whl Python 3 none any Details for qucat_cover-1.1.1-py3-none-any.whl

Total release size: 28.7 kB

Release files / qucat_cover-1.1.1.tar.gz

Download URL qucat_cover-1.1.1.tar.gz
Size 13.8 kB
Tags Source
SHA-256 checksum
How to use checksums
de0c4f889387aaad06e063e83b5c7952c68d33e89775f077ba7cd80408cafc70
BLAKE2b-256 checksum
How to use checksums
45aa8a4ad0ac15081f73c4f29b3501001cf508cac3912a57e85d41a07aa9792f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.4

Release files / qucat_cover-1.1.1-py3-none-any.whl

Download URL qucat_cover-1.1.1-py3-none-any.whl
Size 14.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
16863e43820ae948c74e43c50fb960431f2c87f921df31c01d9f52a23e1096cc
BLAKE2b-256 checksum
How to use checksums
761d3982948f412e94984af2e813019c6848ad0cfe5ed55a408e311418d6a9c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.4

Security for qucat-cover 1.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page