{"id":34583,"date":"2025-09-30T14:46:34","date_gmt":"2025-09-30T12:46:34","guid":{"rendered":"https:\/\/inlab.fib.upc.edu\/?p=34583"},"modified":"2025-10-01T15:51:51","modified_gmt":"2025-10-01T13:51:51","slug":"sistedes-conference","status":"publish","type":"post","link":"https:\/\/inlab.fib.upc.edu\/en\/blog\/sistedes-conference","title":{"rendered":"SISTEDES 2025 &#8211; Declarative Domain Testing: a declarative approach to test data generation"},"content":{"rendered":"\n<p>The week of September 8th to 12th saw the \u201cJornadas Sistedes,\u201d the national reference meeting point for software engineering researchers. As has been customary for several years, some members of inLab FIB had the opportunity to attend and present some of our current research lines in this field. <\/p>\n\n<p>In this article, we will focus on one of them: Declarative Domain Testing, a new approach to implementing software tests that improves quality while reducing costs.<\/p>\n\n<p>To explain it, let\u2019s suppose a client, with an admirable social life, asks us to develop a very simple software system to record the days he has been invited to dinner at a friend\u2019s or relative\u2019s house. Specifically, he wants to record the date and time of each dinner, the location, the person organizing it, and the attendees (where each dinner always has a minimum of two attendees). Additionally, our client warns us that he is very forgetful and has, on occasion, accepted two invitations on the same day, which has put him in a bind more than once\u2026 Therefore, the client is very interested in the application raising an alert if he tries to accept two simultaneous invitations.   <\/p>\n\n<p>As good software engineers, we apply the TDD (<em>Test-Driven Development<\/em>) philosophy and decide to create a test that forces us to implement this alert feature. The issue is that, to create the test, we need our client to already have a dinner registered in the system (for example, on December 25th). But to create this dinner, we need another person registered in the system to organize it (for example, the client\u2019s mother), and this dinner will require at least two attendees, so we need to instantiate at least a second person (for example, the client\u2019s father)\u2026 plus we need a location (for example, the client\u2019s parents\u2019 house) and now we need another dinner! And this other dinner also requires instantiating two more people (for example, the client\u2019s in-laws). These two people cannot be the same as those used before, because no one can be in two dinners on the same day (nor is it advisable for your parents to also be your in-laws).  <\/p>\n\n<p>In summary, building the precondition state of a test can be incredibly tedious, even with software examples as simple as the one just described (and now, imagine developing a real hospital visit scheduling application that may have temporal non-overlapping constraints like the above, along with much more complex constraints on treatments, illnesses, allergies, specialist visits, etc.). The outcome is well known: when building the test requires more effort than implementing the functionality, either we stoically remain faithful to writing the tests (to the despair of the project\u2019s financial manager, who sees costs multiply with each new feature), or we skip writing tests (to the despair of future developers, who face risks to the project\u2019s quality and maintainability). <\/p>\n\n<p>From inLab FIB, however, we make the following observation: the only thing we need to create the test is a client with two dinner invitations on the same day! And this description of what we need takes, literally, 1, 2, 3\u2026 10 words! How can this be so difficult for a developer? In short, this is yet another example of a well-known phenomenon: declaring abstractly what we want is much faster than concretely implementing what we need, because the concrete implementation forces us to decide on details we don\u2019t care about (such as the specific date, the specific people, the specific locations, etc., of the dinner). Can\u2019t this part be automated a bit more?<\/p>\n\n<p>At the conference, we introduced the DDT (Declarative-Domain Testing) philosophy, based on declaring what we want in the test using a specification language, and integrating a symbolic reasoning AI that instantiates data satisfying this specification (details that are indifferent to us, but must be chosen intelligently to meet the test\u2019s needs). Additionally, we also presented the DArrenge4J library, currently under development, which brings this philosophy into practice for Java projects using JUnit. <\/p>\n\n<p>If you are interested in the topic, you can find more information in <a href=\"https:\/\/link.springer.com\/chapter\/10.1007\/978-3-031-94569-4_15\">a more detailed article published at CAiSE 2025<\/a>, with Mart\u00ed Juanola, Jos\u00e9 Francisco Crespo, myself, and Ernest Teniente, or you can contact us directly \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The week of September 8th to 12th saw the \u201cJornadas Sistedes,\u201d the national reference meeting point for software engineering researchers. As has been customary for several years, some members of inLab FIB had the opportunity to attend and present some of our current research lines in this field. In this article, we will focus on [&hellip;]<\/p>\n","protected":false},"author":1273,"featured_media":34587,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[572],"tags":[],"experteses":[],"class_list":["post-34583","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/posts\/34583","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/users\/1273"}],"replies":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/comments?post=34583"}],"version-history":[{"count":3,"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/posts\/34583\/revisions"}],"predecessor-version":[{"id":34593,"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/posts\/34583\/revisions\/34593"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/media\/34587"}],"wp:attachment":[{"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/media?parent=34583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/categories?post=34583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/tags?post=34583"},{"taxonomy":"experteses","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/en\/wp-json\/wp\/v2\/experteses?post=34583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}