This project started off as a learning exercise. This weekend I wanted to learn Akka with Java. In the process I created this github project to capture my learnings. The folders one - five in here is where that learning was captured. As I did that I realized a simple utility can be created that can be used with any traditional java code - specially unit tests or just for curious minds. This utility will process a list, apply a long running function (like making service calls) to each element in the list, capture results, aggregate them and will return the results. The results will be returned in the order - one for each element in the input list. Thus, this utility was created.
Why would I use this?
I would recommend not to use this in production code, yet.
Use this utility in your unit tests to exercise parallel processing / concurrency. For curious minds - to try out some instrumentation on your services For learning To provide me some feedback, if this is interesting, helpful and what updates can be made
These days I am working on the version 4 of the Everyday Math program with McGraw Hill Education. The marketing team here prepared this video about the product we are building these days. The product is Everyday Math 4 that is targeted to students and teachers for grades K-6 and this will be launching in June for the 2014-15 school years.
The video features the authors of the EM, product sponsors, UX designers and academic designers from the Chicago office and showcases the product we are building.
What kind of technical skills do BA's and QA's need? Terry and I had a good discussion on this quite a few times in the last year. Her recent email to the group soliciting feedback and ideas sparked a really good email conversation. Here is my take on this topic.
I think the technical skills needed by BA's and QA's depend a lot on Intranet / Internet system as well. With an internet system used by users all over the country / world BA's and QA's would need more technical skills around what are the minimum system requirements. Do we support multiple browsers / devices, what are the compatibility criteria and options. What are the trends in browser usage? What new technologies are coming in marketplace that may need to be accounted for - example, new version of Android or ipad mini :) If there is a new version of TinyMCE editor available do we upgrade? What does it buy us? etc
In an intranet system we may have a much more predictable user base. The technology standards are governed by a company wide "standards board" of some kind. This takes away the need BA's and QA's to know some of these technical items. In an Internet system where the user base is sampled and the technology terrain keeps changing much faster BA's and QA's need more technical skills.
Cucumber is fun to use. It it really cool to see plain english statements come to life and different pieces of code executed when those are english lines are executed. Gherkin syntax is great too. It has so much potential. Using a handful of simple keywords you can express any scenario and combined with cucumber you can execute them. Wonderful !
Then my developer brain came into action with all the principles around DRY (Don't repeat yourself) and WET (Write Everything Twice) highlighted. Does DRY apply to gherkins? It probably does. Take these two steps in different feature files for example:
And User A can view the message posted by User B
And User can view the message posted by the other user
These are two different lines of english meaning the same thing. These are the kind of gherkins different people would write about the same step or the scenario. If we already have the step #1 implemented we may apply the DRY principle and not implement step #2 once again. Now, how do I know if these two steps match and have the same implementation? By collaboration and by looking into the implemented step - right? Well the problem is - this takes time. Specially when the test suite is large this takes even more time. Now let's say all this collaboration and code inspection is done and it is concluded that the steps are the same we may want to edit the gherkin and replace the step #2 with step #1.
I call this whole process - "Normalization of Gherkins".
When is this done? When the step is being implemented
Who does that? Well, since this is a collaborative effort - everyone is involved.
If the developer who is implementing this does not have any idea that the step #1 above is already implemented in some other stepdef file the new (re)implementation of step #2 will be done.
So what happened here?
We are thrilled by the idea of automating any simple line of english that can be written by anyone but we still want reusability. So here comes a choice -
- Do you have people outside of your team who care about gherkins? If so, then evaluate using cucumber.
- Do you NOT have people outside of your team who care about gherkins? If so, then consider not using cucumber.
Let me get my message straight here. I am saying this about cucumber - to evaluate using it or not using it. However I think there is a lot of value in gherkins. What I am saying is evaluate the use of cucumber.
So - If you choose not to use cucumber how would you automate your gherkins then? Use unit testing frameworks to hit webdriver or something! I guess at this point I will leave this post here leaving a few questions unanswered for the next few posts. These questions are -
- How would simple junits consume gherkins?
- Could I get the same kind of report from junits the way I get it from cucumber?