Skip to content

Development Plan

elroyhaw edited this page Apr 12, 2019 · 9 revisions

Development Plan

Iteration 1 Plan

Here we identified the tasks and activities required to be completed for iteration 1.

  • Setup DevOps
    • [DEV1] Setup TravisCI to build for Windows, Mac OSX and Linux
    • [DEV2] Setup TravisCI to run clang-format and clang-tidy checks
  • Agree to API for each component
    • [API1] Identify components in SPA
    • [API2] Discover the APIs required for each component
    • [API3] Agree to API design of each component
  • Develop header files for each component based on API
    • [SPA1] Develop SPA Header
    • [PLX1] Develop PQLLexer Header
    • [SLX1] Develop SIMPLELexer Header
    • [AST1] Develop ASTBuilder Header
    • [QRY1] Develop QueryBuilder Header
    • [DE1] Develop DesignExtractor Header
    • [EVAL1] Develop PQLEvaluator Header
    • [PKB1] Develop PKB Header
  • Develop SPA to be able to parse a procedure with simple assign statements
    • [SLX2] Implement SIMPLE lexing of identifiers, number, procedure, assign tokens
    • [AST2] Implement AST building of procedure, assign and variable nodes
    • [SPA2] Integrate the SIMPLE lexer and AST Builder in SPA
  • Develop SPA to be able to parse read and print statements
    • [SLX3] Implement SIMPLE lexing of read and print tokens
    • [AST3] Implement AST building of read and print nodes
  • Develop SPA to be able to parse if and while statements with simple conditions
    • [SLX4] Implement SIMPLE lexing of if, else and relational operators
    • [AST4] Implement AST building of if and while nodes
  • Develop SPA to be able to parse expressions
    • [SLX5] Implement SIMPLE lexing of arithmetic operators
    • [AST5] Implement AST building of expressions
  • Develop SPA to be able to parse complex conditonals
    • [SLX6] Implement SIMPLE lexing of &&, || and ! tokens
    • [AST6] Implement AST building of complex conditionals
  • Develop SPA to be able to evaluate simple select queries
    • [PLX2] Implement PQL lexing of identifiers, entities and select tokens
    • [QRY2] Implement Query building of select entity queries
    • [EVAL2] Implement PQL evaluation of select entity queries
    • [DE2] Implement Design extraction of simple entities
    • [PKB2] Implement PKB storage and retrieval of simple entities
    • [SPA3] Integrate PQLLexer, Query Builder, PQL Evaluator and PKB in SPA
    • [SPA4] Integrate PKB, Design extractor and AST Builder in SPA
  • Develop SPA to be able to evaluate such that follows and parent queries
    • [PLX3] Implement PQL lexing of such that, follows, parent and _
    • [QRY3] Implement Query building of such that clause with follows and parent
    • [EVAL3] Implement PQL evaluation of such that follows and such that parent
    • [DE3] Implement Design extraction of follows and parent
    • [PKB3] Implement PKB storage and retrieval of follows and parent
  • Develop SPA to be able to evaluate such that follows* and parent* queries
    • [PLX4] Implement PQL lexing of and follow* and parent*
    • [QRY4] Implement Query building of such that clause with follows* and parent*
    • [EVAL4] Implement PQL evaluation of such that follows* and such that parent*
    • [DE4] Implement Design extraction of follows* and parent*
    • [PKB4] Implement PKB storage and retrieval of follows* and parent*
  • Develop SPA to be able to evaluate such that uses and modifies queries
    • [PLX5] Implement PQL lexing of and uses and modifies
    • [QRY5] Implement Query building of such that clause with uses and modifies
    • [EVAL6] Implement PQL evaluation of such that uses and such that modifies
    • [DE5] Implement Design extraction of uses and modifies
    • [PKB5] Implement PKB storage and retrieval of uses and modifies
  • Develop SPA to be able to evaluate assign pattern queries
    • [PLX6] Implement PQL lexing of pattern and expressions
    • [QRY6] Implement Query building of pattern clauses
    • [ALG1] Implement infix to postfix conversion for an expression
    • [EVAL7] Implement PQL evaluation of pattern clauses
    • [DE6] Implement Design extraction of assign expressions in postfix form
    • [PKB6] Implement PKB storage and retrieval of assign expressions
  • Develop SPA to be able to evaluate a query consisting of both such that and pattern query
    • [QRY7] Implement Query building of multiple clauses
    • [EVAL8] Implement PQL evaluation of multiple clauses
    • [EVAL9] Implement merging of results from multiple clauses
  • Develop SPA to ensure syntactic errors and semantic errors are handled
    • [QRY8] Implement checks for syntactic and semantic errors in Query Builder
    • [AST7] Implement checks for syntactic errors in AST builder
    • [DE7] Implement checks for semantic errors in Design Extractor
  • Write system tests
    • [STST1] Write SIMPLE source for testing specification conformance
    • [PTST1] Write PQL queries for testing specification conformance
    • [STST2] Write SIMPLE source for testing messy semantics that do not cause errors
    • [PTST2] Write PQL queries for testing messy semantics that do not cause errors
    • [STST3] Write SIMPLE source for stress testing the parser
    • [PTST3] Write PQL queries for stress testing the PQL evaluation

Each of these tasks is then tacked to a week to completed by. Activities under each task are assigned based on the component been worked on which is assigned to each person at the start of the project as shown below.

Team Member Components
Wenhan DevOps, PKB, Design Extractor
Elroy SIMPLE AST, Design Extractor
Flora SIMPLE Lexer
Pengyu PQL Evaluator
Yufei PKB, Query Builder
Shi Jin PQL Lexer, Query Builder

The activities to be completed each week for each person is shown below

Team Member Week 2 Week 3 Week 4 Week 5 Week 6 Recess
Wenhan DEV1, DEV2, API1, API2, API3 SPA1, PKB1 SPA2, DE1, DE2, PKB2 DE3, PKB3 DE4, PKB4, PKB5 DE6, DE7, PKB6, STST3
Elroy API1, API2, API3 AST1, AST2 AST3 AST4, AST5 DE5 AST6, AST7, STST1
Flora API1, API2, API3 SLX1, SLX2 SLX3 SLX4 SLX5, SLX6 STST2
Pengyu API1, API2, API3 EVAL1 EVAL2, EVAL3, SPA3 EVAL4, EVAL5 EVAL6, EVAL7 EVAL8, EVAL9, PTST1
Yufei API1, API2, API3 PLX1, PLX2 PLX3 PLX4 PLX5, PLX6 PTST3
Shi Jin API1, API2, API3 QRY1, QRY2 QRY3 QRY4, QRY5 QRY6, QRY7 QRY8, PTST2

We also employ continuous testing and continuous integration to complete these tasks while ensuring our software is sufficiently tested. Therefore unit tests and integration tests are implicitly written in conjunction with the implementation, either before or after implementation.

Iteration 2 Plan

Here we identified the tasks and activities required to be completed for iteration 2.

  • Revising prototype from iteration 1
    • [RV1] Change implementation for SIMPLE parser and lexer
    • [RV2] Change implementation for PKB
    • [RV3] Change implementation for evaluator
  • Agree to design decisions for populating relations in iteration 2
    • [DDS1] Next relation
    • [DDS2] Modifies and Uses involving procedure calls and procedures, Calls* relations
    • [DDS3] Next* computed on the fly
  • Agree to design decisions for changes to clauses in iteration 2
    • [DDP1] If/while pattern clauses
    • [DDP2] With clauses
    • [DDP3] Select clauses with tuple or boolean
  • Develop SPA to be able to evaluate such that modifies and uses queries for source with procedure calls and procedures
    • [DE1] Implement Design extraction of modifies and uses for procedure calls and procedures
  • Develop SPA to be able to evaluate such that next queries
    • [PLX1] Implement PQL lexing of next
    • [QRY1] Implement Query building of such that clause with next
    • [EVAL1] Implement PQL evaluation of such that next
    • [SPA1] Implement parser to extract next
    • [PKB1] Implement PKB storage and retrieval of next
  • Develop SPA to be able to evaluate such that calls queries
    • [PLX2] Implement PQL lexing of calls
    • [QRY2] Implement Query building of such that clause with calls
    • [EVAL2] Implement PQL evaluation of such that calls
    • [SPA2] Implement parser to extract calls
    • [PKB2] Implement PKB storage and retrieval of calls
  • Develop SPA to be able to evaluate such that calls* queries
    • [PLX3] Implement PQL lexing of calls*
    • [QRY3] Implement Query building of such that clause with calls*
    • [EVAL3] Implement PQL evaluation of such that calls*
    • [DE2] Implement Design extractor to extract calls*
    • [PKB3] Implement PKB storage and retrieval of calls*
  • Develop SPA to be able to evaluate such that next* queries
    • [PLX4] Implement PQL lexing of next*
    • [QRY4] Implement Query building of such that clause with next*
    • [EVAL4] Implement PQL evaluation of such that next*
    • [CFG1] Implement CFG
    • [CFG2] Extract next* from CFG
  • Develop SPA to be able to evaluate if/while pattern queries
    • [PLX5] Implement PQL lexing of if/while pattern clauses
    • [QRY5] Implement Query building of if/while pattern clauses
    • [EVAL5] Implement PQL evaluation of if/while pattern clauses
    • [PKB4] Implement PKB storage and retrieval of if/while control variables
  • Develop SPA to be able to evaluate a select tuple or boolean query
    • [PLX6] Implement PQL lexing of select tuple or boolean clauses
    • [QRY6] Implement Query building of select tuple or boolean clauses
    • [EVAL6] Implement PQL evaluation of select tuple or boolean clauses
  • Develop SPA to ensure semantic errors are handled
    • [QRY7] Implement checks for semantic errors in Query Builder
    • [DE3] Implement checks for semantic errors in Design Extractor
  • Write system tests
    • [STST1]
    • [PTST1]
    • [STST2]
    • [PTST2]
    • [STST3]
    • [PTST3]

The activities to be completed each week for each person is shown below

Team Member Week 7 Week 8 Week 9 Week 10
Wenhan RV1, RV2, DDS1 SPA1, SPA2 PKB3 STST3
Elroy DDS2 DE1 DE2, CFG1 DE3, STST1
Flora DDS3 PKB1, PKB2 CFG2 STST2
Pengyu RV3, DDP3 EVAL1, EVAL2 EVAL3, EVAL4, EVAL5 EVAL6, PTST1
Yufei DDP1 QRY1, QRY2 QRY3, QRY4, QRY5 QRY6, QRY7, PSTS3
Shi Jin DDP2 PLX1, PLX2 PLX3, PLX4, PLX5 PLX6, PTST2

Iteration 3 Plan

Here we identified the tasks and activities required to be completed for iteration 3.

  • Revising prototype from iteration 2
    • [RV1] Change implementation for PQL parser and lexer
  • Develop SPA to be able to evaluate AFfects and Affects* queries
    • [EVAL1] Implement PQL evaluation of Affects and Affects*
    • [AFF1] Implement Affects algorithm
    • [AFF2] Implement Affects* algorithm
  • Optimizations in PQL evaluator
    • [OPT1] Optimized the way to merge results of each clause
  • Micro optimizations throughout SPA
    • [MOPT1] Pre-allocating vectors
    • [MOPT2] Reduce copying of objects
  • Develop SPA to be able to evaluate extensions
    • [EXT1] NextBip and NextBipT extensions
    • [EXT2] AffectsBip and AffectsBipT extensions
  • Testing
    • [STST1] System test on Affects and Affects* relations
    • [PTST1] Queries for STST1
    • [STST2] System test on Calls and Calls* relations
    • [PTST2] Queries for STST2
    • [STST3] Stress system test
    • [PTST3] Queries for STST3

The activities to be completed each week for each person is shown below

Team Member Week 11 Week 12
Wenhan RV1 MOPT1, MOPT2
Elroy AFF1 AFF2
Flora EXT1 EXT2
Pengyu OPT1 STST3, PTST3
Yufei STST1 STST2
Shi Jin PTST1 PTST2

Clone this wiki locally