SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
РОЗШИРЕННЯ ФУНКЦІОНАЛЬНОСТІ МОДЕЛІ
FAMIX ДЛЯ ПОБУДОВИ АБСТРАКТНИХ
ДЕРЕВ КОДУ JAVA– ТА SMALLTALK–ПРОГРАМ
Юрій Тимчук
ПРО ЩО РОБОТА?
СТАТИЧНИЙ АНАЛІЗ
ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
НАВІЩО АНАЛІЗУВАТИ?
АНАЛІЗ П/З
Розробка
Оцінка
ОЦІНКА КОДУ
АЛЬТЕРНАТИВНЕ
ПРЕДСТАВЛЕННЯ
Складність
системи
Карта
розподілу
Інше…
MOOSE
FAMIX
М М М
Пакет
Клас Клас
? ??
FAMIX AST
ПОТРЕБА У ПРОЕКТІ FAST
• Обчислення метрик
• Перевірка правил
• Виявлення дуплікації
• Візуалізація (альтернативне відображення)
• Перетворення між мовами
• І більше…
ЗАГАЛЬНА МОДЕЛЬ FAST
FASTBehaviouralEntity
0..*
statements
0..1
parentStatementBlock
FASTStatement
FASTNamedEntity
name : String
0..*
parameters
0..*
localVariables
FAMIXBehaviouralEntity0..1
fastNamedBehaviouralEntity
0..1
famixBehaviouralEntity
FAMIXNamedEntity0..*
fastNamedEntities
0..1
famixNamedEntity
FASTNamedBehaviouralEntity
name : String
FASTExpression
0..1
parentBehaviouralEntity
0..1
parentExpression**
0..1
parentStatement**
FASTStatementBlock
0..1
parentBehaviouralEntity
0..1
statementBlock
FASTVariableExpression
0..1
parentVariableExpression
0..1
variable
FASTLiteral
signature : string
FAST ДЛЯ
SMALLTALKFASTBehaviouralEntity
0..*
statements
0..1
parentStatementBlock
FASTVariableExpression FASTLiteral
signature : String
FASTMessageSend
kind
selector
isUnary()
isBinary()
isKey()
cascaded()
receiver()
FASTStatement
0..1parentExpression
0..*
arguments
FASTAssignmentExpression
0..1parentAssignmentExpression
0..1variable
FASTExpression
0..1
parentStatement 0..1
expression
FASTArrayExpression FASTCascade
0..1parentCascade
0..*
messages
0..1
parentExpression
0..1
concreteReceiver
0..1parentExpression
0..1
block
FASTSmalltalkReturnStatement
FASTSmalltalkExpressionStatement
0..1
parentStatement 0..1
expression
0..1parentExpression
0..1
expression
FASTNamedEntity
name : String
0..*
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..1
receiver
0..1
parentBehaviouralEntity
FAMIXInvocation
0..1messageSend
0..1invocation
FASTStatementBlock
0..1
parentBehaviouralEntity
0..1
statementBlock
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..1
parentBehaviouralEntity
StatementBlock
0..1
parentBehaviouralEntity
0..1
statementBlock
FASTVariableExpression0..1
parentVariableExpression
0..1
variable
FASTLiteral
signature : string
FASTJavaExpressionStatement
FASTJavaReturnStatement
0..1
parentStatement
0..1
expression
0..1
parentStatement
0..1
expression
FASTWhileStatement
0..1
parentStatement
0..1
condition
0..1
parentStatement
0..1
body
FASTVariableDeclarationStatement
FASTVariableDeclarator
0..1
parentStatement
0..*
declarators
0..1
variable
0..1
initializer
FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
FASTInfixOperation 0..1
parentExpression
0..1
leftOperand
0..1
parentExpression
0..1
rightOperand
РОЗПІЗНАВАННЯ СИМВОЛІВ
#middleOf:and:
b
a
sum
^stst
:=
sum +
a b
/
sum 2
middleOf: a and: b
	 | sum |
	 sum := a + b.
	 ^ sum / 2
РОЗПІЗНАВАННЯ СИМВОЛІВ
b
a
sum
#middleOf:and:
b
a
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/

Contenu connexe

Plus de Yuriy Tymchuk

Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo (esug2016)Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo (esug2016)Yuriy Tymchuk
 
Про що не говорять програмісти, про що мовчать науковці (UCU2015)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)Про що не говорять програмісти, про що мовчать науковці (UCU2015)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)Yuriy Tymchuk
 
What if Clippy Would Criticize Your Code? (benevol2015)
What if Clippy Would Criticize Your Code? (benevol2015)What if Clippy Would Criticize Your Code? (benevol2015)
What if Clippy Would Criticize Your Code? (benevol2015)Yuriy Tymchuk
 
Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]
Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]
Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]Yuriy Tymchuk
 
Beyond the Concept of Quality in Pharo (esug2015)
Beyond the Concept of Quality in Pharo (esug2015)Beyond the Concept of Quality in Pharo (esug2015)
Beyond the Concept of Quality in Pharo (esug2015)Yuriy Tymchuk
 
Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)Yuriy Tymchuk
 
ViDI - The Visual Design Inspector (fosdem2015)
ViDI - The Visual Design Inspector (fosdem2015)ViDI - The Visual Design Inspector (fosdem2015)
ViDI - The Visual Design Inspector (fosdem2015)Yuriy Tymchuk
 
Graphics and Visualization (Pharo Days 2015)
Graphics and Visualization (Pharo Days 2015)Graphics and Visualization (Pharo Days 2015)
Graphics and Visualization (Pharo Days 2015)Yuriy Tymchuk
 
Collaboration in Open-Source Projects: Myth or Reality? (msr14)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)Collaboration in Open-Source Projects: Myth or Reality? (msr14)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)Yuriy Tymchuk
 
Signs of Caries at SmalltalkHub (mooseday13/2)
Signs of Caries at SmalltalkHub (mooseday13/2)Signs of Caries at SmalltalkHub (mooseday13/2)
Signs of Caries at SmalltalkHub (mooseday13/2)Yuriy Tymchuk
 
FAST Resolution (benevol13)
FAST Resolution (benevol13)FAST Resolution (benevol13)
FAST Resolution (benevol13)Yuriy Tymchuk
 
Modeling ASTs with FAST (mooseday13)
Modeling ASTs with FAST (mooseday13)Modeling ASTs with FAST (mooseday13)
Modeling ASTs with FAST (mooseday13)Yuriy Tymchuk
 

Plus de Yuriy Tymchuk (12)

Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo (esug2016)Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo (esug2016)
 
Про що не говорять програмісти, про що мовчать науковці (UCU2015)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)Про що не говорять програмісти, про що мовчать науковці (UCU2015)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)
 
What if Clippy Would Criticize Your Code? (benevol2015)
What if Clippy Would Criticize Your Code? (benevol2015)What if Clippy Would Criticize Your Code? (benevol2015)
What if Clippy Would Criticize Your Code? (benevol2015)
 
Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]
Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]
Treating Code Quality as a First Class Entity (icsme15) [doc. symposium]
 
Beyond the Concept of Quality in Pharo (esug2015)
Beyond the Concept of Quality in Pharo (esug2015)Beyond the Concept of Quality in Pharo (esug2015)
Beyond the Concept of Quality in Pharo (esug2015)
 
Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)
 
ViDI - The Visual Design Inspector (fosdem2015)
ViDI - The Visual Design Inspector (fosdem2015)ViDI - The Visual Design Inspector (fosdem2015)
ViDI - The Visual Design Inspector (fosdem2015)
 
Graphics and Visualization (Pharo Days 2015)
Graphics and Visualization (Pharo Days 2015)Graphics and Visualization (Pharo Days 2015)
Graphics and Visualization (Pharo Days 2015)
 
Collaboration in Open-Source Projects: Myth or Reality? (msr14)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)Collaboration in Open-Source Projects: Myth or Reality? (msr14)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)
 
Signs of Caries at SmalltalkHub (mooseday13/2)
Signs of Caries at SmalltalkHub (mooseday13/2)Signs of Caries at SmalltalkHub (mooseday13/2)
Signs of Caries at SmalltalkHub (mooseday13/2)
 
FAST Resolution (benevol13)
FAST Resolution (benevol13)FAST Resolution (benevol13)
FAST Resolution (benevol13)
 
Modeling ASTs with FAST (mooseday13)
Modeling ASTs with FAST (mooseday13)Modeling ASTs with FAST (mooseday13)
Modeling ASTs with FAST (mooseday13)
 

FAST Master's Defense (UA)