Friday, November 15, 2013

Deliverable 4 Experience

For this post, much like my other deliverable experience posts, I will be reflecting upon the feedback we received during the presentation of our fourth deliverable.

We started by simply running the main driver of our script (runAllTests.sh). This produced an HTML output that Cameron formatted pretty well. Unfortunately, we formatted it for typical resolution on a laptop screen (I'm not sure what he used off the top of my head, but it looked nice on all of our laptops of varying sizes). This resolution did not hold up when we projected onto the screen in the room - this is something we will fix for the final presentation. We will definitely find a time to go in the room and test the HTML formatting within the room.

But the HTML format was not criticized as being poor in any regard, so kudos to Cameron for that. We inject records into the HTML as the driver runs and each record creates a new row in the HTML. At the time of our presentation, we were only saying which unit tests were running, a description of the test (the description included the method being tested and requirement), and a pass/fail slot. In order to make this more readable for anyone and everyone, we are having to change it up.

To change it up: Tyrieke started working on separating the method into its own "Method:" field in the HTML and putting the requirement in its own field. This is trivial as we are just manipulating a little bit of data that comes from the testCaseX.txt file. So we'll have the name of our input file we use for test cases and the name of the output and the name of the oracle. But here's an issue... we can't really show the inputs, expected output, and actual output on our html because Galaxy likes to use big files that have very unique formatting (fasta, for example).

So here's where I'm stepping in with my idea. After Tyrieke and Cameron finish their formatting, I had the idea of having the inputs, outputs, and oracles function as links to the files themselves. So we can click on (or maybe even hover over - get some CSS3 and HTML5 in the mix) the file and view the inputs, outputs, and oracles. This would make it so our HTML report meets all the requirements, all while I'm brushing up on some HTML5 (since I have not worked with it since early Summer.

Music listened to while blogging: N/A

Wednesday, November 13, 2013

Deliverable 4: Getting Out The Door

So Tyrieke was able to implement the testing of nested methods within our testing suite. This completely rounds out the testing we can do for Galaxy as any Python method can be tested now. Cameron has been working on the HTML - setting up our banner for our professional grade report.

There was an interesting issue that Logan pointed out to the rest of the group. His running of the runAllTests.sh file would result in an error because a .svn file was being read as a testCaseX.txt file. This was really weird to Tyrieke and I because we have been able to run all the tests without any issue. Well, we boiled it down to potentially being an operating system issue.

Tyrieke is using Fedora
I'm using Mint
Logan and Cameron are using Ubuntu

Well, it turns out that when installing svn from Ubuntu, svn is actually pulled from a different repository than when installing svn from Mint or Fedora. The Mint and Fedora installs pulled a newer version of subversion than that of Ubuntu.

This older version of svn puts .svn files in every single directory. The newer version only puts a .svn file within the highest level of the repository folder. We added a simple try/except to get around this issue in case someone wants to test this on any flavor of Linux.

Music listened to while blogging: N/A

Monday, November 11, 2013

On Our Way To A Full Testing Suite

So our group is on pretty good track to get this deliverable out the door on time.

We need 25 test cases, we currently have 13. I know of around 5 test cases we need to add for the first method we tested (fasta_compute_length). There was a variable we had not even tinkered with so that leaves room for test cases we can come up with. So, after the introduction of those test cases to our suite, we will be in very great position for getting all of our test cases done.

Tyrieke, Cameron, and I had a brief 5 minute discussion about the state of where the project is when we saw each other today. Tyrieke and Cameron went to the lab and started working on getting the last generic version of testing completed (as Tyrieke has found a method that would be trivial to test if we get that generic component done). I had to go to a class, but we plan to meet up and get the rest of this hammered out within the next day or two.

Concerning the deliverable: I went through and added detailed runs of the 5 test cases we identified in the third chapter of our deliverable. The detailed runs are pretty redundant, though, seeing as they all are testing the same method, with some of the parameters held constant the entire time as we were testing other aspects of the method for those 5 test cases. Redundancies are nothing more than safeguards, though, and it would be abnormal if 5 similar test cases did not have 5 similar runs and output.

Music listened to while blogging: 2Pac

Wednesday, November 6, 2013

Boolean Bombers Update

So our next deliverable is next week. Currently, we still have to amass 20 more test cases and make a few more slight edits to our experience report from the third deliverable.

Tyrieke, a fellow group member, is on the verge of breaking through with a new set of test cases. Galaxy has a plethora of methods that open files to make sure they exist. The files can be opened up in a variety of manners. Tyrieke knows all the specific of this and he will update us whenever we have our next team meeting. I am going to work on flushing out the rest of the test cases for the fasta length count function that we found initially. We will likely only need to find one other function to test as there are always a multitude of manners in which a method needs to be tested to fully flush out the functionality of said method.

I went to go and work on the project a bit just now from home, but I ran into an issue. For some reason, VMware decided it will restart my Mint instance each time I log in. At first, I thought I may have had an incorrect password, but typing gibberish into the password field yields an incorrect password response. I have been doing most of my work from my lab computer on campus, so I will probably just resume that in the future.

The next few blog posts will probably be kept short until the post right before our deliverable because I imagine that is when we will be knocking out a lot of the work for our project, as that is how it seems to work.

Bright side: I finished a rough draft of my personal statement for my graduate school applications.
Not-so-bright side: It's a very rough draft.

Music listened to while blogging: N/A (watching The Office - S04E01)

Monday, November 4, 2013

Functional Programming

For this post, I will be reflecting upon what I've been spending most of my time on as of late: Functional programming.

So the concept of functional programming makes sense, coming from a strong mathematical background. The biggest hoop I am having to deal with when switching from a strictly procedural programming state of mind to a functional state of mind is dealing with recursion within iterations. So the concept of iteratively moving through a list makes perfect sense: it feels just like a for-each loop and operates pretty similarly. What I am having trouble with, however, is trying to create a lambda call (Ruby) within an iteration. Typically, a lambda produces a proc (or procedure) which you can then call with whatever value(s) that you like. Doing this while trying to iterate over a list of functions is baffling me, for some reason. Hopefully I can figure this issue out and update this post at a later point in time, but, for now, this will have to be cut short as I have to finish pulling the rest of my hair out finishing this assignment.

Update: So I have finally been able to get past my functional programming issue thanks to Lisa Smith. So I was trying go multiple calls deep with lambda functions, when really I just needed to use a mapping function in conjunction with my iteration. This makes a lot more sense and I escaped without pulling all my hair out.

On the bright side: I have gotten a jumpstart on my personal statement for graduate school applications and I have an outline set up for that. So hopefully I can knock that out this week and then be on a good track to knock out my research proposal/statement as well.

Music listened to while blogging: Aeroplane - In Flight Entertainment (Continuous Mix)