-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathfindings
86 lines (60 loc) · 3.73 KB
/
findings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Grosso do código está em meta-hephaestus
HplDrivers:
Cada um é uma instance configuration. Apenas descrevem as features selecionadas e chamam buildHpl.
Dirige a construção do produto final.
Funciona nesta ordem, para o produto padrão Hephaestus:
LoadAssets -> verifica se os modulos dos assets são compilaveis, validos. Aqui deve ser colocados todas as or features de assets.
LoadBase -> "import HplProducts.Base hiding (main)" ?????
LoadHephaestus -> import HplProducts.Hephaestus ?????
LoadTest -> "import HplProducts.Test hiding (main)" ?????
BuildTest
BuildHephaestus (aqui o bootstrap acontece)
HplProducts:
Pasta de output dos produtos gerados ao rodar buildHpl.
Deve possuir os arquivos:
Base.hs
Test.hs
Hephaestus.hs
HplAssets:
Artefatos da Hephaestus-PL.
IO.hs ->
MetaData.hs -> Um feature model em fonte haskell. (Low Level API)
MetaDataTypes.hs -> Tipos de dados genéricos (o que mais?) (Low Level API)
MetaProgramming.hs -> Operações de manipulação de programas haskell (Low Level API)
Types.hs ->
Compilação:
cd src/meta-hephaestus
make <nome-da-configuração>.drive # compila HplDrivers/<nome-da-configuração>.hs e o executa.
A execução de um driver sempre gera um HplProducts/Test.hs
Para gerar um módulo com outro nome, temos que adicionar no CK (src/meta-hephaestus/HplAssets/Hephaestus/MetaData.hs) a transformação BindProductName "NomePretendido"
Para compilar o módulo Hephaestus gerado:
ghc --make HplProducts/Test -main-is HplProducts.Test -i../feature-modeling/src:../core/src:../configuration-knowledge/src:../funsat-0.6.2/src -XMultiParamTypeClasses -XDeriveDataTypeable
Ao executar o programa, ele não imprime nada, mas espera que seja digitado o path para um arquivo .properties com os paths para os artefatos utilizados pelo Hephaestus para construir um produto (CK, FM, IM e algumas outras coisas específicas da aplicação, como RequirementsModel e UseCaseModel).
Bootstrapping:
Não consegui fazer o Bootstrapping. O produto "Hephaestus" (HplProducts/Hephaestus.hs) é necessário para o próprio processo de geração (incluso pelo HplAssets/Hephaestus/IO.hs, que declara a função "buildHpl"). Se remover o arquivo, não consigo mais gerá-lo, pois sua geração depende dele mesmo.
Em particular, depende dos construtores:
- SPLModel
- InstanceModel
- HephaestusTransformation
Aplicação da abordagem reativa para evolução do Hephaestus-PL
Tasks made by the Domain Engineer/Asset Domain expert:
Implement asset type structures.
Implement asset transformations.
Implement asset parser.
Implement asset output format.
Verify if the introduction of the new asset needs to update the Hephaestus-Pl kernel API.
In HplAssets:
Create a directory with the name DTMC;
Create a file with data types declaration/definitions called Types.hs (HplAssets/DTMC/Types.hs)
Create a file with the transformations called DTMC.hs (HplAssets/DTMC.hs)
Modify the file HplAssets/Hephaestus/MetaData.hs to incorporate the information of the new product (this change the CK of Hephaestus-PL)
In SPL terms, we have to change the Hephaestus-PL:
FM, Feature Model (file with a main that calls the buildHpl)
IM, Instance Model ????
PLA, product line assets ???
CK, configuration knowledge (file MetaData.hs)
Now the dirty part:
Modify the HplDrivers to cope with a new product.
Change LoadAssets to test and validade if the new product assets are well-formed or well-typed.
Create a new .hs file to construct the product (call buildHpl), which seems to be the FM.
In HplProducts put the Base.hs, Hephaestus.hs on a separated file for building the final product.