Tuesday, June 27, 2017

​How to Use CloudApp to Optimize Your Bug Tracking Process

This article was sponsored by CloudApp. Thank you for supporting the partners who make SitePoint possible.

Fast, agile, flexible software development is vital to any modern business — you need to get your products built, tested, launched, and sold — ASAP. Optimizing your development, review, and testing processes makes a huge difference to your speed to market and competitive advantage.

Unfortunately, software bugs and development errors are a way of life — they are unexpected by their very nature. Optimizing for fixing software bugs can be difficult, but it’s not impossible. One easy way to make your bug fixing process smoother and more efficient is to use a cloud based service called CloudApp.

CloudApp — What it is and What it Does

CloudApp is a tool that allows you to easily create, annotate, and share screenshots, GIFs, and screen recordings with others. It works as follows:

  1. You identify something you need to share visually with others.
  2. You capture the image in the most appropriate way — as a static screenshot, a short GIF, or an extended screen recording. These are known in CloudApp as “drops.”
  3. You annotate the image with text, arrows, emojis, lines, and other shapes to add context and information.
  4. You upload the image and annotation to CloudApp’s service and get a link to the image.
  5. You send/share the link to others — they can then access and review the information, make comments, and act on it.

CloudApp — Other Features

CloudApp has several other useful features:

  • Drag, drop, organize and work with many different file types including large files, documents, code snippets, audio, zip archives, and more.
  • Search by image, color, and other visual attributes to quickly locate specific image files.
  • Share securely and control who has access to image files.
  • Integration with Trello (productivity tool), JIRA (bug tracking and development), Slack (communications), and ZenDesk (customer support).
  • Capture from browser tabs (for SaaS products) or native Windows and Mac software.
  • Works across multiple environments — staging, development, testing, production, and more.

Benefits of Using CloudApp in Software Development

As you can imagine, the ability to capture and record from a screen makes bug capturing and reporting much easier.

  • Capture bugs directly from within the app, as they occur.
  • Record exactly what process needs to happen to recreate the bug.
  • Capture error messages or other visual artifacts created by the bug.
  • Add annotations including text and other shapes to highlight the bug and its impact.
  • Share images with other developers to allow team-wide efforts to identify and resolve bugs.
  • Work with developers at remote locations and different time zones.
  • Speed up identification and fixing of bugs.
  • Compare screens and recordings before, during, and after the bug fix.
  • Give access to testers and reviewers to help them capture bugs during various test cases.
  • Don’t just rely on verbal or text descriptions of bugs and their impact.

CloudApp estimates that bug fixes can be up to three times faster when using CloudApp in parallel with a tool like JIRA or Trello.

A Process Flow for Identifying and Fixing Bugs with CloudApp

Here’s how an efficient bug identification, review, and fix process might work using CloudApp with its Trello or JIRA integrations.

Continue reading %​How to Use CloudApp to Optimize Your Bug Tracking Process%


by Paul Maplesden via SitePoint

Grab Our Free Printable CloudApp Cheat Sheet

CloudApp

This article was sponsored by CloudApp. Thank you for supporting the partners who make SitePoint possible.

CloudApp is a tool that allows you to easily create, annotate, and share screenshots, GIFs, and screen recordings with others. It's an app that belongs in every startup's toolkit, making day-to-day communication about the product much easier — whether as part of your bug tracking process, or for brainstorming sessions in Slack. It works as follows:

  1. You identify something you need to share visually with others.
  2. You capture the image in the most appropriate way — as a static screenshot, a short GIF, or an extended screen recording. These are known in CloudApp as “drops.”
  3. You annotate the image with text, arrows, emojis, lines, and other shapes to add context and information.
  4. You upload the image and annotation to CloudApp’s service and get a link to the image.
  5. You send/share the link to others — they can then access and review the information, make comments, and act on it.

We've created a cheat sheet to help you learn how to use CloudApp's features and keyboard shortcuts quickly. Keep it at hand on your computer's desktop or print it out, and you'll be slinging screenshots efficiently in no time. Grab it here:

CloudApp Cheat Sheet

Continue reading %Grab Our Free Printable CloudApp Cheat Sheet%


by Paul Maplesden via SitePoint

The Software Developer’s Guide to Getting a Job

The Software Developer’s Guide to Getting a Job

The following is an excerpt from The Complete Software Developer's Career Guide by John Sonmez. To get the entire book delivered to your inbox, go here.

Every week, I get emails or comments on my YouTube videos from software developers --- some of them quite experienced --- who can't seem to find a job.

I have heard every kind of excuse or reason why they can't get one. Some developers complain that the older developers have made it too difficult for younger developers to have a chance --- that we've taken up all the good jobs. Meanwhile, some developers complain that no one wants to hire older developers and everyone is ageist. Others complain that it has to do with their race, religion, or political affiliation. Still others complain that their skill set is useless, and no one wants to hire a developer who doesn't have experience with the latest and greatest technology.

While some of these arguments may be true --- and, yes, discrimination occurs --- the underlying cause is that these software developers don't know how to get a job. As I'm writing this post, there is a huge demand for software developers. So many positions go unfilled. Yet, many software developers complain about not being able to land a job.

How can this be? How can it be that there are so many vacancies in our industry, yet frequently developers will tell me they have applied for hundreds of jobs and have been rejected by all of them?

The problem lies in not knowing the right way to find a programming job, and I think it's an easy one to solve. In this post, I'm going to give you the best tips and tricks I've learned on how to help software developers get jobs.

First let's look at the traditional approach to finding a job, which I call "the Cookie-Cutter approach".

The Cookie-Cutter Approach

I'll be upfront with you on this one: I really don't like the normal way of finding a job, because it requires so much wasted effort, and it rarely leads to the best results.

However, rather than just skipping to my preferred way of finding a job, I'm going to go over the standard approach of creating a resume, filling out an online application, and submitting your resume that most software developers --- and most professionals in general --- do.

The reason I'm going to start here is that so many software developers are doing this so wrong.

I've heard countless stories of developers blasting out hundreds of resumes in a single day to every single job posting they could find on Monster.com and wondering why they aren't getting any results.

If you are going to take the standard, cookie-cutter approach, you should at least be doing it right. I'm going to show you how.

It's a Numbers Game

First of all, you have to understand that the whole process of blindly applying for jobs, the way most people do, is purely a numbers game. It's just like sales. In fact, you should really treat the whole thing like a sales process.

Create a sales pipeline, and perhaps even use a CRM system like many sales organizations do, to track your prospects through the pipeline. You'll have something that looks like this:

Jobs applied for > Responses received > Telephone screens > Interviews > Offers.

At each stage of the pipe, you should expect only a small number of prospects to make it to the next stage.

For example, suppose you apply for 100 jobs. Perhaps you'll get 30 responses following up with you in some way. Out of those 30, perhaps seven will ask you to do a telephone screen. Out of those seven, perhaps two or three will ask you to come in to do an actual interview. And perhaps you'll get one job offer out of all that work.

If you want more job offers, you can essentially do two things:

  1. Put more prospects into the pipe (apply for more jobs).
  2. Increase the percentage of prospects that make it from one stage of the pipeline to the other.

In other words, you could apply for 1,000 jobs and then get 10 offers, or you could apply for the same 100 jobs and perform better along each step of the way that you also get 10 offers out of it.

To recap, it's either more prospects in the pipe or better flow through the pipe. That's it.

If you want the best results, you do both.

How is it, then, that so many developers tell me they've applied for hundreds or thousands of jobs and still received zero offers? Well, there is some luck involved, but most likely it's one of two things:

  • They are lying, or rather, grossly overestimating the actual number of jobs they applied for.
  • They really suck at applying for jobs. Their percentages of prospects moving from each segment of the pipe is really, really low.

Most likely, it's both. But have no fear. I'm going to show you how to increase both effectively.

Have a Good Resume

First of all, if you are going to be playing the numbers game, you want to have the highest number of prospects making it to the next level of the pipe as possible. One of the best ways to do this is to have a really good resume.

If your resume is crap and you get filtered out at the first step, you are going to be wasting a large amount of time, and your overall pipeline is going to be extremely inefficient.

Yes, a really crappy resume might eventually get you a job, but the worse your resume is, the more jobs you are going to have to apply for in order for the numbers game to work out. I don't know about you, but I'd rather apply for 50 jobs than 5,000 jobs.

One of the first things you should do is to get your resume as polished and effective as possible. I know some people still disagree with me on this topic, but I'm 100 percent convinced the best way to do this is by hiring a professional resume writer who specializes in technology industry resumes.

Yes, a professional resume writing service might cost you $500 or more, but in the end, that is going to be a small investment for the benefit you are going to get.

One of the best ways you can increase the effectiveness of your resume is to have it professionally written and formatted by an experienced resume writer who knows how to write resumes for software developers.

Continue reading %The Software Developer’s Guide to Getting a Job%


by John Sonmez via SitePoint

BDD in JavaScript: Getting Started with Cucumber and Gherkin

BDD in JavaScript: getting Started with Cucumber and Gherkin

By now, everyone has heard about Test Driven Development (TDD), and the benefits that this can have on your product and your development lifecycle. It's a no-brainer really. Every time you write a test for a piece of code, you know that code works. And, what's more, you will know in the future if that code breaks.

Behavior Driven Development (BDD) is an extension to this concept, but instead of testing your code you are testing your product, and specifically that your product behaves as you desire it to.

In this article, I'm going to show you how to get up and running with Cucumber, a framework that runs automated acceptance tests written in a BDD style. The advantage of these tests is that they can written in plain English and consequently understood by non-technical people involved in a project. After reading, you will be in a position to decide if Cucumber is a good fit for you and your team and to start writing acceptance tests of your own.

Ready? Then let's dive in.

BDD vs TDD — so, What's the Difference?

Primarially in the way that tests are structured and written.

In a TDD setting, the tests are written, maintained and understood by the developers who wrote the code they are testing. It might well be that nobody else ever needs to read the tests at all, and that's fine.

In a BDD setting, the tests need to be understood by a lot more than just the developer writing the functionality. There are many more stakeholders who have an interest that the product behaves as it should.
These might include QA people, product analysts, sales, even upper management.

This means that, in an ideal world, BDD tests need to be written in a way that anyone who understands the product will be able to pick up the tests and understand them as well.

It's the difference between:

const assert = require('assert');
const webdriver = require('selenium-webdriver');
const browser = new webdriver.Builder()
  .usingServer()
  .withCapabilities({'browserName': 'chrome' })
  .build();

browser.get('http://ift.tt/ox1Ync');
browser.findElements(webdriver.By.css('[href^="/wiki/"]'))
.then(function(links){
  assert.equal(19, links.length); // Made up number
  browser.quit();
});

And:

Given I have opened a Web Browser
When I load the Wikipedia article on "Wiki"
Then I have "19" Wiki Links

The two tests do exactly the same thing, but one is actually human readable and the other is only readable by someone who knows both JavaScript and Selenium.

This article will show you how you can implement BDD Tests in your JavaScript project, using the Cucumber.js framework, allowing you to benefit from this level of testing for your product.

What Is Cucumber / Gherkin?

Cucumber is a testing framework for behavior driven development. It works by allowing you to define your tests in Gherkin form, and makes these gherkins executable by tying them to code.

Gherkin is the Domain Specific Language (DSL) that is used for writing Cucumber tests. It allows for test scripts to be written in a human readable format, which can then be shared between all of the stakeholders in the product development.

Gherkin files are files that contain tests, written in the Gherkin language. These files typically have a .feature file extension. The contents of these Gherkin files are often referred to as simply "gherkins".

Gherkins

In a Gherkin defined test, you have the concept of features and scenarios. These are analogous to test suites and test cases in other testing frameworks, allowing for a clean way to structure your tests.

A scenario is literally just a single test. It should test exactly one thing in your application.

A feature is a group of related scenarios. As such, it will test many related things in your application. Ideally the features in the Gherkin files will closely map on to the Features in the application — hence the name.

Every Gherkin file contains exactly one feature, and every feature contains one or more scenarios.

Scenarios are then comprised of steps, which are ordered in a specific manner:

  • Given - These steps are used to set up the initial state before you do your test
  • When - These steps are the actual test that is to be executed
  • Then - These steps are used to assert on the outcome of the test

Ideally each scenario should be a single test case, so the number of When steps should be kept very small.

Steps are entirely optional. If you have no need to set anything up at all, you might have no Given steps, for example.

Gherkin files are designed to be human readable, and to give benefit to anyone involved in the product development. This includes non-technical people, so the Gherkin files should always be written in business language and not technical language. This means, for example, that you do not refer to individual UI components, but instead describe the product concepts that you are wanting to test.

An Example Gherkin Test

The following is an example Gherkin for searching Google for Cucumber.js

Given I have loaded Google
When I search for "cucumber.js"
Then the first result is "GitHub - cucumber/cucumber-js: Cucumber for JavaScript"

Straight away we can see that this test tells us what to do and not how to do it. It is written in a language that makes sense to anyone reading it, and — importantly — that will most likely be correct no matter how the end product might be tweaked. Google could decide to completely change their UI, but as long as the functionality is equivalent then the Gherkin is still accurate.

You can read more about Given When Then on the Cucumber wiki.

Cucumber.js

Once you have written your test cases in Gherkin form, you need some way to execute them. In the JavaScript world, there is a module called Cucumber.js that allows you to do this. It works by allowing you to define JavaScript code that it can connect to the various steps defined inside of your Gherkin files. It then runs the tests by loading the Gherkin files and executing the JavaScript code associated with each step in the correct order.

For example, in the above example you would have the following steps:

Given('I have loaded Google', function() {});
When('I search for {stringInDoubleQuotes}', function() {});
Then('the first result is {stringInDoubleQuotes}', function() {});

Don't worry too much about what all of this means - it will be explained in detail later. Essentially though, it defines some ways that the Cucumber.js framework can tie your code to the steps in your Gherkin files.

Including Cucumber.js in Your Build

Including Cucumber.js in your build is as simple as adding the cucumber module to your build, and then configuring it to run. The first part of this is as simple as:

$ npm install --save-dev cucumber

The second of these varies depending on how you are executing your build.

Running by Hand

Executing Cucumber by hand is relatively easy, and it's a good idea to make sure you can do this first because the following solutions are all just automated ways of doing the same.

Once installed, the executable will be ./node_modules/.bin/cucumber.js. When you run it, it needs to know where on the file system it can find all of its required files. These are both the Gherkin files and the JavaScript code to be executed.

By convention, all of your Gherkin files will be kept in the features directory, and if you don't instruct it otherwise then Cucumber will look in the same directory for the JavaScript code to execute as well. Instructing it where to look for these files is a sensible practice however, so that you have better control over your build process.

For example, if you keep all of your Gherkin files in the directory myFeatures and all of your JavaScript code in mySteps then you could execute the following:

$ ./node_modules/.bin/cucumber.js ./myFeatures -r ./mySteps

The -r flag is a directory containing JavaScript files to automatically require for the tests. There are other flags that might be of interest as well — just read the help text to see how they all work: $ ./node_modules/.bin/cucumber.js --help.

These directories are scanned recursively so you can nest files as shallowly or deeply as makes sense for your specific situation.

npm scripts

Once you have got Cucumber running manually, adding it to the build as an npm Script is a trivial case. You simply need to add the following command — without the fully qualified path, since npm handles that for you — to your package.json as follows:

"scripts": {
  "cucumber": "cucumber.js ./myFeatures -r ./mySteps"
}

Once this is done, you can execute:

$ npm run cucumber

And it will execute your Cucumber tests exactly as you did before.

Grunt

There does exist a Grunt plugin for executing Cucumber.js tests. Unfortunately it is very out of date, and doesn't work with the more recent versions of Cucumber.js, which means that you will miss out on a lot of improvements if you use it.

Instead, my preferred way is to simply use the grunt-shell plugin to execute the command in the exact same way as above.

Once installed, configuring this is simply a case of adding the following plugin configuration to your Gruntfile.js:

shell: {
  cucumber: {
    command: 'cucumber.js ./myFeatures -r ./mySteps'
  }
}

And now, as before, you can execute your tests by running grunt shell:cucumber.

Continue reading %BDD in JavaScript: Getting Started with Cucumber and Gherkin%


by Graham Cox via SitePoint

Take Our New Course: Get Started With Elixir

Smoothly

Smoothly

'Smoothly' is a WordPress theme with a parallax scrolling Landing Page layout option. Featured here is the layout demonstrating lovely big imagery, tons of color and clear typography. I can see this being used to showcase a range of several products below each other - each linking to the WooCommerce sales page or even link out to an external store like Shopify. Nice touch with the typewriter effect intro text highlighting your main sales points. Lastly, great to know the WordPress theme comes with Visual Composer page builder, valued at $34.

by Rob Hope via One Page Love

Code a Real-Time NativeScript App: Geolocation and Google Maps