Skip to content

To Hanfor #

In this guide we are going to talk about required tools to install in order to set up a development environment for Hanfor.

However, to contribute, you know the drill, head over to Hanfor's Git repository and fork it, then work in your changes and PR.

Environment Setup #

Hanfor is a web based tool running on JavaScript on the client side and python on the server side.

Backend #

Prepare the python environment as described in the installation guide.

Additionally install the development requirements

pip install -r requirements-dev.txt

We use python black with the settings defined in hanfor/pyproject.toml.

Frontend #

To prepare the client side JavaScript code development (and also some static assets), the JavaScript based module bundler webpack is needed. Note, that webpack has to be executed after changing in the frontend.

  • Install Node.js on your machine (in order to be able to execute JavaScript code).
  • Run the package manager npm (part of the Node.js installation) to install webpack.
npm install --save-dev webpack

Build and Run #

The frontend of Hanfor has to be built before deploying.

Frontend #

To build the frontend change your path to the static folder, and execute webpack as follows

cd static
npm run build

If you want to debug java-script code in your browser, you can tell webpack to include a source map by running the following command instead. Note: please do not commit the resulting build to the repository.

npm run dev-build

Backend #

Launch a Hanfor session as explained in the installation guide.

Analysis Connector #

To start analyses directly from the web frontend, Hanfor has the option to connect to an existing Ultimate-PA server instance via its web api. For the use of Ultimate-PA a toolchain and user-settings are required. For simplification a toolchain and a set of user settings are combined to a configuration witch can be selected at the frontend. All configurations addressing the analysis and Ultimate-PA can be set in /hanfor/configuration/ultimate_config.py.

Toolchains #

In the ultimate_config file the folder for the toolchain xml files can be set with ULTIMATE_TOOLCHAIN_FOLDER. If this variable is '' the default folder is uses (configuration/ultimate/toolchains).

User Settings #

In the ultimate_config file the folder for the user_setting json files can be set with ULTIMATE_USER_SETTINGS_FOLDER. If this variable is '' the default folder is uses (configuration/ultimate/user_settings).

When using Ultimate-PA locally the user settings are saved in an .epf file. For the web api these user settings have to be in a json format. To convert the .epf file to a .json file the settings-epf-to-json.py can be used. It is located in /hanfor/ultimate. Usage: python3 settings-epf-to-json.py <epf-file> [json-file] if [json-file] is not provided the .json file will be named like the .epf file (e.g. name.epf -> name.json).

Configurations #

When starting an analysis an Ultimate-PA configuration can be chosen. These configurations are set in the ultimate-config file. Each configuration consists of a toolchain and user-settings. To add a new configuration add a new key, representing the displayed name, to the ULTIMATE_CONFIGURATIONS dict, like shown below. The values of the toolchain and the user_settings key are the file_names of the corresponding files without the file ending.

ULTIMATE_CONFIGURATIONS = {
    'Standard': {'toolchain': 'ReqCheck', 'user_settings': 'ReqCheck-non-lin'},
    'Standard 2': {'toolchain': 'ReqCheck', 'user_settings': 'ReqCheck-non-lin'}
}