Why Earn Certifications? I’ll Tell You..

Last post, I shared a story about earning my Certified ScrumMaster badge. Often, I’ll have conversations with other IT professionals about the usefulness of certifications and whether or not to pursue them. The common conclusion, as with most things in this business, is ‘It Depends.’

When I was first starting out in this field, I had a 1-year clerical vocational degree, no professional IT experience and a non-trivial stack of practical knowledge. So, how does a 20-something with this background get an interview? The answer for me was certifications.

While working a temp job answering phones, I dove into a book on the CompTIA A+ certification. For those not familiar, this is a fundamentals certification dealing with PC architecture and troubleshooting. Once I earned this certification, I was able to parlay that into interviews and an eventual Field Tech position.

Are certifications better than a traditional education? Again, the answer is ‘It Depends.’ While certifications are intended to ratify a candidate’s existing knowledge, discerning whether or not individuals actually have that knowledge can be tricky. This is where technical and knowledge-based interviews can be useful. In my opinion, in our current pool rife with graduate degree holders applying for entry level positions and mounting student debt, focused vocational training and certification is a solid option. And for those of us in the midst of our career paths, it’s a useful avenue to stay current and continue to demonstrate proficiency in our craft.

As part of an earlier post, I staged a Selenium server on Amazon’s EC2 service. Given the growing popularity of AWS, it’s something that people in our trade should take the time to become familiar and proficient with.  In order to grow in this space (and take advantage of the free trial period), I also picked up the Amazon Certified Developer course from Udemy.  Over the next 6 weeks, I’ll be making my way through the coursework and ultimately taking the certification.  Wish me luck!

I’d love to hear any feedback on this post and invite you to share your own experiences  and opinions around certifications.  As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!

Certified ScrumMaster – A Look Back

I funny thing happened since my last post…. I became a Certified ScrumMaster!

Some basic points before I ramble:  For the uninitiated, a ScrumMaster is one of the three roles that make up a Scrum team.   For the further uninitiated, Scrum is a software development process that attempts to fulfill Agile software development principles.

For the even further uninitiated, Agile is a set of principles that seeks to produce faster and better solutions via software by engaging customers early and often.  These principles have been distilled into the Agile Manifesto, which is generally one’s first introduction to Agile.  I’ve also recently been introduced to the Manifesto for Software Craftsmanship, which uses the cadence of the Agile Manifesto to add a focus on quality and professionalism to our work.

The main idea of Agile is that customer needs and value opportunities can and do change frequently, often several times a day.  Therefore, the process by which software solutions intended to meet those needs are built must be just as flexible, if not more.  This means that software developers and the customers they serve should not be held prisoner by yesterday’s expectations, but should be ready and able to respond to changes over the course of their projects.

One of the more popular frameworks used to help a development shop become more Agile is called Scrum.  Scrum consists mainly of static teams that focus on a cadence of time-boxed ‘sprints,’ each with their own concise and explicit goal.  At the end of a sprint, the team presents (and usually deploys) the finished software and gathers feedback on their work.  Additionally, the team self-evaluates and adopts changes necessary to improve their own performance.  They are then ready to proceed with the next sprint.

For our two day class, we were first presented with the history and framework of Agile. Then we were formed into teams and tasked with working through a simulation of Scrum.  This included planning our goals for the overall product, organizing sprints that would result in a production-ready result and presenting that result for evaluation.

I’ve been working on Agile teams for a couple of years now and am a fan of the approach.  One of the most valuable takeaways that I had from the class was knowing to observe the Agile principles before any process.  Scrum (or even Agile) is not a magic bullet that’s appropriate to all projects.  Therefore, you need to remember whether or not your approach is in keeping with the value you’re intending to realize, rather than just blindly following a process.  Some other explicit warnings were, “If you’re not automating you regression testing, you can’t be Agile.”  The same premise goes for controlling your inputs.  Meaning, you need to have that concise and explicit goal, rather than trying to ‘boil the ocean’ and do everything at once.

I’d love to hear any feedback on this post and invite you to share your own experiences with Agile or Scrum.  As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!

Blogs I Follow

And now for something completely different…
 
I’m assuming most people have a set of sites that they check or frequent on a daily basis.   This post is a list of favorites that I have on my feedly app.  I generally sift through these and save some interesting articles to Instapaper for easy access wherever I happen to be.
 
Tech
 
Coding Horror – Probably THE blog that motivated me to switch to software development full time.  Funny and insightful.
 
Scott Hanselman makes the short list of any Who’s Who when it comes to Microsoft solutions.  Posts frequently with either interesting ‘What’s New?’ or other content.
 
Trisha Gee – I had first heard of Trisha during the inaugural HackSummit() conference and her presentation was one of my favorites.  A Java expert and advocate.
 
John Sonmez – I’d first heard about John after taking a few of his courses on Pluralsight.  After following his blog for a while, I took his Create A Blog course and the result is this site.  Daily new content.
 
Humor and Personal
 
Drew Magary – Drew is a writer for several publications including Deadspin and GQ.  We’re about the same age so his posts about parenting and cooking are very relatable.
 
Wait But Why – I ran across this blog a while back.  Posts feature length articles on cool futurist topics like space exploration and AI.  If you read anything on the site, make time for the four part series on Elon Musk.
 
The Art of Manliness – I’ve been reading AoM for a few years now.  Very interesting articles on hobbies, fitness, fashion, traditions and more!  This is the site that got me to drop my cartridge razor in favor of a safety razor.  (Highly recommended)
 
Mr. Money Mustache – Personal finance advice and a must read for anyone considering early (or at least earlier) retirement.
 
The Daily Stoic – A Ryan Holiday blog.  Stoicism has been enjoying some recent popularity and reference.  This is a good resource for anyone interested in the basics or a deeper dive.
 
I’d love to hear any feedback on this list and invite you to share your own reviews or recommendations.  As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.
 
Thanks for looking in!

ServiceNow Istanbul – What’s New?

If it’s not obvious from my most recent content, I’ve been spending the bulk of my time in ServiceNow.  For those of you who don’t know, ServiceNow is an enterprise application platform that is commonly used for its flagship ITSM/ITIL application.  While IT Service Management is its main use, the platform allows business developers to quickly deploy integrations and services in a cloud and mobile ready state with less effort than building from bare metal.

One of the most recent announcements is for the latest major release, called Istanbul.  This latest version passed into general availability this month and has many exciting new features.  I recently attended a webinar that covered the highlights.  You can find the recorded session here.

Automated Testing – This is the piece that ties back into my most recent series on testing.  The automated testing suite in Istanbul is probably the feature I’m most excited about.  The Automated Testing Feature gives developers a native toolkit for building test suites for both UI and server-side unit testing.  Tests can be organized by feature or combined into multiple testing suites for regression testing for future releases.  I’m a fan!

Debugger ‘2.0’ – One of the challenges on this platform is the debugging implementation.  Often, I find myself avoiding the native debugger in favor of logging by hand or using the browser console to detect issues on the platform.

Istanbul restores a debugger tool that was popular in pre-Geneva releases but was turned off some time ago due to functionality issues.  The updated tool runs in its own window and allows developers to add breakpoints specific to them for working with their code.  This means that developers can simultaneously use the same functions while not stepping on each other’s toes with unwanted test cruft.

HTTP Message Logging – For those of us who work with external integrations involving critical business functions, failed event captures in this space can result in unnecessary impact and reduced confidence in your service delivery strategy.  Adding to this is the possibility of finger-pointing between dev groups and a lot of guesswork in troubleshooting the failure.

Istanbul attempts to help with this by breaking out HTTP message logging out of the box and adding it by default.  This not only helps with visibility and troubleshooting of integration issues in production, but development and testing of new integrations.

Email Unsubscribe – One of the common user complaints that come with new platforms is the volume of email that comes by default.  While the platform already allows users to pick and choose what notifications they want to receive, often there’s a disconnect between the actual notification and the setting users might need to change.

One new feature of Istanbul allows developers to add an Unsubscribe link to notifications they send.  This allows notification recipients to opt out of that traffic with a single click in the moment rather than forcing them to log into their user configuration and then remember which notification they’re stopping.

Email WYSIWYG Editor – User experience is often an afterthought or even forgotten when working with a business application.  Part of improving that experience involves delivering content in a more polished manner, rather than just spamming people with walls of text.

While the previous email template editor allowed for markup content, developers were limited to a code only interface, which involves a lot of guesswork in practice.  Istanbul adds a WSYIWYG editor which will allow for quicker delivery of user friendly web-style content in notifications from ServiceNow.

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!

Reading Summary – 2016

Posting book recommendations seems to be a thing when New Years rolls around.  The last time I posted about books, I put together a list of my favorite recommendations.  This time around, I put together a list of books I read over the past year.

Essential ASP.NET with Examples in C# – A bit obsolete.  Vanilla web forms rather than MVC.  However, I did find some useful nuggets around IIS and ASPX page architecture.  Any of you still involved in IIS hosting or legacy support might find some value.

Wherever You Go, There You Are : Mindfulness Meditation In Everyday Life – In depth overview of mindfulness with various case studies and examples or thought experiments in easily digestible form.  A good read for those seeking the value of being present and deliberate.

Richest Man In Babylon – A book on financial health with guidelines packed into parable form.  It’s mostly common sense stuff and a bit repetitive, but still useful.  ‘The 10% Rule’ was most valuable to me.

Clean Code – A classic book on software quality that easily makes most developer’s reading lists.  Some of the most valuable pieces for me were:

Focusing on indentation – The idea that if your indentation is sloppy, you should focus on that before anything else

Boy Scout Rule – Always leaving code better than you found it

Test Driven Development – The principle that tests are always closer to the truth about code’s purpose than comments or documentation

Leviathan Wakes – The novels on which the series The Expanse is based on – I honestly haven’t had a book grab my attention like this in a long time and would highly recommend it to any sci-fi fan. The setting is gritty with enough everyday human concerns to be a believable future state while still having stakes and scope worthy of space opera.

Waking Up – Interesting premises on the nature of the mind, the concepts of self and better living through meditation.

The Analects – A collection of Confuscious’ sayings and one of the core works of Confuscianism, the main idea of which is virtuous living and self development according to The Way.  It’s a decent read but I get the feeling that The Way being discussed is very specific to the author and his students (Upper Class Chinese Nobility)  For the modern reader, The Way may be more subjective but the call to action is not.

The Death of Common Sense – I heard a rumor that this book was an inspiration for the character of Hank Hill (King of the Hill), so I had to take a look.  An indictment of following the letter of the law at the expense of the spirit.

Meditations –  A collection of the writings of Marcus Aurelius and one of the core works of Stoicism.  I’d compare this to the Analects as far as the need for context.  But again, the call to action is definitely not subjective.

Not a long list, to be sure.   This year I’m hoping to double it, but hopefully not just for the sake of quantity.  I think my pile of books to read actually grew more this year.

I’d love to hear any feedback on this list and invite you to share your own reviews or recommendations.  As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

 

Thanks for looking in!

UI Unit Testing with Selenium – Part 4 – Selenium Server

 

Last time, I went over more advanced uses of Webdriver as well as putting together a framework of shared methods which can be hooked up to unit tests. For this last post, I’ll be standing up an instance of Selenium Server on Amazon Web Services and refactoring the test framework to point to that instance for testing.

What is Selenium Server?

Selenium Server is basically a hosted service that can accept and run Selenium tests independent of the actual testing client.  This allows for shared infrastructure that can be accessed by various clients without repeating the provisioning and setup of WebDriver files and other libraries.

For the provisioning of Selenium Server, I’ve decided to try out Amazon Web Services Elastic Computing service.  If you’re curious about AWS and want to take it for a spin, you can sign up for a free trial period that’s currently 1 year!  Information on EC2 and a link to sign up for the free trial is available at this link.

Standing up Selenium Server on AWS EC2

So first, I need a host.  After signing up for my free trial, provisioning an EC2 virtual machine using Windows Server only took a few minutes.

Then, I was able to copy over the Selenium Server JAR file and the Chrome WebDriver.exe.  Both of these can be found at the Selenium downloads page here.

Additionally, since the service is a Java Virtual Machine, I needed to install a Java Runtime Environment located here.

With my host, runtime and libraries in place, it’s time to start the service itself.  This involves a simple command line statement.  Elements show the location of the Chrome WebDriver on the EC2 host and I’ve also created a log file to keep track of any activity.

java -jar -Dwebdriver.chrome.driver=C:\ChromeWebDriver\chromedriver.exe C:\SeleniumServer\selenium-server-standalone-3.0.1.jar -log “C:\\SeleniumServer\SeleniumLog.txt” 

Refactoring the test project

Once the host is available, it’s just a matter of starting the host and telling the framework where it’s located.  This requires the download of an additional NuGet package called OpenQA.Selenium.Remote which gives you access to the RemoteWebDriver class.  Then I updated my Login and InternalLogin methods to use that as the framework’s IWebDriver object instead of the local one.

With these changes in place, my tests passed with flying colors.  While I chose not to run tests in anything but Chrome this time around, adding additional platforms for testing is as easy as adding the drivers to Selenium Server and then updating the DesiredCapabilities argument of the RemoteWebDriver object.

To wrap it all up, I committed my refactor to my SeleniumFramework repo on GitHub.  Please feel free to look at the updated version and pass along any feedback you might have.

Again, I hadn’t expected this series to take as long as it did, but it feels good to bring it to a close with some working code to show for it.  As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!

UI Unit Testing with Selenium – Part 3 – Advanced Webdriver & A Real World Example

Last time, I got into the basics of Webdriver and put together a couple of tests against ServiceNow.  For this post, I’m going to take a look at more advanced uses of Webdriver as well as putting together a framework of shared methods which can be hooked up to unit tests.  This involved going a little off script for the original course, but I think this series might be better served demonstrating application of the actual content rather than repeating it.

The goals that I have for this post will involve creating a new Solution with a Unit Test project as well as a Selenium framework class that can be reused within multiple tests.  Again, I’ll be testing against my private dev instance of ServiceNow, but I think it will be readily apparent how the framework could be extended as needed for other web frameworks.

I began by first creating a new testing project in Visual Studio, called SeleniumFrameworkTests.  Then I added the following tests based on the activities I demonstrated in the previous post.

LoginAsUser
LoginAsSuperUser
CreateIncidentAsUser
CreateIncidentAsSuperUser

I knew I’d want each test to be completely abstracted from the plumbing of ServiceNow, so I kept each test down to three arguments: environment, username and password.  The environment would hold the URL of the instance we’re connecting to.  And the username and password would contain those values for the account role needed to perform the tasks.  Lastly, I created an app.config file to hold the values.

testproject

Next, I created the main framework class called SeleniumFramework.  This framework class would need to include the Selenium and Selenium.Support packages from NuGet.  With that in place, I created the general Login method which accepts the environment, username and password arguments.  Then I copied the login steps from the previous post.  This allowed both the LoginAsUser and LoginAsSuperUser tests to pass.

loginmethod

The CreateIncident methods proved to be a little trickier.  First, each would require it’s own IWebDriver object with a valid login in order to proceed.  It made more sense to create a private method that returns an IWebDriver object for use by the CreateIncident methods.

privatelogin

With that in place, I copied in the CreateIncident steps from the previous post. The CreateIncidentAsUser test then passed but the SuperUser role has a different interface than the base User.  To get that test to pass, I had to create a separate method and tweak the UI names as needed for the test to then pass.

createincident

To wrap it all up, I created a new repo on Github called SeleniumFramework. Please feel free to take it for a spin yourself.   All you’ll need is a demo instance of ServiceNow as well as a copy of Visual Studio Community, both of which are free!

I know this series has taken much longer than I expected. However, I plan to close it out next time with an implementation of Selenium Server, most likely using the above testing project.

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!

UI Unit Testing with Selenium – Part 2 – Webdriver Basics

Last time, I did a quick run-through of Selenium IDE for Firefox and got acquainted with the interface and commands associated with Selenium.  This time, I’m diving more into the meat of the framework and using Webdriver.

Webdriver is an API for that can be used by various languages (C#, Java, Python, & Ruby are some examples) that allows your tests to be maintained and run directly from code rather than using a recorder.  This allows us to take a more programmatical approach to testing rather than relying on the recorder exclusively.

We will be using Visual Studio for this example.  Firefox is supported right out of the box, but IE and Chrome require a special binary to be staged locally in order for those browsers to be used with Selenium.  This (and others) can be located via links at SeleniumHQ.

Since Chrome is my own preferred browser, I’m glad to move away from Firefox and experiment with something a bit more familiar.  I decided to start with rerunning the test that I created using Selenium IDE previously, then build on that a bit.

One feature that I didn’t mention about Selenium IDE, is the export function.  This creates source code in your chosen framework (C#, Java, etc.) from the Selenium markup code created by the recorder.

seleniumexport

One cool thing about the export is that it intersperses the markup within your code as comments.  This can be very useful when retracing what was done in a recording or for general documentation.

First off, I created a C# console project and installed the Selenium Webdriver plugin from NuGet.  With that in place, I’ve added the export from my previous post to a new project to test with Chrome.  My code is below:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace WebDriverDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebDriver driver = new ChromeDriver(@”C:\Libraries\”);
            driver.Navigate().GoToUrl(“https://dev20556.service-now.com/navpage.do”);
            driver.SwitchTo().Frame(“gsft_main”);
            driver.FindElement(By.Name(“user_name”)).Click();
            driver.FindElement(By.Id(“user_name”)).Clear();
            driver.FindElement(By.Id(“user_name”)).SendKeys(“USERNAMEGOESHERE”);
            driver.FindElement(By.Id(“user_password”)).Clear();
            driver.FindElement(By.Id(“user_password”)).SendKeys(“PASSWORDGOESHERE”);
            driver.FindElement(By.Id(“sysverb_login”)).Click();
        }
    }
}

This sample using the export from my previous post results in a successful login.  Now to build on it a little bit and create a test Incident:

            driver.FindElement(By.LinkText(“Incidents”)).Click();
            driver.SwitchTo().Frame(“gsft_main”);
            driver.FindElement(By.Id(“new_incident”)).Click();
            SelectElement urgency = new SelectElement(driver.FindElement(By.Name(“IO:5a33d0ef0a0a0b9b007b906f6c589c57”)));
            urgency.SelectByText(“1 – High”);
          driver.FindElement(By.Name(“IO:3f272c500a0a0b990059c24380a2bc02”)).SendKeys(“Creating a test incident.”);

            driver.FindElement(By.Name(“submit_button”)).Click();

Just adding these few extra lines results in a repeatable New Incident test.

incidentsuccess

It’s easy to start to see how this framework can be used to build a library of repeatable tests to automate QA and regression testing.

Link to the Full .NET API : http://seleniumhq.github.io/selenium/docs/api/dotnet/

As I continue to progress through the Pluralsight course, my next post should cover advanced WebDriver concepts and possibly Selenium Server.

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!

UI Unit Testing with Selenium – Part 1


So, I’m making it through the Selenium Pluralsight course slowly but surely and I’m learning quite a bit so far.

The first part covers a browser plug-in called Selenium IDE.  Available only for Firefox, it’s essentially a session recording tool,  It records what we do in the browser then parses those into commands and then can be played back to act as tests.  To take this out for a spin, I went ahead and installed the plug-in and watched the demo on the course.  Now, we’ll need to find something suitable to test it on.

selenium

There’s a SaaS platform called ServiceNow that I’ve been spending a great deal of time in this year.  Automating testing against this platform from a central host is one of my goals for this experiment.  To test this out, I’ve created a test instance of ServiceNow and a test user.  Also, I’ve installed the Selenium IDE on Firefox so that I can record my session in the platform.

My demo is basically automating a login for my test user.  First I’ll need to create a fresh test case in Selenium.

newtest

Then, I’ll record the steps to the login to get a complete test.

finishedtest

Then I’ll run the test and see if it logs me into the system, which it does.

success

This is just scratching the surface of Selenium and I have more modules in the course to cover.  Next post, I’ll have some additional content from the next module (Selenium Web Driver) and possibly a little more.

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!

UI Unit Testing with Selenium – An Experiment

It’s been a while since I’ve posted.  Part writers block and part outside obligations.  I know you’ve all been despondent and lost in the meantime.  Sorry about that. 🙂

Something that’s a recurring puzzle for me is adapting unit testing to MVC and SaaS solutions.   The challenges from my point of view are that MVC implies a lot of its functionality.  For example, things in MVC behave in very specific manners based on where they’re located or what they’re named.  Also, MVC classes (models) generally don’t have or need default constructors, so a traditional approach of instantiating a class an running business logic is insufficient.

Then, for SaaS solutions, you may not have sufficient access to the plumbing to build your tests directly, so you’re stuck automating a session through the SaaS provider’s interface and (hopefully) capturing the results that you need.  An approach to MVC might look very similar.

Enter Selenium

Either my Google-fu is weak in this space or there aren’t a lot of options for automating tests in this manner.  One framework that gets a lot of mentions is Selenium, so I’m going to take a stab at it.   I’ve found a few good blog resources but also remember that John Sonmez did a Pluralsight course that seems to be right up my alley.

My plan for this week is to watch the course and play around with the framework against a solution or two, then post about the results.  If the path seems promising, I’ll follow up with some additional content.

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!