Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FAST Master's Defense (UA)

FAST Master's Defense (UA)

A master's defense slides for a FAST meta-modeling project. (Ukrainian)

Yuriy Tymchuk

June 11, 2013
Tweet

More Decks by Yuriy Tymchuk

Other Decks in Science

Transcript

  1. РОЗШИРЕННЯ ФУНКЦІОНАЛЬНОСТІ МОДЕЛІ
    FAMIX ДЛЯ ПОБУДОВИ АБСТРАКТНИХ
    ДЕРЕВ КОДУ JAVA– ТА SMALLTALK–ПРОГРАМ
    Юрій Тимчук

    View Slide

  2. ПРО ЩО РОБОТА?

    View Slide

  3. СТАТИЧНИЙ АНАЛІЗ
    ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ

    View Slide

  4. НАВІЩО АНАЛІЗУВАТИ?

    View Slide

  5. АНАЛІЗ П/З
    Розробка
    Оцінка

    View Slide

  6. ОЦІНКА КОДУ

    View Slide

  7. АЛЬТЕРНАТИВНЕ
    ПРЕДСТАВЛЕННЯ
    Складність
    системи
    Карта
    розподілу
    Інше…

    View Slide

  8. MOOSE

    View Slide

  9. FAMIX
    М М М
    Пакет
    Клас Клас
    ? ?
    ?

    View Slide

  10. FAMIX AST

    View Slide

  11. ПОТРЕБА У ПРОЕКТІ FAST
    • Обчислення метрик
    • Перевірка правил
    • Виявлення дуплікації
    • Візуалізація (альтернативне відображення)
    • Перетворення між мовами
    • І більше…

    View Slide

  12. ЗАГАЛЬНА МОДЕЛЬ FAST
    FASTBehaviouralEntity
    0..*
    statements
    0..1
    parentStatementBlock
    FASTStatement
    FASTNamedEntity
    name : String
    0..*
    parameters
    0..*
    localVariables
    FAMIXBehaviouralEntity
    0..1
    fastNamedBehaviouralEntity
    0..1
    famixBehaviouralEntity
    FAMIXNamedEntity
    0..*
    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

    View Slide

  13. FAST ДЛЯ
    SMALLTALK
    FASTBehaviouralEntity
    0..*
    statements
    0..1
    parentStatementBlock
    FASTVariableExpression FASTLiteral
    signature : String
    FASTMessageSend
    kind
    selector
    isUnary()
    isBinary()
    isKey()
    cascaded()
    receiver()
    FASTStatement
    0..1
    parentExpression
    0..*
    arguments
    FASTAssignmentExpression
    0..1
    parentAssignmentExpression
    0..1
    variable
    FASTExpression
    0..1
    parentStatement 0..1
    expression
    FASTArrayExpression FASTCascade
    0..1
    parentCascade
    0..*
    messages
    0..1
    parentExpression
    0..1
    concreteReceiver
    0..1
    parentExpression
    0..1
    block
    FASTSmalltalkReturnStatement
    FASTSmalltalkExpressionStatement
    0..1
    parentStatement 0..1
    expression
    0..1
    parentExpression
    0..1
    expression
    FASTNamedEntity
    name : String
    0..*
    parameters
    0..*
    localVariables
    0..1
    parentVariableExpression
    0..1
    variable
    FASTBlockDefinition
    FAMIXBehaviouralEntity
    0..1
    fastNamedBehaviouralEntity
    0..1
    famixBehaviouralEntity
    FAMIXNamedEntity
    0..*
    fastNamedEntities
    0..1
    famixNamedEntity
    FASTNamedBehaviouralEntity
    name : String
    FASTNumberLiteral
    value : Number
    FASTCharacterLiteral
    value : Object
    FASTStringLiteral
    value : String
    FASTSymbolLiteral
    value : Object
    FASTArrayLiteral FASTByteArrayLiteral
    0..*
    contents
    0..*
    contents
    FASTBlockExpression
    0..1
    parentExpression
    0..*
    contents
    FASTBooleanLiteral
    value : Boolean
    FASTUndefinedLiteral
    0..1
    parentExpression
    0..1
    receiver
    0..1
    parentBehaviouralEntity
    FAMIXInvocation
    0..1
    messageSend
    0..1
    invocation
    FASTStatementBlock
    0..1
    parentBehaviouralEntity
    0..1
    statementBlock

    View Slide

  14. FAST ДЛЯ JAVA
    FASTBehaviouralEntity
    0..*
    statements
    0..1
    parentStatementBlock
    FASTStatement
    FASTNamedEntity
    name : String
    0..*
    parameters
    0..*
    localVariables
    FAMIXBehaviouralEntity
    0..1
    fastNamedBehaviouralEntity
    0..1
    famixBehaviouralEntity
    FAMIXNamedEntity
    0..*
    fastNamedEntities
    0..1
    famixNamedEntity
    FASTNamedBehaviouralEntity
    name : String
    FASTExpression
    0..1
    parentBehaviouralEntity
    StatementBlock
    0..1
    parentBehaviouralEntity
    0..1
    statementBlock
    FASTVariableExpression
    0..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

    View Slide

  15. РОЗПІЗНАВАННЯ СИМВОЛІВ
    #middleOf:and:
    b
    a
    sum
    ^st
    st
    :=
    sum +
    a b
    /
    sum 2
    middleOf: a and: b
    | sum |
    sum := a + b.
    ^ sum / 2

    View Slide

  16. РОЗПІЗНАВАННЯ СИМВОЛІВ
    b
    a
    sum
    #middleOf:and:
    b
    a
    sum
    ^st
    st
    :=
    sum +
    a b
    /
    sum 2

    View Slide

  17. РЕЗУЛЬТАТ
    • Базова модель FAST, концепція створення моделей дерев коду
    • Повна реалізація FAST для Smalltalk
    • Часткова реалізація FAST для Java
    • Завантажувачі моделей для Smalltalk та Java
    • Алгоритм обч. цикломатичної складності (підтведж. для 2х мов)
    • Алгоритм розпізнання символів (підтведж. для 2х мов)
    • Прототипи алгоритмів для генерування коду на базі моделі та
    візуалізації моделі
    • Інтеграція з моделлю FAMIX
    • Інтеграція з інструментами середовища Moose

    View Slide

  18. ПОДАЛЬША РОБОТА
    • Rafael Durelli в RMoD: генерація коду з моделі FAST
    • Benjamin Arezki підчас GSoC: повна реалізація FAST для Java

    View Slide

  19. ПОДАЛЬШЕ ВИКОРИСТАННЯ
    • Компанія Synectique для вирішення проблем клієнтів
    • SCG Bern для своїх дослідження
    • Prof. Tewfik Ziadi для візуалізації вихідного коду програм

    View Slide

  20. ДОСТУП ДО ПРОЕКТУ
    • MIT License!
    • http://www.smalltalkhub.com/#!/~YuriyTymchuk/FAST
    • https://github.com/Uko/FAST
    • https://ci.inria.fr/moose/job/FAST-On-Moose/

    View Slide