UCOSPLogJackieLang

Jackie Lang edited this page Apr 23, 2017 · 57 revisions

Each UCOSP participant is asked to log all the steps they take as they make progress through the semester. This includes difficulties they faced (getting set up, understanding how to model in Umple, using UmpleOnline, code that is difficult to figure out, and development tools that are hard to figure out, or don't seem to work properly). The more log entries added the more we can better get a grip on the usability issues with Umple, and the more we can help future new contributors come up to speed.

Please record entries in reverse chronological order

Log Entries

April 22nd

I've returned from my travels! I finished up my work with issue 1008, and am waiting for feedback on my PR. I added a comment to issue 1033 to give whomever is assigned the issue a head start as well. Issue 1008 was definitely an interesting piece to work on. I got to learn more about how Umple's grammar is defined, and how Umple's parsing works. It's been a great experience to build a new feature from the ground up.

April 7th

After our final meeting today, I finalized what I need to do for my remaining two issues.

Issue 1008 I retracted my PR because I would like to continue refining the solution offline until I am satisfied with its stability. I discovered quite a few more cases today, and because of this, I was unable to finish the remainder of the issue. I wrote this in the issue page. I am now stopping work due to finals, and I am travelling the day after my last final. I am going to resume work on issue 1008 when I return (starting April 22nd).

Issue 1033 I received Tim's feedback yesterday, so I was not able to make any further progress on this issue. When I resume work on April 22nd, I will also provide a detailed comment in this issue explaining the areas of the code that need to be modified.

April 5th - 6th

Thanks to Vahdat's tip, I was able to resolve the parsing issue with enumerations, and continue on with my work for issue 1008. The logic for the remaining portion of this issue was not difficult, however, getting the code generation to work correctly was a bit tedious. Enumerations are now generated for Java.

Today (April 6th), I made an addition to my solution so that enumerations can be defined outside of classes. In this case, they will be shared by all classes in an Umple model. I also created a new entry in the Umple User Manual. I then submitted my PR

April 3rd - 4th

After having a meeting with Vahdat yesterday (April 3), I was assigned issue 1035, issue 1033, and issue 1008.

April 3rd - For issue 1035, I finished writing a user manual entry for "Final States" and submitted a PR for it.

April 3rd - For issue 1033, I was asked to do some research regarding the behaviour that Vahdat described in his example. As a result, I discovered the "Completion Transitions and Completion Events" state machine concept. I updated the issue page with my findings.

April 3rd & 4th - For issue 1008, I added the grammar for enumerations to umple_classes.grammar as enumerationDefinition and I
| [[enumerationDefinition]] onto classContent, however, the parser seems to be overriding this definition with malformedStateMachine2. After spending a good amount of time trying to tweak malformedStateMachine2, I decided to post a question in the issue page about how to deal with it. I am not very familiar with defining parsing rules, so I'd like some guidance.

April 2nd

After receiving Vahdat's response to my comments in my PR for issue 140 , I worked on correcting my solution. This took some time as I had to re-work some of my changes for issue 935 with respect to the exit actions in concurrent state machines. I also discovered a few more quirks along the way that I resolved.

The issue I am now working on is issue 963. I am having a Skype meeting with Vahdat to clarify its details.

March 29th

I finished implementing how regional final states are handled for issue 140. I'd still like to try out a few more cases before submitting a PR, but I am aiming submit one by the end of the day tomorrow!

March 27th

So far with issue 140 , I have done the following:

  • Created a new error that is thrown when a user-defined state is named "Final", added test cases for it, and updated existing tests
  • When Umple detects a transition to "Final" (aka. Big Final, the Final keyword), it now strictly adds the "Final" state to the top-level state machine. I had to make modifications in createStateFromTransition in UmpleInternalParser

My next step is to implement how regional final states are handled. I am going to start diving into this to get a sense of where I will need to make changes, but I won't complete the implementation until I know that my understanding is correct. I posted an example that shows my current understanding on the issue page.

March 24th

I had a great meeting with Vahdat today. We went through some more examples of issue 140 and I believe that I have a good understanding of how final states are meant to be treated in Umple. I created a new example that tries to encompass the aspects we discussed, and posted it in the issue discussion to confirm if my understanding is correct. Once we have finished ironing out the details, I am hoping to begin working on the implementation this weekend. This is likely going to be a bit of a challenge to implement, but I am looking forward to it.

March 23rd

I spent a good amount of time today looking into the semantics for final states, and how Umple is currently implementing them. I updated issue 140 with my findings. I am waiting to hear back on my comment for my PR for issue 1019.

March 21st

Today, I submitted a PR for issue 1019. I actually had to restart my work because my fix initially was not working properly for concurrent state machines. This was because getType() was returning "Simple" since some of the states no longer had the enter method. As a result, I added an additional check to getType() which checks if a state has no actions.

When I was updating the UmpleSelfGenerator StateMachine test, I realized that the "Null" state should be the last state generated for a nested state machine, since it no longer has a default "enter" method. See my example below:

Original

StatusOn {
   Null {
       enterOn -> Play
   }
   Play {
       exit / { setStatusOn(StatusOn.Null); }
       p -> Pause;
   }
   Pause {
       exit / { setStatusOn(StatusOn.Null); }
       p -> Play;
   }
}

Updated

StatusOn {
  Play {
     exit / { setStatusOn(StatusOn.Null); }
     p -> Pause;
  }
  Pause {
     exit / { setStatusOn(StatusOn.Null); }
     p -> Play;
  }
  Null {        } // moved Null state to be the last state in the nested state machine
}

March 19th

Now that my PR for issue 935 has been merged in (yay!), I am now working on issue 1019. It was easy for me to find the code that needed to be modified because of my work on issue 935. I am currently updating the existing tests that have been affected by my change. After I've tackled this issue, I am going to move on to issue 140.

March 14th - 16th

I submitted my PR for issue 935 , and received feedback from Vahdat. I needed to modify my fix so that the event methods don't call the exit methods for all super states, but rather the super state that the event occurs in. It took some time to get the right logic, but I was able update my fix, and the existing tests that were affected by my change. Today, I organized my examples for my presentation in tomorrow's meeting.

March 13th

I have been able to figure out how to get StateMachineTemplateTest to not run the PHP versions of the failing existing tests for issue 935. As I have been checking, and updating the Java existing tests, I came across issues with my solution for handling the exit methods for concurrent states. Luckily, after a bit of investigation, I was able to correct my mistakes. I am still working on thoroughly checking, and updating the existing tests.

March 8th - 12th

For March 8th - 9th, I ironed out how to apply the fix for issue 935 with Vahdat. Due to family events, and another major project in my Networking course, I was delayed in working on the concurrent state machine portion of the fix. Today, I succeeded in implementing the solution! Unfortunately, it took me much longer than I thought it was going to take me (about 5h).

I also spent a significant amount of time debugging a null pointer exception in the "StateMachine" test in UmpleSelfGeneratorTest. Luckily I was able to detect the source of the exception, and fix it.

In an attempt to skip the PHP versions of the failing tests in StateMachineTest.java, I tried using JUnit's [Assume.assumeTrue(String message, boolean b)](http://junit.org/junit4/javadoc/4.12/org/junit/Assume.html#assumeTrue(java.lang.String, boolean)). While this did skip running the PHP versions of the tests, it caused Null pointer exceptions whenever the Java versions of the test were run. Due to a long day of programming, it took me a while to realize that JUnit's Assume, was causing this. I will now find a different way to get StateMachineTest.java to skip running the PHP versions of the failing tests. Here is an example of what I tried to do.

// From JUnit's Website --> assumeTrue = If called with an expression evaluating to false, the test will halt 
// and be ignored
@Test
  public void checkExternalTransitions_withExitActions_1()
  {
    Assume.assumeTrue("Issue 935 --> Skipping this test for PHP, PHP is to be fixed in the future", language.equals("Java"));
    assertUmpleTemplateFor("checkExternalTransitions_withExitActions_1.ump",languagePath + "/checkExternalTransitions_withExitActions_1."+ languagePath +".txt","X");
  }

Next on the menu is to finish updating the existing Java tests. Since my addition to my fix today, there are a lot more tests that need to be checked and updated. I am aiming to have a PR ready by Wednesday.

March 6th

I was able to identify why the "testJava" build target was hanging, and I have fixed my solution so that this no longer occurs. Now my next step is to check that the output being generated by the failing existing tests is correct, and if it is, then I will update the tests. After I have finished updating the existing tests, I will work on the fix for issue 935 for PHP. It will be difficult for me to go through all of the existing tests by Friday's meeting because there are quite a few, and I also have two major deliverables due on Wednesday, and Thursday this week in my other courses. I will try my best to get as much done as I can for Friday.

March 5th

Today, I implemented the fix for issue 935 for Java code generation. My test cases are all passing, however there are issues with "template.test".

Currently, template.test fails (see output below)

template.test:
    [junit] WARNING: multiple versions of ant detected in path for junit 
    [junit]          jar:file:/usr/local/Cellar/ant/1.9.8/libexec/lib/ant.jar!/org/apache/tools/ant/Project.class
    [junit]      and jar:file:/Users/JackieLang/umple_fork/dist/libs/core/ant.jar!/org/apache/tools/ant/Project.class
    [junit] TEST cruise.umple.compiler.GeneratorHelperTest FAILED
    [junit] TEST cruise.umple.compiler.JavaGeneratorTest FAILED
    [junit] TEST cruise.umple.compiler.PhpGeneratorTest FAILED
    [junit] TEST cruise.umple.implementation.umpleself.UmpleSelfGeneratorTest FAILED
    [junit] Tests FAILED (crashed)
[junitreport] Processing /Users/JackieLang/umple_fork/dist/qa/cruise.umple/TESTS-TestSuites.xml to /var/folders/38/r17wdxmd24353ll4334jtmkm0000gp/T/null1721027514
[junitreport] Loading stylesheet jar:file:/usr/local/Cellar/ant/1.9.8/libexec/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl
[junitreport] Transform time: 1455ms
[junitreport] Deleting: /var/folders/38/r17wdxmd24353ll4334jtmkm0000gp/T/null1721027514
     [echo] Using myenv=local
     [echo] Last Version: 1.25.0-963d2bd

As a result, when the build gets to "testJava" it seems to hang. I confirmed that it had something to do with my change by switching over to my master branch, and successfully doing a full build on it. My next step is to figure out why this is happening.

March 4th

After my work today, I have a good understanding for why the "exitOn" method is generated, and an idea for how I will modularize the exit methods for state machines. I posted my observations, and my solution in issue 935. I am going to start experimenting with my fix tomorrow.

March 2nd

After receiving feedback from Vahdat yesterday on issue 935, I continued my investigation on how I will modularize the exit methods for state machines. It appears that I will have to make modifications to the prepareNestedStateFor, and the prepareNestedStateMachine methods in the "JavaGenerator". I added my modifications to Vahdat's proposal, and I am waiting to see if it is the expected result. I also added my recent findings to the issue page.

February 26th

Using the Eclipse debugger, I have been observing how Umple generates exit methods for its state machines. I have also been observing the code that Umple generates when there are no exit actions and no entry actions, only entry actions, and both entry and exit actions. I have an idea for how to go about the fix for issue 935 , but before I start making changes in state_machine_Event.ump , I would like to see if I am taking the right approach. I have posted my question on the issue page. I am anticipating that I will have to update a few existing tests when implement the fix.

February 23rd

I am currently updating existing tests that involve parallel state machines as I have been given the "go-ahead" by Vahdat. They are currently failing because the generated enum names no longer match the expected enum names. In total, there are 36 tests. These tests are in "JavaGeneratorTest", "NuSMVTemplateTest", "StateMachineTest" ("JavaStateMachineTest" and "PhpStateMachineTest"). I also added a couple of test cases that included exit and entry actions in the parallel state machines, and from what I observed, the output is correct. I am aiming to have a pull request ready by the end of the day tomorrow.

The next issue I will be working on is issue 935.

February 20th

I began my work on issue 1001 yesterday. Using Eclipse's debugger, I arrived at a solution today. However, there are 37 existing tests that need to be updated as a result of my change. I am unsure if there is a specific process to follow when updating existing tests, so I have posted a question regarding this on the issue page.

The main cause of issue 1001 was that a parallel state machine's parent state name was not included when the parent state's state machine name differed from it.

February 17th

Following our meeting today, and Vahdat's comments on my PR for issue 778, I have created a new issue, and I have assigned it to myself. My plan now is to update my PR so that it can be merged to resolve issue 778. I will begin working on the new issue this weekend.

February 15th

Had a productive past couple of days! I submitted a PR for issue 778. I will now start working on issue 935. I have two midterms, and another assignment due next week, so I will likely not have this issue completed by Friday.

February 13th

I have now received feedback and answers for my questions and comments in issue 935 and issue 778. For issue 778 I now have a good understanding of the change I need to make. I also have a good understanding of issue 935, but I have a remaining question which I posted on the issue's page.

I also noted that Vahdat mentioned me in issue 140. I will begin investigating this issue after I have finished issues 935 and 778.

I also spent some time reading the following document on [UML State Machine Diagrams] (https://classes.soe.ucsc.edu/cmpe013/Spring11/LectureNotes/A_Crash_Course_in_UML_State_Machines.pdf) .

February 12th

For both issue 935, and issue 778, I am waiting for feedback on my comments and questions. Before I can create solutions for either of these issues, I need a better understanding of the expected behaviour. I spent a lot of time today walking through the current execution of the code in both cases using Eclipse's debugger.

For issue 935, I believe the file that will need to be modified is state_machine_Event.ump . From my understanding, the UmpleInternalParser creates all of the State objects, and associates their exit and entry actions with them. It is up to the code generator to correctly write the event methods. I also noticed differences between the PHP and Java code generated for the example in issue 935. I posted a comment in the issue regarding this observation.

For issue 778, I believe I have found the section in UmpleInternalParser where the parallel state machines are being created and added to the UmpleModel. I posted a comment in the issue regarding this.

February 10th

This past week was a "week from hell" with regards to my other three courses. I unfortunately did not make progress on issue 935. However, I spent a lot of time today investigating both issue 935 and issue 778. I added my questions and comments to both of the issue's discussion feeds. While waiting for feedback, my plan is to use the Eclipse debugger to see what areas of the code are being called in each issue's example. I am hoping that this will give me a general idea of where changes should be made.

As I mentioned in the group meeting today, I hope to be finished with both of these issues by next Friday. I also sent Vahdat an email asking how I should prioritize the remaining state machine issues. I will be devoting all of Sunday to Umple to get caught up with my missed time this past week.

February 3rd

I submitted my PR for [issue 925] (https://github.com/umple/umple/issues/925) yesterday, and it has now been merged into Umple's master branch. The next issue I will work on is issue 935 the sequence of exit actions are not executed correctly. I will begin my investigation in the next couple of days.

January 31st - February 1st

I have successfully implemented my fix for [issue 925] (https://github.com/umple/umple/issues/925). One of the tricky parts to resolving this issue was determining where to place the fix in UmpleInternalParser_CodeStateMachine.ump . Initially, I tried fixing the issue in "postTokenStateMachineAnalysis". I ran into problems though when I tried modifying the final states activity, transition, action, and nested state machine lists. I then realized that I could analyze the final state, and refactor it, in the "analyzeState" method.

Another issue I ran into during my work was that I did not realize that line number comments had to be removed from the .java.txt files for template tests. The Eclipse debugger helped me realize this.

I have added a warning (W072RefactoredFinalState) that will be generated if Umple detects and omits do activities, nested state machines, exit actions, and/or outgoing transitions in a final state. I have also added tests for the warning to "UmpleParserStateMachineTests.java". Tomorrow, I will finish the Umple User Manual page for the W072, and I will submit a PR.

January 29th

I began my investigation on [issue 925] (https://github.com/umple/umple/issues/925), and posted a couple of questions on the issue page. I have a very busy week ahead with interviews for summer coop positions, and performing usability tests for my "User Interface" group project. I am aiming to have this issue resolved by the end of the week.

I also posted an observation I made on [UmpleOnline's slow loading time] (https://github.com/umple/umple/issues/949)

January 26th

I submitted a [pull request] (https://github.com/umple/umple/pull/978) for issue #923 . The most difficult part of solving this issue was determining which file I needed to modify for both the Java and PHP code generation. As a result of working on this issue, I now have a much better understanding of how Umple's code generation works. I also know how to create tests for the "ClassTemplateTest" files.

I browsed through the current state machine issues to see what I will be working on next. After finding the following four issues, I sent Tim and Vahdat an email to see which one they would like me to work on.

[Issue 925: Final states should not have do activity, exit and entry actions, and any outgoing transition]
(https://github.com/umple/umple/issues/925)

[Issue 963: Being able to extend state machines through classes (Single inheritance)]
(https://github.com/umple/umple/issues/963)

[Issue 935: the sequence of exit actions are not executed correctly]
(https://github.com/umple/umple/issues/935)

[Issue 778: parallel state machines must not have the same name]
(https://github.com/umple/umple/issues/778)

January 22nd

One of my accomplishments on the last day of the code sprint was completing my fixes for the UmpleOnline examples so that their generated Java and PHP files could be compiled. From my pull request, Vahdat identified a new issue regarding Umple traits. I spent some time investigating the issue with him, and he will be developing a fix for it. Once the fix is completed, issue #758 will be closed.

I also developed Java test cases for issue issue #923. I added my tests to JavaClassTemplateTest.java, and confirmed that they were being executed. I am aiming to submit a pull request for this issue by Friday evening. I am currently catching up with the coursework that I missed last Friday, and reviewing my school assignments that are due this week.

For my term project, I have chosen to concentrate on Umple's state machines. I will be looking for new state machine issues to work on over the next few days.

Overall, I really enjoyed my time at the code sprint. It was great to get to know everyone in person, and I am much more familiar with Umple's system architecture, as well as its syntax and semantics. I am looking forward to continuing to develop my knowledge of the system, and resolving more issues.

January 21st

As a result of modifying the "GeometricSystem.ump" UmpleOnline example, I discovered a bug with Umple's PHP code generation. I noticed that Umple's PHP code generation does not correctly convert method parameters to valid PHP method parameters. I was instructed by Vahdat to open the following issue #964. Before posting the issue, I spent some time checking how PHP processes method parameters.

For the rest of the day, I continued my investigation of issue #923. After a lot of "grepping", and reading the JavaDocs, I determined the location in which I need to implement my change. In "class_MethodDeclaration.ump", there is the following line:
String override = aMethod.getIsImplemented() ? " @Override\n" : "";
There is no code that checks if the method has been implemented by a state machine. I confirmed my findings with Vahdat. My next steps are to create test cases for the issue, and then implement my solution.

At the end of the day, I ran into an issue with git when I tried to make one last change for issue #758's PR. After my committing my change, and performing the steps in "Step 8" of CONTRIBUTING.md I could not push my changes up to my branch. In the end, Vahdat and I found the following git command which resolved my issue:
git push -f origin resolve_issue_758

January 20th

Today was a productive day. I worked through all of the Umple examples that were failing their Java and PHP compilation. As I fixed the examples, I also spent time reviewing the Umple User manual whenever I came across unfamiliar syntax, as well as to review Umple's features. This was my first time working with PHP code as well, so I also spent some time exploring the generated PHP code, and understanding its syntax and semantics. I have submitted a PR for issue #758. I have started to investigate issue #923, and will be focusing on this issue tomorrow.

January 18th

I have two new issues that I will be working on during the code sprint in Calgary:

I gave Tim my revisions for the "Development Style" page so that some of the steps mapped to umple/CONTRIBUTING.md . I also updated issue #593 and it's corresponding pull request to show that it is now closed. I am busy finishing up my school assignments as much as I can before the code sprint.

January 16th

I submitted a pull request for issue #593. I found the "Traffic Lights B" example in the umpleonline/ump/ directory. I used the following command to confirm that my fix corrected the issue:
ant -Dmyenv=local -f build.exampletests.xml allUserManualAndExampleTests
However, before I made any changes, I executed the above command and the following UmpleOnline examples failed their Java compilation:

  • CollisionAvoidance.ump
  • CollisionAvoidanceA1.ump
  • CollisionAvoidanceA2.ump
  • CollisionAvoidanceA3.ump
  • GeometricSystem.ump
  • HomeHeater.ump

I emailed Vahdat to see if a new issue should be created to fix these examples.

January 15th

Today I believe I was able to identify the cause of issue #593. I came up with two general solutions for the issue. I updated the issue page with my findings, and to see if I can implement either of my solutions. I also need to determine where I will write my tests and the actual fix. So far I have looked through the directories listed in https://github.com/umple/umple/wiki/UmpleArchitectureStateMachines. I have asked for guidance on the issue page.

I also reviewed the "State Machine" section in the Umple User Manual, and notified Adam to include a typo fix for the "Pooled State Machine" page in his fixes for the user manual.

January 14th

I am excited to begin working on my first Umple issue (https://github.com/umple/umple/issues/593). I confirmed with Vahdat that my development environment is ready to go, and I also received more information about the state machine and Gradle projects. I am going to start investigating issue 593 tomorrow, and I will do more research on Gradle over the next couple of days to see if I would like to pursue it as my project for the semester. Over the past couple of days, I have been working on school assignments that are due shortly after the code sprint so that I don't have to worry about them.

January 10th - 11th

Over the past couple of days, I have played around with a few more of the class diagram and state machine examples with Umple. I have also had the chance to look over the current issues, and a few that I would be interested in working on are:
https://github.com/umple/umple/issues/925
https://github.com/umple/umple/issues/923
https://github.com/umple/umple/issues/771
https://github.com/umple/umple/issues/593

Later on, when I become more familiar with Umple, and after resolving some issues, I'd be interested in working on https://github.com/umple/umple/issues/713 . Over the next couple of days, I am going to continue exploring Umple's codebase, and its architecture.

January 9th

Using "Eclipse Installer", I added the modelling tools package for Eclipse Neon.2 Release (4.6.2). With the new package, the newest version of the Umple plugin from the site now works on my machine. After updating Eclipse, I ran a full test and it completed successfully.

I reviewed the "Umple Testing Architecture" page, as well as, the "Umple Architecture" page. I also setup Eclipse to do a full build of Umple thanks to Adam's guide https://github.com/umple/umple/wiki/Performing-a-Full-Build-of-Umple-In-Eclipse-Using-Ant

Tomorrow, I am going to go through more Umple examples, and look at some of the current issues on GitHub.

###January 8th I completed setting up Eclipse with the "cruise.umple" and "cruise.umple.nebula" projects, and was able to successfully run a full JUnit test. Initially, the JUnit tests were failing. After doing a full re-build of Umple, all tests passed. I also added the most recent version of the Umple Eclipse plugin (cruise.umple.eclipse_1.22.0.5146.jar) from https://github.com/umple/umple/releases and placed it in Eclipse's "dropins" directory.

I also experimented with the "ant" command line tool. One of the commands I played around with was "ant -Dmyenv=local build.testbed.xml testJava".

I watched the following video to get oriented with Umple's examples: https://www.youtube.com/watch?v=HLWML9YSD_U I also went through the coop program class diagram example, and the garage door state machine example. I was able to use the command line compiler to compile both of these examples. This coming week, I will go through more examples, and implement my own.

My next steps are to review the "Umple Testing Architecture", and to review the current issues to determine the areas of Umple I would like to work on.

January 5th

Progress on UCOSP resources:

  1. Umple User Manual - Finished reviewing all material except the "Examples" section, planning on finishing this section by the end of the weekend (January 8th)
  2. Completed review of "Philosophy and Vision", "Best Umple Use Practices", "Contribution Process To Umple", and the pull request tutorial
  3. Architecture - Finished reviewing all material except the "Umple Testing Architecture" section, planning on finishing this section by Monday (January 9th)
  4. Development Setup - Successfully completed everything up to "Step 3: Setting Up Eclipse" for my MacBook Pro running "macOS Sierra Version 10.12.2 (16C67)"
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.