Upload
yuriy-tymchuk
View
65
Download
2
Embed Size (px)
DESCRIPTION
A master's defense slides for a FAST meta-modeling project. (Ukrainian)
Citation preview
РОЗШИРЕННЯ ФУНКЦІОНАЛЬНОСТІ МОДЕЛІ FAMIX ДЛЯ ПОБУДОВИ АБСТРАКТНИХ ДЕРЕВ КОДУ JAVA– ТА SMALLTALK–ПРОГРАМ
Юрій Тимчук
ПРО ЩО РОБОТА?
СТАТИЧНИЙ АНАЛІЗПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
НАВІЩО АНАЛІЗУВАТИ?
АНАЛІЗ П/З
Розробка
Оцінка
ОЦІНКА КОДУ
АЛЬТЕРНАТИВНЕ ПРЕДСТАВЛЕННЯ
Складністьсистеми
Картарозподілу
Інше…
MOOSE
FAMIX
М М М
Пакет
Клас Клас
? ??
FAMIX AST
ПОТРЕБА У ПРОЕКТІ FAST
• Обчислення метрик
• Перевірка правил
• Виявлення дуплікації
• Візуалізація (альтернативне відображення)
• Перетворення між мовами
• І більше…
ЗАГАЛЬНА МОДЕЛЬ FAST
FASTBehaviouralEntity
0..*statements
0..1parentStatementBlock
FASTStatement
FASTNamedEntity
name : String0..*
parameters
0..*localVariables
FAMIXBehaviouralEntity0..1fastNamedBehaviouralEntity
0..1
famixBehaviouralEntity
FAMIXNamedEntity0..*fastNamedEntities
0..1famixNamedEntity
FASTNamedBehaviouralEntity
name : String
FASTExpression
0..1parentBehaviouralEntity
0..1parentExpression**
0..1parentStatement**
FASTStatementBlock
0..1parentBehaviouralEntity
0..1statementBlock
FASTVariableExpression
0..1parentVariableExpression
0..1variable
FASTLiteral
signature : string
FAST ДЛЯ SMALLTALK
FASTBehaviouralEntity
0..*statements
0..1parentStatementBlock
FASTVariableExpression FASTLiteral
signature : String
FASTMessageSend
kindselector
isUnary()isBinary()isKey()cascaded()receiver()
FASTStatement
0..1parentExpression
0..*arguments
FASTAssignmentExpression
0..1parentAssignmentExpression
0..1variable
FASTExpression
0..1parentStatement 0..1
expression
FASTArrayExpression FASTCascade
0..1parentCascade
0..*messages
0..1
parentExpression
0..1
concreteReceiver
0..1parentExpression
0..1block
FASTSmalltalkReturnStatement
FASTSmalltalkExpressionStatement
0..1parentStatement 0..1
expression
0..1parentExpression
0..1
expression
FASTNamedEntity
name : String0..*
parameters
0..*localVariables
0..1parentVariableExpression
0..1variable
FASTBlockDefinition
FAMIXBehaviouralEntity
0..1fastNamedBehaviouralEntity
0..1famixBehaviouralEntity
FAMIXNamedEntity
0..*fastNamedEntities
0..1famixNamedEntity
FASTNamedBehaviouralEntity
name : String
FASTNumberLiteral
value : Number
FASTCharacterLiteral
value : Object
FASTStringLiteral
value : String
FASTSymbolLiteral
value : Object
FASTArrayLiteral FASTByteArrayLiteral
0..*contents
0..*contents
FASTBlockExpression
0..1parentExpression
0..*contents
FASTBooleanLiteral
value : Boolean
FASTUndefinedLiteral
0..1parentExpression
0..1receiver
0..1parentBehaviouralEntity
FAMIXInvocation
0..1messageSend
0..1invocation
FASTStatementBlock
0..1parentBehaviouralEntity
0..1statementBlock
FAST ДЛЯ JAVA
FASTBehaviouralEntity
0..*
statements
0..1
parentStatementBlock
FASTStatement
FASTNamedEntity
name : String0..*parameters
0..*localVariables
FAMIXBehaviouralEntity
0..1fastNamedBehaviouralEntity
0..1famixBehaviouralEntity
FAMIXNamedEntity
0..*fastNamedEntities
0..1famixNamedEntity
FASTNamedBehaviouralEntity
name : String
FASTExpression
0..1parentBehaviouralEntity StatementBlock
0..1parentBehaviouralEntity
0..1
statementBlock
FASTVariableExpression0..1parentVariableExpression
0..1variable
FASTLiteral
signature : string
FASTJavaExpressionStatement
FASTJavaReturnStatement
0..1parentStatement
0..1expression
0..1parentStatement
0..1expression
FASTWhileStatement
0..1
parentStatement
0..1condition
0..1parentStatement
0..1body
FASTVariableDeclarationStatement
FASTVariableDeclarator0..1
parentStatement
0..*
declarators0..1variable
0..1
initializer
FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
FASTInfixOperation 0..1
parentExpression
0..1leftOperand
0..1parentExpression
0..1rightOperand
РОЗПІЗНАВАННЯ СИМВОЛІВ
#middleOf:and:ba
sum^stst
:=
sum +
a b
/
sum 2
middleOf: a and: b | sum | sum := a + b. ^ sum / 2
РОЗПІЗНАВАННЯ СИМВОЛІВ
b
a
sum
#middleOf:and:ba
sum^stst
:=
sum +
a b
/
sum 2
РЕЗУЛЬТАТ
• Базова модель FAST, концепція створення моделей дерев коду• Повна реалізація FAST для Smalltalk• Часткова реалізація FAST для Java• Завантажувачі моделей для Smalltalk та Java• Алгоритм обч. цикломатичної складності (підтведж. для 2х мов)• Алгоритм розпізнання символів (підтведж. для 2х мов)• Прототипи алгоритмів для генерування коду на базі моделі та візуалізації моделі
• Інтеграція з моделлю FAMIX• Інтеграція з інструментами середовища Moose
ПОДАЛЬША РОБОТА
• Rafael Durelli в RMoD: генерація коду з моделі FAST
• Benjamin Arezki підчас GSoC: повна реалізація FAST для Java
ПОДАЛЬШЕ ВИКОРИСТАННЯ
• Компанія Synectique для вирішення проблем клієнтів
• SCG Bern для своїх дослідження
• Prof. Tewfik Ziadi для візуалізації вихідного коду програм
ДОСТУП ДО ПРОЕКТУ
• MIT License!
• http://www.smalltalkhub.com/#!/~YuriyTymchuk/FAST
• https://github.com/Uko/FAST
• https://ci.inria.fr/moose/job/FAST-On-Moose/