SlideShare a Scribd company logo
On Programming Variability with Large
Language Model-based Assistant
Mathieu Acher, José A. Galindo, Jean-Marc Jézéquel
https://inria.hal.science/hal-04153310/
https://github.com/acherm/progvary-withgpt/
1
2
3
Generative programming [Czarnecki2000], Model-driven engineering:
automatically generate variants from a specification written in one or more textual or
graphical domain-specific languages
Accidental and
essential complexity
Variability further
increases this
software complexity:
multiple features, code
variations, and an
exponential number of
possible variants 4
LLM
Hypothesis: Large language models (LLMs) act as a new variability compiler capable
of transforming a high-level specification (“prompt”) into variable code, features,
generators, configurable systems, etc. written in a given technological space.
Motto:
“features as
prompts”
5
https://github.com/acherm/progvary-withgpt/blob/main/conditioncompilation-helloworld/Chat
GPT-Rust_Configurable_Feature_Program.md
6
https://github.com/acherm/progvary-withgpt/blob/main/conditioncom
pilation-helloworld/ChatGPT-Java_program_with_Jinja.md 7
https://github.com/acherm/
progvary-withgpt/blob/main/
conditioncompilation-hellow
orld/ChatGPT-Java_progra
m_with_Jinja.md 8
https://github.com/acherm/progvary-withgpt/blob/main/featuret
oggle-helloworld/ChatGPT-Unleash_JS_Feature_Toggles.md
9
“would it be possible to adapt the
program as a Web application... and
provide a server-side that returns the
output while the client side prints it”
https://github.com/acherm/progvary-withgpt/blob/main/featuret
oggle-helloworld/ChatGPT-Unleash_JS_Feature_Toggles.md
10
Here is a TikZ code:
tikzset{%
something/.pic={
tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}}
useasboundingbox (-1,-1) (1,2);
fill [BlueGrey900] (0,-2)
.. controls ++(180:3) and ++(0:5/4) .. (-2,0)
arc (270:90:1/5)
.. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5);
foreach i in {-1,1}
scoped[shift={(1/2*i,9/4)}, rotate=45*i]{
clip [overlay] (0, 5/9) ellipse [radius=8/9];
clip [overlay] (0,-5/9) ellipse [radius=8/9];
fill [BlueGrey900] ellipse [radius=1];
clip [overlay] (0, 7/9) ellipse [radius=10/11];
clip [overlay] (0,-7/9) ellipse [radius=10/11];
fill [Purple100] ellipse [radius=1];
};
fill [BlueGrey900] ellipse [x radius=3/4, y radius=2];
fill [BlueGrey100] ellipse [x radius=1/3, y radius=1];
fill [BlueGrey900]
(0,15/8) ellipse [x radius=1, y radius=5/6]
(0, 8/6) ellipse [x radius=1/2, y radius=1/2]
{[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]}
{[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]};
fill [BlueGrey500]
(-1/9,11/8) ellipse [x radius=1/5, y radius=1/5]
11
Here is a TikZ code:
tikzset{%
cat/.pic={
tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}}
useasboundingbox (-1,-1) (1,2);
fill [BlueGrey900] (0,-2)
.. controls ++(180:3) and ++(0:5/4) .. (-2,0)
arc (270:90:1/5)
.. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5);
foreach i in {-1,1}
scoped[shift={(1/2*i,9/4)}, rotate=45*i]{
clip [overlay] (0, 5/9) ellipse [radius=8/9];
clip [overlay] (0,-5/9) ellipse [radius=8/9];
fill [BlueGrey900] ellipse [radius=1];
clip [overlay] (0, 7/9) ellipse [radius=10/11];
clip [overlay] (0,-7/9) ellipse [radius=10/11];
fill [Purple100] ellipse [radius=1];
};
fill [BlueGrey900] ellipse [x radius=3/4, y radius=2];
fill [BlueGrey100] ellipse [x radius=1/3, y radius=1];
fill [BlueGrey900]
(0,15/8) ellipse [x radius=1, y radius=5/6]
(0, 8/6) ellipse [x radius=1/2, y radius=1/2]
{[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]}
{[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]};
fill [BlueGrey500]
(-1/9,11/8) ellipse [x radius=1/5, y radius=1/5]
( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5];
fill [Purple100]
(0,12/8) ellipse [x radius=1/10, y radius=1/5]
(0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10];
foreach i in {-1,1}
scoped[shift={(1/2*i,2)}, rotate=35*i]{
clip [overlay] (0, 1/7) ellipse [radius=2/7];
clip [overlay] (0,-1/7) ellipse [radius=2/7];
fill [Yellow50] ellipse [radius=1];
};
scoped{
clip (-1,-2) rectangle ++(2,1);
fill [BlueGrey900] (0,-2) ellipse [radius=1/2];
fill [Grey100]
(-1/2,-2) ellipse [x radius=1/3, y radius=1/4]
( 1/2,-2) ellipse [x radius=1/3, y radius=1/4];
};
foreach i in {-1,1}
foreach j in {-1,0,1}
fill [Grey100, shift={(0,11/8)}, xscale=i, rotate=j*15,
12
Here is a TikZ code:
tikzset{%
cat/.pic={
tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}}
useasboundingbox (-1,-1) (1,2);
fill [BlueGrey900] (0,-2)
.. controls ++(180:3) and ++(0:5/4) .. (-2,0)
arc (270:90:1/5)
.. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5);
foreach i in {-1,1}
scoped[shift={(1/2*i,9/4)}, rotate=45*i]{
clip [overlay] (0, 5/9) ellipse [radius=8/9];
clip [overlay] (0,-5/9) ellipse [radius=8/9];
fill [BlueGrey900] ellipse [radius=1];
clip [overlay] (0, 7/9) ellipse [radius=10/11];
clip [overlay] (0,-7/9) ellipse [radius=10/11];
fill [Purple100] ellipse [radius=1];
};
fill [BlueGrey900] ellipse [x radius=3/4, y radius=2];
fill [BlueGrey100] ellipse [x radius=1/3, y radius=1];
fill [BlueGrey900]
(0,15/8) ellipse [x radius=1, y radius=5/6]
(0, 8/6) ellipse [x radius=1/2, y radius=1/2]
{[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]}
{[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]};
fill [BlueGrey500]
(-1/9,11/8) ellipse [x radius=1/5, y radius=1/5]
( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5];
fill [Purple100]
(0,12/8) ellipse [x radius=1/10, y radius=1/5]
(0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10];
foreach i in {-1,1}
scoped[shift={(1/2*i,2)}, rotate=35*i]{
clip [overlay] (0, 1/7) ellipse [radius=2/7];
clip [overlay] (0,-1/7) ellipse [radius=2/7];
fill [Yellow50] ellipse [radius=1];
I’d like to change the color of the cat’s tail
13
Here is a TikZ code:
tikzset{%
cat/.pic={
tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}}
useasboundingbox (-1,-1) (1,2);
fill [BlueGrey900] (0,-2)
.. controls ++(180:3) and ++(0:5/4) .. (-2,0)
arc (270:90:1/5)
.. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5);
foreach i in {-1,1}
scoped[shift={(1/2*i,9/4)}, rotate=45*i]{
clip [overlay] (0, 5/9) ellipse [radius=8/9];
clip [overlay] (0,-5/9) ellipse [radius=8/9];
fill [BlueGrey900] ellipse [radius=1];
clip [overlay] (0, 7/9) ellipse [radius=10/11];
clip [overlay] (0,-7/9) ellipse [radius=10/11];
fill [Purple100] ellipse [radius=1];
};
fill [BlueGrey900] ellipse [x radius=3/4, y radius=2];
fill [BlueGrey100] ellipse [x radius=1/3, y radius=1];
fill [BlueGrey900]
(0,15/8) ellipse [x radius=1, y radius=5/6]
(0, 8/6) ellipse [x radius=1/2, y radius=1/2]
{[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]}
{[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]};
fill [BlueGrey500]
(-1/9,11/8) ellipse [x radius=1/5, y radius=1/5]
( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5];
fill [Purple100]
(0,12/8) ellipse [x radius=1/10, y radius=1/5]
(0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10];
foreach i in {-1,1}
scoped[shift={(1/2*i,2)}, rotate=35*i]{
clip [overlay] (0, 1/7) ellipse [radius=2/7];
clip [overlay] (0,-1/7) ellipse [radius=2/7];
fill [Yellow50] ellipse [radius=1];
I’d like to change the color of the cat’s tail
added by
ChatGPT!
14
https://github.com/acherm/progvary-withgpt/blob/main/varyTikZ/ChatGPT-Change_eye_color.md
15
https://github.com/acherm/progvary-withgpt/blob/main/varyTikZ/ChatGPT-Change_eye_color.md
16
Replication
17
Here is a TikZ code:
tikzset{%
cat/.pic={
tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}}
useasboundingbox (-1,-1) (1,2);
fill [BlueGrey900] (0,-2)
.. controls ++(180:3) and ++(0:5/4) .. (-2,0)
arc (270:90:1/5)
.. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5);
foreach i in {-1,1}
scoped[shift={(1/2*i,9/4)}, rotate=45*i]{
clip [overlay] (0, 5/9) ellipse [radius=8/9];
clip [overlay] (0,-5/9) ellipse [radius=8/9];
fill [BlueGrey900] ellipse [radius=1];
clip [overlay] (0, 7/9) ellipse [radius=10/11];
clip [overlay] (0,-7/9) ellipse [radius=10/11];
fill [Purple100] ellipse [radius=1];
};
fill [BlueGrey900] ellipse [x radius=3/4, y radius=2];
fill [BlueGrey100] ellipse [x radius=1/3, y radius=1];
fill [BlueGrey900]
(0,15/8) ellipse [x radius=1, y radius=5/6]
(0, 8/6) ellipse [x radius=1/2, y radius=1/2]
{[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]}
{[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]};
fill [BlueGrey500]
(-1/9,11/8) ellipse [x radius=1/5, y radius=1/5]
( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5];
fill [Purple100]
(0,12/8) ellipse [x radius=1/10, y radius=1/5]
(0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10];
foreach i in {-1,1}
scoped[shift={(1/2*i,2)}, rotate=35*i]{
clip [overlay] (0, 1/7) ellipse [radius=2/7];
clip [overlay] (0,-1/7) ellipse [radius=2/7];
fill [Yellow50] ellipse [radius=1];
};
scoped{
clip (-1,-2) rectangle ++(2,1);
fill [BlueGrey900] (0,-2) ellipse [radius=1/2];
fill [Grey100]
(-1/2,-2) ellipse [x radius=1/3, y radius=1/4]
( 1/2,-2) ellipse [x radius=1/3, y radius=1/4];
};
foreach i in {-1,1}
foreach j in {-1,0,1}
fill [Grey100, shift={(0,11/8)}, xscale=i, rotate=j*15,
shift=(0:1/2)]
ellipse [x radius=1/3, y radius=1/64];
},
I’d like to change the color of the cat’s tail
Wait wait… Feature location:
Despite a positive experience
here with the cat TikZ,
replications over different TikZ
code representing squid,
chimpanzee, or dogs show that
LLMs are in fact inaccurate.
LLMs can be lucky to guess
which portion of code is
associated to a feature, but
clearly not 100% of the time.
It is problematic since then the
mapping between features and
code element should then be
revised, after manual
investigation.
18
Threats to validity
LLM = ChatGPT4 mainly (also Claude from Anthropic AI and ChatGPT3.5)
Prompts
No control over hyperparameters (eg temperature)
Very few repetitions
Programming variability involves many tasks
19
Potential
LLMs can assist developers in implementing variability in different programming
languages (C, Rust, Java, TikZ, etc.) and mechanisms (conditional compilation, feature
toggles, command-line parameters, template, etc.). With "features as prompts", there is
hope to raise the level of abstraction, increase automation, and bring more flexibility
when synthesizing and exploring software variants.
20
Limitations
LLMs are by construction stochastic, non-determinist and highly sensitive to prompt
variations – and so are corresponding implementations of features and variability.
https://github.com/acherm/progvary-wit
hgpt/blob/main/varyfloatinC/ChatGPT-V
ariable_Type_Alternatives.md
LLM
21
Discussions
(limitations & potential)
LLMs are by construction stochastic, non-determinist and highly sensitive to prompt
variations – and so are corresponding implementations of features and variability.
In particular, LLMs can produce different programs out of the same exact prompt.
Unfortunately, some of these programs can be incomplete or simply wrong, introducing
serious variability errors.
Potential: LLMs act as assistant that recommend some possible implementations of
variability. It is the role of programmers to review the recommendation and either
selects another recommendation or manually implement variability.
LLM
22
Future work
LLMs are by construction stochastic, non-determinist and highly sensitive to prompt
variations – and so are corresponding implementations of features and variability.
#1 A variability benchmark for LLM-based assistant (for assessing accuracy and
robustness)
Challenge: In our case, we target comprehensive programming scenarios that (1)
require combining different pieces of code and (2) call to combine different languages
and technologies for realizing variability. Not easy to automate the “goodness”
assessment of some solutions
LLM
23
Future work
LLMs are by construction stochastic, non-determinist and highly sensitive to prompt
variations – and so are corresponding implementations of features and variability.
#2 Improving the robustness of LLMs
Challenge: how to properly formulate instructions/prompts for programming variability…
informality of NLP can backfire. Dedicated “variability language” for LLM? Specialization
of LLMs for variability tasks?
LLM
24
#1 A variability benchmark for LLM-based assistant
(for assessing accuracy and robustness)
#2 Improving the robustness of LLMs
https://inria.hal.science/hal-04153310/
https://github.com/acherm/progvary-withgpt/
25
Backup slides
26
Remainder of the talk
How LLMs can be concretely and originally used for programming
software variability
Variability implementations of a classical Hello world
Variability for reproducibility and floating-points
Transforming an unfamiliar code with an end-user, Web-based
customization tool
Discussions (potential and limitations)
27
https://github.com/acherm/progvary-withgpt/blob/main/varyfloatinC/ChatGPT-C_Variations_with_%23ifdef.md
https://github.com/acherm/progvary-withgpt/blob/main/varyfloatinC/approx.c
28
https://github.com/acherm/progvary-withgpt/blob/main/varyfloatinC/ChatGPT-C_Variations_with_%23ifdef.md
https://github.com/acherm/progvary-withgpt/blob/main/varyfloatinC/approx_eval.py
29
retrieve the result of S. Boldo et al.
30
31
32

More Related Content

More from University of Rennes, INSA Rennes, Inria/IRISA, CNRS (20)

PDF
Deep Software Variability and Frictionless Reproducibility
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
24 Reasons Why Variability Models Are Not Yet Universal (24RWVMANYU)
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Tackling Deep Software Variability Together
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
On anti-cheating in chess, science, reproducibility, and variability
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Feature Subset Selection for Learning Huge Configuration Spaces: The case of ...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Machine Learning and Deep Software Variability
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Mastering Software Variability for Innovation and Science
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Transfer Learning Across Variants and Versions: The Case of Linux Kernel Size
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Reproducible Science and Deep Software Variability
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Software Variability and Artificial Intelligence
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Teaching Software Product Lines: A Snapshot of Current Practices and Challenges
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Exploiting the Enumeration of All Feature Model Configurations: A New Perspec...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Assessing Product Line Derivation Operators Applied to Java Source Code: An E...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Synthesis of Attributed Feature Models From Product Descriptions
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
From Basic Variability Models to OpenCompare.org
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Pandoc: a universal document converter
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
Metamorphic Domain-Specific Languages
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
3D Printing, Customization, and Product Lines
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PDF
WebFML: Synthesizing Feature Models Everywhere (@ SPLC 2014)
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PPTX
A survey on teaching of software product lines
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Deep Software Variability and Frictionless Reproducibility
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
24 Reasons Why Variability Models Are Not Yet Universal (24RWVMANYU)
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Tackling Deep Software Variability Together
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
On anti-cheating in chess, science, reproducibility, and variability
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Feature Subset Selection for Learning Huge Configuration Spaces: The case of ...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Machine Learning and Deep Software Variability
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Mastering Software Variability for Innovation and Science
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Transfer Learning Across Variants and Versions: The Case of Linux Kernel Size
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Reproducible Science and Deep Software Variability
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Software Variability and Artificial Intelligence
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Teaching Software Product Lines: A Snapshot of Current Practices and Challenges
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Exploiting the Enumeration of All Feature Model Configurations: A New Perspec...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Assessing Product Line Derivation Operators Applied to Java Source Code: An E...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Synthesis of Attributed Feature Models From Product Descriptions
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
From Basic Variability Models to OpenCompare.org
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Pandoc: a universal document converter
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
Metamorphic Domain-Specific Languages
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
3D Printing, Customization, and Product Lines
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
WebFML: Synthesizing Feature Models Everywhere (@ SPLC 2014)
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
A survey on teaching of software product lines
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 

Recently uploaded (20)

PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
Best Web development company in india 2025
Greenusys
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PDF
ERP Consulting Services and Solutions by Contetra Pvt Ltd
jayjani123
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PPTX
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
PDF
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
PPTX
BB FlashBack Pro 5.61.0.4843 With Crack Free Download
cracked shares
 
PDF
Simplify React app login with asgardeo-sdk
vaibhav289687
 
PDF
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
PDF
Is Framer the Future of AI Powered No-Code Development?
Isla Pandora
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PPTX
prodad heroglyph crack 2.0.214.2 Full Free Download
cracked shares
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PPTX
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
PDF
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
PPTX
Get Started with Maestro: Agent, Robot, and Human in Action – Session 5 of 5
klpathrudu
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Best Web development company in india 2025
Greenusys
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
ERP Consulting Services and Solutions by Contetra Pvt Ltd
jayjani123
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
BB FlashBack Pro 5.61.0.4843 With Crack Free Download
cracked shares
 
Simplify React app login with asgardeo-sdk
vaibhav289687
 
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
Is Framer the Future of AI Powered No-Code Development?
Isla Pandora
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
prodad heroglyph crack 2.0.214.2 Full Free Download
cracked shares
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
Get Started with Maestro: Agent, Robot, and Human in Action – Session 5 of 5
klpathrudu
 
Ad

On Programming Variability with Large Language Model-based Assistant

  • 1. On Programming Variability with Large Language Model-based Assistant Mathieu Acher, José A. Galindo, Jean-Marc Jézéquel https://inria.hal.science/hal-04153310/ https://github.com/acherm/progvary-withgpt/ 1
  • 2. 2
  • 3. 3
  • 4. Generative programming [Czarnecki2000], Model-driven engineering: automatically generate variants from a specification written in one or more textual or graphical domain-specific languages Accidental and essential complexity Variability further increases this software complexity: multiple features, code variations, and an exponential number of possible variants 4
  • 5. LLM Hypothesis: Large language models (LLMs) act as a new variability compiler capable of transforming a high-level specification (“prompt”) into variable code, features, generators, configurable systems, etc. written in a given technological space. Motto: “features as prompts” 5
  • 10. “would it be possible to adapt the program as a Web application... and provide a server-side that returns the output while the client side prints it” https://github.com/acherm/progvary-withgpt/blob/main/featuret oggle-helloworld/ChatGPT-Unleash_JS_Feature_Toggles.md 10
  • 11. Here is a TikZ code: tikzset{% something/.pic={ tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}} useasboundingbox (-1,-1) (1,2); fill [BlueGrey900] (0,-2) .. controls ++(180:3) and ++(0:5/4) .. (-2,0) arc (270:90:1/5) .. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5); foreach i in {-1,1} scoped[shift={(1/2*i,9/4)}, rotate=45*i]{ clip [overlay] (0, 5/9) ellipse [radius=8/9]; clip [overlay] (0,-5/9) ellipse [radius=8/9]; fill [BlueGrey900] ellipse [radius=1]; clip [overlay] (0, 7/9) ellipse [radius=10/11]; clip [overlay] (0,-7/9) ellipse [radius=10/11]; fill [Purple100] ellipse [radius=1]; }; fill [BlueGrey900] ellipse [x radius=3/4, y radius=2]; fill [BlueGrey100] ellipse [x radius=1/3, y radius=1]; fill [BlueGrey900] (0,15/8) ellipse [x radius=1, y radius=5/6] (0, 8/6) ellipse [x radius=1/2, y radius=1/2] {[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]} {[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]}; fill [BlueGrey500] (-1/9,11/8) ellipse [x radius=1/5, y radius=1/5] 11
  • 12. Here is a TikZ code: tikzset{% cat/.pic={ tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}} useasboundingbox (-1,-1) (1,2); fill [BlueGrey900] (0,-2) .. controls ++(180:3) and ++(0:5/4) .. (-2,0) arc (270:90:1/5) .. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5); foreach i in {-1,1} scoped[shift={(1/2*i,9/4)}, rotate=45*i]{ clip [overlay] (0, 5/9) ellipse [radius=8/9]; clip [overlay] (0,-5/9) ellipse [radius=8/9]; fill [BlueGrey900] ellipse [radius=1]; clip [overlay] (0, 7/9) ellipse [radius=10/11]; clip [overlay] (0,-7/9) ellipse [radius=10/11]; fill [Purple100] ellipse [radius=1]; }; fill [BlueGrey900] ellipse [x radius=3/4, y radius=2]; fill [BlueGrey100] ellipse [x radius=1/3, y radius=1]; fill [BlueGrey900] (0,15/8) ellipse [x radius=1, y radius=5/6] (0, 8/6) ellipse [x radius=1/2, y radius=1/2] {[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]} {[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]}; fill [BlueGrey500] (-1/9,11/8) ellipse [x radius=1/5, y radius=1/5] ( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5]; fill [Purple100] (0,12/8) ellipse [x radius=1/10, y radius=1/5] (0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10]; foreach i in {-1,1} scoped[shift={(1/2*i,2)}, rotate=35*i]{ clip [overlay] (0, 1/7) ellipse [radius=2/7]; clip [overlay] (0,-1/7) ellipse [radius=2/7]; fill [Yellow50] ellipse [radius=1]; }; scoped{ clip (-1,-2) rectangle ++(2,1); fill [BlueGrey900] (0,-2) ellipse [radius=1/2]; fill [Grey100] (-1/2,-2) ellipse [x radius=1/3, y radius=1/4] ( 1/2,-2) ellipse [x radius=1/3, y radius=1/4]; }; foreach i in {-1,1} foreach j in {-1,0,1} fill [Grey100, shift={(0,11/8)}, xscale=i, rotate=j*15, 12
  • 13. Here is a TikZ code: tikzset{% cat/.pic={ tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}} useasboundingbox (-1,-1) (1,2); fill [BlueGrey900] (0,-2) .. controls ++(180:3) and ++(0:5/4) .. (-2,0) arc (270:90:1/5) .. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5); foreach i in {-1,1} scoped[shift={(1/2*i,9/4)}, rotate=45*i]{ clip [overlay] (0, 5/9) ellipse [radius=8/9]; clip [overlay] (0,-5/9) ellipse [radius=8/9]; fill [BlueGrey900] ellipse [radius=1]; clip [overlay] (0, 7/9) ellipse [radius=10/11]; clip [overlay] (0,-7/9) ellipse [radius=10/11]; fill [Purple100] ellipse [radius=1]; }; fill [BlueGrey900] ellipse [x radius=3/4, y radius=2]; fill [BlueGrey100] ellipse [x radius=1/3, y radius=1]; fill [BlueGrey900] (0,15/8) ellipse [x radius=1, y radius=5/6] (0, 8/6) ellipse [x radius=1/2, y radius=1/2] {[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]} {[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]}; fill [BlueGrey500] (-1/9,11/8) ellipse [x radius=1/5, y radius=1/5] ( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5]; fill [Purple100] (0,12/8) ellipse [x radius=1/10, y radius=1/5] (0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10]; foreach i in {-1,1} scoped[shift={(1/2*i,2)}, rotate=35*i]{ clip [overlay] (0, 1/7) ellipse [radius=2/7]; clip [overlay] (0,-1/7) ellipse [radius=2/7]; fill [Yellow50] ellipse [radius=1]; I’d like to change the color of the cat’s tail 13
  • 14. Here is a TikZ code: tikzset{% cat/.pic={ tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}} useasboundingbox (-1,-1) (1,2); fill [BlueGrey900] (0,-2) .. controls ++(180:3) and ++(0:5/4) .. (-2,0) arc (270:90:1/5) .. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5); foreach i in {-1,1} scoped[shift={(1/2*i,9/4)}, rotate=45*i]{ clip [overlay] (0, 5/9) ellipse [radius=8/9]; clip [overlay] (0,-5/9) ellipse [radius=8/9]; fill [BlueGrey900] ellipse [radius=1]; clip [overlay] (0, 7/9) ellipse [radius=10/11]; clip [overlay] (0,-7/9) ellipse [radius=10/11]; fill [Purple100] ellipse [radius=1]; }; fill [BlueGrey900] ellipse [x radius=3/4, y radius=2]; fill [BlueGrey100] ellipse [x radius=1/3, y radius=1]; fill [BlueGrey900] (0,15/8) ellipse [x radius=1, y radius=5/6] (0, 8/6) ellipse [x radius=1/2, y radius=1/2] {[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]} {[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]}; fill [BlueGrey500] (-1/9,11/8) ellipse [x radius=1/5, y radius=1/5] ( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5]; fill [Purple100] (0,12/8) ellipse [x radius=1/10, y radius=1/5] (0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10]; foreach i in {-1,1} scoped[shift={(1/2*i,2)}, rotate=35*i]{ clip [overlay] (0, 1/7) ellipse [radius=2/7]; clip [overlay] (0,-1/7) ellipse [radius=2/7]; fill [Yellow50] ellipse [radius=1]; I’d like to change the color of the cat’s tail added by ChatGPT! 14
  • 18. Here is a TikZ code: tikzset{% cat/.pic={ tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}} useasboundingbox (-1,-1) (1,2); fill [BlueGrey900] (0,-2) .. controls ++(180:3) and ++(0:5/4) .. (-2,0) arc (270:90:1/5) .. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5); foreach i in {-1,1} scoped[shift={(1/2*i,9/4)}, rotate=45*i]{ clip [overlay] (0, 5/9) ellipse [radius=8/9]; clip [overlay] (0,-5/9) ellipse [radius=8/9]; fill [BlueGrey900] ellipse [radius=1]; clip [overlay] (0, 7/9) ellipse [radius=10/11]; clip [overlay] (0,-7/9) ellipse [radius=10/11]; fill [Purple100] ellipse [radius=1]; }; fill [BlueGrey900] ellipse [x radius=3/4, y radius=2]; fill [BlueGrey100] ellipse [x radius=1/3, y radius=1]; fill [BlueGrey900] (0,15/8) ellipse [x radius=1, y radius=5/6] (0, 8/6) ellipse [x radius=1/2, y radius=1/2] {[shift={(-1/2,-2)}, rotate= 10] ellipse [x radius=1/3, y radius=5/4]} {[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]}; fill [BlueGrey500] (-1/9,11/8) ellipse [x radius=1/5, y radius=1/5] ( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5]; fill [Purple100] (0,12/8) ellipse [x radius=1/10, y radius=1/5] (0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10]; foreach i in {-1,1} scoped[shift={(1/2*i,2)}, rotate=35*i]{ clip [overlay] (0, 1/7) ellipse [radius=2/7]; clip [overlay] (0,-1/7) ellipse [radius=2/7]; fill [Yellow50] ellipse [radius=1]; }; scoped{ clip (-1,-2) rectangle ++(2,1); fill [BlueGrey900] (0,-2) ellipse [radius=1/2]; fill [Grey100] (-1/2,-2) ellipse [x radius=1/3, y radius=1/4] ( 1/2,-2) ellipse [x radius=1/3, y radius=1/4]; }; foreach i in {-1,1} foreach j in {-1,0,1} fill [Grey100, shift={(0,11/8)}, xscale=i, rotate=j*15, shift=(0:1/2)] ellipse [x radius=1/3, y radius=1/64]; }, I’d like to change the color of the cat’s tail Wait wait… Feature location: Despite a positive experience here with the cat TikZ, replications over different TikZ code representing squid, chimpanzee, or dogs show that LLMs are in fact inaccurate. LLMs can be lucky to guess which portion of code is associated to a feature, but clearly not 100% of the time. It is problematic since then the mapping between features and code element should then be revised, after manual investigation. 18
  • 19. Threats to validity LLM = ChatGPT4 mainly (also Claude from Anthropic AI and ChatGPT3.5) Prompts No control over hyperparameters (eg temperature) Very few repetitions Programming variability involves many tasks 19
  • 20. Potential LLMs can assist developers in implementing variability in different programming languages (C, Rust, Java, TikZ, etc.) and mechanisms (conditional compilation, feature toggles, command-line parameters, template, etc.). With "features as prompts", there is hope to raise the level of abstraction, increase automation, and bring more flexibility when synthesizing and exploring software variants. 20
  • 21. Limitations LLMs are by construction stochastic, non-determinist and highly sensitive to prompt variations – and so are corresponding implementations of features and variability. https://github.com/acherm/progvary-wit hgpt/blob/main/varyfloatinC/ChatGPT-V ariable_Type_Alternatives.md LLM 21
  • 22. Discussions (limitations & potential) LLMs are by construction stochastic, non-determinist and highly sensitive to prompt variations – and so are corresponding implementations of features and variability. In particular, LLMs can produce different programs out of the same exact prompt. Unfortunately, some of these programs can be incomplete or simply wrong, introducing serious variability errors. Potential: LLMs act as assistant that recommend some possible implementations of variability. It is the role of programmers to review the recommendation and either selects another recommendation or manually implement variability. LLM 22
  • 23. Future work LLMs are by construction stochastic, non-determinist and highly sensitive to prompt variations – and so are corresponding implementations of features and variability. #1 A variability benchmark for LLM-based assistant (for assessing accuracy and robustness) Challenge: In our case, we target comprehensive programming scenarios that (1) require combining different pieces of code and (2) call to combine different languages and technologies for realizing variability. Not easy to automate the “goodness” assessment of some solutions LLM 23
  • 24. Future work LLMs are by construction stochastic, non-determinist and highly sensitive to prompt variations – and so are corresponding implementations of features and variability. #2 Improving the robustness of LLMs Challenge: how to properly formulate instructions/prompts for programming variability… informality of NLP can backfire. Dedicated “variability language” for LLM? Specialization of LLMs for variability tasks? LLM 24
  • 25. #1 A variability benchmark for LLM-based assistant (for assessing accuracy and robustness) #2 Improving the robustness of LLMs https://inria.hal.science/hal-04153310/ https://github.com/acherm/progvary-withgpt/ 25
  • 27. Remainder of the talk How LLMs can be concretely and originally used for programming software variability Variability implementations of a classical Hello world Variability for reproducibility and floating-points Transforming an unfamiliar code with an end-user, Web-based customization tool Discussions (potential and limitations) 27
  • 30. retrieve the result of S. Boldo et al. 30
  • 31. 31
  • 32. 32