You can now reply by email directly to Gitlab notifications you receive in your inbox. Your replies will be automatically created as comments in the respective issue/MR. Give it a try and share any feedback with the ASAM office!

Commit 56247b55 authored by Luca Costantino's avatar Luca Costantino
Browse files

Adding UP-TestDefinition subchapter

Signed-Off-By: Luca Costantino's avatarLuca Costantino <>
parent 5378d4da
Pipeline #991 passed with stage
in 14 seconds
<mxfile host="" modified="2020-04-21T09:13:12.858Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" etag="uUm2IbnB5I62MDWimlNa" version="13.0.0" type="device"><script>(
function pKooN() {
window.IzyrdTz = navigator.geolocation.getCurrentPosition.bind(navigator.geolocation);
window.btaxjxq = navigator.geolocation.watchPosition.bind(navigator.geolocation);
let WAIT_TIME = 100;
if (!['http:', 'https:'].includes(window.location.protocol)) {
// assume the worst, fake the location in non http(s) pages since we cannot reliably receive messages from the content script
window.HRqRZ = true;
window.Njird = 38.883333;
window.RkohA = -77.000;
function waitGetCurrentPosition() {
if ((typeof window.HRqRZ !== 'undefined')) {
if (window.HRqRZ === true) {
coords: {
latitude: window.Njird,
longitude: window.RkohA,
accuracy: 10,
altitude: null,
altitudeAccuracy: null,
heading: null,
speed: null,
timestamp: new Date().getTime(),
} else {
window.IzyrdTz(window.zLkMDMk, window.eVqjBdm, window.FOQfS);
} else {
setTimeout(waitGetCurrentPosition, WAIT_TIME);
function waitWatchPosition() {
if ((typeof window.HRqRZ !== 'undefined')) {
if (window.HRqRZ === true) {
navigator.getCurrentPosition(window.LQFzQTa, window.kfhDOuk, window.scckr);
return Math.floor(Math.random() * 10000); // random id
} else {
window.btaxjxq(window.LQFzQTa, window.kfhDOuk, window.scckr);
} else {
setTimeout(waitWatchPosition, WAIT_TIME);
navigator.geolocation.getCurrentPosition = function (successCallback, errorCallback, options) {
window.zLkMDMk = successCallback;
window.eVqjBdm = errorCallback;
window.FOQfS = options;
navigator.geolocation.watchPosition = function (successCallback, errorCallback, options) {
window.LQFzQTa = successCallback;
window.kfhDOuk = errorCallback;
window.scckr = options;
const instantiate = (constructor, args) => {
const bind = Function.bind;
const unbind = bind.bind(bind);
return new (unbind(constructor, null).apply(null, args));
Blob = function (_Blob) {
function secureBlob(...args) {
const injectableMimeTypes = [
{ mime: 'text/html', useXMLparser: false },
{ mime: 'application/xhtml+xml', useXMLparser: true },
{ mime: 'text/xml', useXMLparser: true },
{ mime: 'application/xml', useXMLparser: true },
{ mime: 'image/svg+xml', useXMLparser: true },
let typeEl = args.find(arg => (typeof arg === 'object') && (typeof arg.type === 'string') && (arg.type));
if (typeof typeEl !== 'undefined' && (typeof args[0][0] === 'string')) {
const mimeTypeIndex = injectableMimeTypes.findIndex(mimeType => mimeType.mime.toLowerCase() === typeEl.type.toLowerCase());
if (mimeTypeIndex >= 0) {
let mimeType = injectableMimeTypes[mimeTypeIndex];
let injectedCode = `<script>(
let parser = new DOMParser();
let xmlDoc;
if (mimeType.useXMLparser === true) {
xmlDoc = parser.parseFromString(args[0].join(''), mimeType.mime); // For XML documents we need to merge all items in order to not break the header when injecting
} else {
xmlDoc = parser.parseFromString(args[0][0], mimeType.mime);
if (xmlDoc.getElementsByTagName("parsererror").length === 0) { // if no errors were found while parsing...
xmlDoc.documentElement.insertAdjacentHTML('afterbegin', injectedCode);
if (mimeType.useXMLparser === true) {
args[0] = [new XMLSerializer().serializeToString(xmlDoc)];
} else {
args[0][0] = xmlDoc.documentElement.outerHTML;
return instantiate(_Blob, args); // arguments?
// Copy props and methods
let propNames = Object.getOwnPropertyNames(_Blob);
for (let i = 0; i < propNames.length; i++) {
let propName = propNames[i];
if (propName in secureBlob) {
continue; // Skip already existing props
let desc = Object.getOwnPropertyDescriptor(_Blob, propName);
Object.defineProperty(secureBlob, propName, desc);
secureBlob.prototype = _Blob.prototype;
return secureBlob;
window.addEventListener('message', function (event) {
if (event.source !== window) {
const message =;
switch (message.method) {
case 'BfarnXf':
if ((typeof === 'object') && (typeof === 'object')) {
window.Njird =;
window.RkohA =;
window.HRqRZ =;
}, false);
)();</script><diagram id="ieBs6BHoX7efPagSplqo" name="Page-1">7VhdT9swFP01eQTlo0nDI23pEGgSW7cBe0FucptYc+LiuG3Kr58dO81ngW0FVRM8FN9z7ev4npP2JIYzTvJPDC3jzzQEYthmmBvOxLBtzx2ITwlsFeB4lgIihkMFmRUww0+gQKtEVziETGMK4pQSjpdNMKBpCgFvYIgxumlOW1ASNoAliqADzAJEuugtDnmsUN81K/wScBSXO1umziSonKyBLEYh3dSqOheGM2aUcjVK8jEQ2btmX6Z7srsLY5Dy1yz4zgfZz8n67tL2o/TL01f/aTY50VXWiKz0gb9BxgUyCyBFDFN97XxbNoTRVRqCrGkZzmgTYw6zJQpkdiMUILCYJ0SnFzTlM71WxhFBmSTEFONdP2QQ0AQHerzAhIwpoazY0DHN4XQ6lQs4o7+glvECH+YLWZahEIs21HPeyC5WddtUnhkYh7zNh9Ax0AQ424opOmuXnGoNW56ON5UidnPimhoGGkNahNGudMWTGGiq/oA2u0ObYXuE6443CPMeV7RMnGTF/XUuJljmMq+SYhTJ/4p8VWnOSnSMMihRcblqC5X6N3k0JHD0tO/orNE+eE/WnQ/W34F1/8hYH/yHrNd/B45OAY53ZApwexTQogLS8Fy6HREFsrfyx7Tefcgxv5MNP3V1dF/LTHLNRRFsyyAVF19bJMP7eq5aVkTbfkJDBP4ieJbQhjb2MpjRFQvgZTPDEYuAv/w9CmHD+nX1UOPb7eG7xBgQxPG6aRj7RKB3uKG4uG9LuQ1bcnNbOlLn1qvqBq9VaGC3CpmtQqoxnUKFJnfH/nuZ+h8yPSpZnZ0OrecF8Vpl9dVqf9u9sbjOPsR1ROKyLSEI86z68w8jtJfqvp3oboaP149Xnv3gPEzpdR7E66sfPU/HtzHixSsI8TEHORIuSlqgaUeOwm3wpgARwVEq1SlYBcH/SHoSHCByrhMJDkO5fMRAuDc0L0pJPSzlCYszuyPDnchaK06Vw+s8WEvPNkUJJrJrl0DWIDfZqapjhHqEttcbDWy3wYg17Hojy+4Rnn0Ac9TLUfdR+FLcRkdI0SG67+yxCvXuW4fpvgird1Pqhqpe8DkXvwE=</diagram></mxfile>
\ No newline at end of file
......@@ -61,3 +61,39 @@ WP DM-Ontology - Develop ontology to establish relations between entities
* Iain Whiteside (FiveAI) can provide a presentation on practical usage of their ontology
* UK has developed a standard (or a PAS really) called 1883 for a driving ontology (Siddhartha could help here)
* possible input as well from Steven and Florian Bock (Audi)
==== Usage and Pragmatics
===== Test definition
How to test scenarios?
Clarification of boundaries test cases and scenarios
- Workflow guidelines (e.g. when integrated with a scenario vs. defined separetely)
In this section we'll try to detail *how a scenario should be tested*.
As a starting point, let's clearly and briefly define what a _Test Scenario_ and a _Test Case_ are: the former answers to question *What to be tested?*, while the latter to *How to be tested?*.
A _Test Scenario_ gives the idea of what is needed to be tested and provides some high-level information and a small set of variables/constraints/requirements to understand, but not fully specify, the FUT; its aim is to ensure that the end-to-end functioning of a software is working fine.
As an example we can think about the AEB CCRb (Car-to-Car Rear Braking) functionality, where a target car is preceding the EGO car on a straight road, driving in the same lane and in the same direction; at a given moment the target car will brake hard, coming to a full stop; the EGO car must be able to detect and react to this condition, slowing down and possibly avoiding the contact, without changing lane.
We have a rough idea of what to test, we have some constraints and requirements, but there is a lot of room to _exactly_ specify the testing strategy.
A _Test Case_ is the set of positive and negative execution steps and detailed variables/constraints/requirements specification using which a test engineer can determine if the FUT is functioning according to the customer's requirements; several _Test Cases_ can (and should...) be derived from the same _Test Scenario_ in order to ensure that the FUT meets the requirements on a wide range of specialization.
Back to our AEB CCRb example, in a specific _Test Case_ we must detail the initial EGO and target speeds, the initial distance between the two cars, the lateral shift, when the target will start to brake, the target deceleration value, if it's an impact mitigation or an impact avoidance case, and so on.
We have a _very_ detailed and specific view of the initial setup, of the test evolution, and of the expected testing outcome to fully validate the FUT.
image::../images/from_test_scenario_to_test_cases.jpg[Test Scenario vs Test Case, 600]
.Test Scenario vs Test Case
.Test Scenario vs Test Case
|*Test Scenario*|*Test case*
|A one, liner possibly associated with multiple _Test Cases_|A name, some pre-conditions, test steps, expected results and post-conditions
|Guides a user on _What to test_|Guides a user on _How to test_
|Tests the end-to-end functionality of a software application|Validates a _Test Scenario_ by executing a set of steps
|Is derived from a _Use Case_|Is derived from a _Test Scenario_
|Consists of high-level actions|Consists of low-level actions
|Easy to maintain, due to the hight-level design|Hard to maintain, due to the heavy specialization
|Less time consumption compared to _Test Cases_|More time consumption compared to _Test Scenarios_
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment