Tuesday, October 31, 2017

Big List of Naughty Strings

Everyone knows the importance of test data while testing. A test case supported by ‘smart data’ results in uncovering useful information about product’s behavior.

While doing functional testing, most of us deal with text boxes and other input types, where a user can enter data that goes into the system. A dangerous or invalid data has potential to result in errors or unwanted behavior of the application. Please take a look at the Big List of Naughty Strings which is a list of strings that have a high probability of uncovering issues when used as user-input data. By using these strings, you must find out if your application is able to handle weird/invalid data.

Here's the link to access to the list: https://github.com/minimaxir/big-list-of-naughty-strings

Usage:
blns.txt consists of newline-delimited strings and comments which are preceded with #. The comments divide the strings into sections for easy manual reading and copy/pasting into input forms. For those who want to access the strings programmatically, a blns.json file is provided containing an array with all the comments stripped out (the scripts folder contains a Python script used to generate the blns.json).

Happy Testing!

Tuesday, October 3, 2017

Ideas Successful Testers Practice Everyday


The importance of testing in the software development lifecycle is changing as we’re seeing more and more management inclination towards getting their software, from just only tested, to being tested thoroughly. This implies that there’s a lot more that is expected from testers nowadays. A tester’s life, thus, is seeing many more challenges than before and one of the biggest challenges is to make sure that improvement happens continuously to meet the increasing and ever changing demands of the industry.

Crafting your career in software testing is a big challenge. To continue to learn, to better yourself in your career you have to figure out where to focus your skills. You need to figure out what skills are needed for a particular job and develop a toolkit of skills that allow you to succeed. Very few schools, colleges or universities teach about testing. Self-studying is challenging and there’s a lot of conflicting information on the Internet. Therefore, gaining knowledge and advancing your testing career can be much harder than in other careers. Here are some general principles to consider while developing your career in testing.

Continuous Learning

Continuous Learning is the minimum requirement for success
- Brian Tracy

The best way to learn is to jump in. Create a career path. Find mentors. Research ideas and skills. Expand your knowledge by interacting with the local community of software development and testing. Your career is what you make it. Set goals for yourself and continue to learn.

Here are a few ideas and resources on how you can craft your career path:

Skills For The Future

First and foremost, you need to have the clear fundamentals. Testing has evolved enormously  over last two decades and there’s a lot being discussed, experimented and proved in this discipline. It means that there’s a lot to learn. Having strong foundations in a subject area has helped professionals in all fields, and testing is no different. There are many great resources available online to learn different testing theories, practices, tools, and below are few good references:
Below are some good testing articles and blogs which you can subscribe to and keep up-to-date with new developments and theories in the field of testing:
Learning should never stop. It must be an ongoing endeavour. Continuous learning is about expanding our skill-sets in response to a changing environment and new developments. The more we’re able to know and the more skills we acquire, the more value we can offer to our employers, friends and families. Many people share their knowledge gathered from real experiences in the form of blog posts, articles, forums, webinars, videos, and tutorials. Testers should always keep themselves up-to-date with the latest advancements in the field of software testing, and in the software engineering space.

Here are some of the many benefits of continuous learning:
  • It allows us to respond to ever-changing demands by getting timely feedbacks from peers, experts from the community, etc.
  • Builds competence
  • Competence leads to confidence
  • build knowledge base to make well-informed and educated decisions

Developing Efficiencies Through Specialisations

Once a fundamental foundation has been set up, one could focus on specialisation. Identify one thing in testing that you’re good at and work to further your expertise on the topic. For example, anyone interested in evaluating performance of the application can think about focussing on various techniques and tools around performance.

Moving With The Testing World

The technology world is seeing lots of changes as new technologies keeps emerging. The need to test software, with the changes in underlying technology, also change with time. One has to keep them up-to-date with latest trends in order to understand these changes. One can look towards learning exploratory testing, coding, modelling amongst many more. Also, there are many examples of testers taking inspiration from many sources like science, philosophy, etc.

Be Curious

Curiosity is something that can be nurtured and developed. With practice, we can harness the power of curiosity to transform everyday tasks into interesting and enjoyable experiences. As a tester, we must be curious about what’s happening in software lifecycle and how it works. This will lead our mind to unearth some great ideas and thoughts. For example, curiosity about the software design may enable a GUI functional tester to suggest the possibility of various other types of testing in order to make the software it stable and robust.

Share And Discuss Ideas And Concepts

Many people share their knowledge gathered from real experiences, in the form of blog posts, articles, forums, webinars, videos, and tutorials. Like every other professional, Testers too, should keep themselves up-to-date with the latest advancements in the field of software testing, and in the software engineering space. There are many ways to engage in learning. We can learn by sharing our ideas and thoughts:
  • With fellow testers (mostly within the team) - they may have different views/ideas about the problem. Solution brainstorming sessions can prove to be a good way to discuss on the various solutions that may exists for a particular task in hand and deciding upon which solution suits best based on suggestions from peers/colleagues. 
  • Within the organisation - every project has some common problems. Understand how others may have solved a particular problem you are having.
  • With external community - not only teams across projects, but teams worldwide faces some common challenges. If you have a solution for a particular problem, do not hesitate in sharing it with the rest of the world. You can do it via blog posts, writing in testing magazines, attending to questions in online forums, etc.

Practice Various Test Techniques As Much As Possible

There are multiple ways to solve a problem and this is true for testing too as various test techniques can be used to achieve a particular test objective. Possessing knowledge of various test techniques may enable us to think which technique suits better considering all the available constraints at a given time.
  • Rapid Software Testing classes, by Bach and Bolton, emphasises various test techniques a tester could use under different circumstances. 
  • The Weekend Testing community provides good opportunity to learn and practice test techniques along with fellow testers across the world.

Learn Effective Communication

As part of team, we encounter people with different roles, Product Owner, Business Architect’s, the developers, etc and the first and foremost thing is to understand their role. The better we understand the other person or the role, the more we will be able to communicate and gain confidence in our abilities as testers along with their confidence in us. A tester’s contributions should be focussed and relevant. Understanding another member of the team will enable us to speak in the terms they are most comfortable with. Identify the key stakeholders and win their confidence.

Communication is what makes a team strong
- Brian McClennan

Active Listening

There are many aspects of communication. When you communicate, the words, the tone, the way of speaking, and your body language can all be interpreted in communication exchanges. When you are actively listening, you should be aware of your body language and state of mind. Be open to listening to feedback and the other person’s point of view. When we disregard the others involved in a conversation for the point we are trying to make, we can often lose an opportunity, or a chance to make a difference.

Learning By Example

Long ago as a tester, I was part of a team responsible for performing functional testing for an e-commerce website. Due to my expertise with testing various e-commerce applications, I observed a few things that could be added to the requirements to make the product better. As a diligent tester I raised them as requirement bugs and they were quickly rejected. Maybe they didn’t like my contributions, or maybe there was another reason, but I was heartbroken because I tried to help make the product better.

Years later, I was in New York attending a leadership session where I learnt active communication has more probability of success than passive communication. Active communication starts with active listening, where you make a conscious effort to hear not only the words that another person is saying but, more importantly, try to understand the complete message being sent. Most of the time the communication is less effective because of poor listening skills of people involved in conversation and thus it makes it a very important skill to acquire. Here’s a video that explains the importance of active listening.

In my case above, I realised that if I had taken the missing requirements to the Product Owner asking for their input, listened to her and then engaging in a discussion, there would have been a better chance of getting the missed requirements addressed than only filing the requirement defects alone.

Verbal Skills

Effective verbal skills is an important and necessary skill for a tester. One challenge in communication can be the inability to express an idea to a group. Convincing others to discuss a potential idea can be a problem at times if communication is poor between members of a team. A communicator needs to be persuasive and express an idea effectively. The first rejection of an idea is not the end of the world. We should find ways to convey an idea differently for different audiences. Here are a few suggestions:
  1. Make the message crisp and understandable. Start with a meaningful headline or sentence that informs your team members.. If there is interest after the initial introduction of the topic, proceed with the details.
  2. Summarise how your idea will add value to overall product.
  3. If you have reference materials, share those. By sharing references, you’re enabling others to think more about how the idea or topic was derived, and your own thought process.
  4. Be open to listening to other perspectives on the topic. As we expect others to listen to what we have to say, we too have to display patience and listen to ideas from other members of the team.

Being A Collaborator & Always Be Collaborating


Alone we are smart. Together we are brilliant.
- Steven Anderson

In today’s world, collaboration is key ingredient for all kinds of professionals. The members of cross-functional teams are formed across geographies, bringing together individuals from different cultures, skill-sets, and expertise. They’re all aligned to work together to a common purpose to achieve business benefits, and the only way to succeed is through collaboration. As a member of the team, a tester must collaborate with different stakeholders, peers, including developers, to further business goals.. I will use a very recent example that I have witnessed to demonstrate the true essence of collaboration.

A Collaboration Example

For testing a middleware piece of a software ecosystem, two testers were inducted into a team that had a “Product Owner”, a “Scrum Master”, and 6 developers along with few other stakeholders that represented the consumers of this middleware. These testers were smart and knowledgeable. After being on the team for more than 2 weeks, I heard those same testers complaining about challenges they’re facing. The biggest one was lack of support. They felt their results were not as effective as they could have been because they were lacking support from the other team members. Some of the examples that were cited to me included: not being able to understand the architecture of the system under test, and not being aware of the latest design changes happening.

After reviewing various incidents that took place, we realized there was lack of understanding of a common goal of high software quality. It was decided that we (testers) have the responsibility to encourage the whole team to understand the value of this common goal and also to reiterate the approach towards it. After several rounds of formal and informal discussions, we started to observe huge differences in the way team was working. From notes being exchanged, to brainstorming the requirements, it was clear that collaboration was working more effectively and the team was seeing the benefits.

Sometimes we’re in a situation where our peers, or stakeholders, or the whole team are in different geographies. To some, collaboration may seem a bit challenging in this situation. Because of the advances in technology we are able to do synchronous as well as asynchronous collaboration.

Spence identifies seven rules for all collaboration:
  1. Look for common ground: find shared values, consider shared personal experiences, pay attention to and give feedback, be yourself and expect the same of others, be willing to accept differences in perception and opinions.
  2. Learn about others: consider their perspectives and needs, appeal to the highest motives, let others express themselves freely. 
  3. Critique results, not people: do not waste time on personal hostility, make other people feel good, avoid criticism and put downs.
  4. Give and get respect: show respect for others' opinions, be considerate and friendly, put yourself in the other person's shoes, be responsive to emotions, speak with confidence but remain tactful.
  5. Proceed slowly: present one idea at a time, check for understanding and acceptance of each idea before moving on to the next. Speak in an organised and logical sequence. 
  6. Be explicit and clear: share your ideas and feelings, pay attention to nonverbal communication, speak clearly and make eye contact, select words that have meaning for your listeners.
  7. Remember the five "Cs" of communication: clarity, completeness, conciseness, concreteness, and correctness.

Adapt With Change

Nothing gets better by chance, it gets better by change
- Jim Rohn

Most testers start their career with a basic knowledge and then learn with experience. A smart testers always thinks about what is relevant to the current project or the problem at hand. If there are changes due to requirements being updated or discoveries being made in the development process, they adapt. Being flexible with a testing solution or learning new skill sets to support changes allows for a better understanding of the work necessary to complete, a team’s, or a company's goals.

Sometimes a tester can only do so much to move the process forward when changes are out of your hands, and you do the best you can to understand the requirements. You have to trust that your team will also adapt, while trusting other team members, and help you achieve goals that allow for a quality product, or application.

From a tester’s perspective, let’s take a look at what can change and how a tester can cope with these changes:
  • Requirements - Discuss with product owner about what’s being changed and it’s impact. This means that some tests will have to be updated, or added, and a tester should try to meet the needs of the requirements as quickly as possible.. 
  • Scope - The testing effort should be revised when project scope changes. Project timelines should be updated accordingly. Accepting a change in scope could mean changing the testing approach for a feature, or a project, and adjusting to the new scope. 
  • Timelines - If the project timeline shrinks while the scope remains same, a tester must raise the risk, in advance, of not being sure if he/she will be able to complete testing on-time. At the same time, a tester must also think of ways to mitigate the risk to the software delivery schedule. One example could be to do targeted testing, limit the testing scope to only the features being release, or use a testing method that would decrease the amount of documentation necessary to test. 
  • Team Members - Knowledge is lost with team members, hence appropriate efforts must be put into place to retain the knowledge. Some of the examples of appropriate efforts are: 
    • pairing with team members who are leaving the team 
    • create an online document, like wiki, which shares all the team's knowledge in a central location 
    • create a roll-off strategy for the team member that is leaving 

Be Supportive & Open

Being open and receptive to suggestions, as well as opinions from others can change the way we think or work. It can enable us to think more deeply and generate more relevant, meaningful ideas ourselves.
  1. With any problem at hand, think about different ways of approaching it and offer any feasible ones. You don’t know which one might be more suitable for someone’s situation. The ideal way is to call for a team discussion and ask for feasible solutions. Looking at all the solutions together, debating on them and then identifying the most suitable. It is a key collaboration and communication goal to come to an agreement on an approach to an issue. 
  2. Encourage all team members to share ideas. 
  3. Always appreciate others for sharing ideas and opinions. Create an environment where people feel enabled and willing to cooperate with their teammates or community. A “thank you” email, once you receive a valid suggestion or solution from a teammate, will help create such environment. In my team, we have designed a template for a KUDOS card which anyone can print, sign personally and deliver to someone’s desk..
  4. Help your team to review, select, and implement ideas the group agrees upon. 

Ideator

In today’s world, sometimes, the old and legacy processes don’t work, or they aren’t as effective as they’re expected to be. A team should constantly produce and experiment with new ideas in order to make tasks more result oriented. This culture of ideation starts with curiosity and by asking questions. Let curiosity rather than ego, ask the question. Framing the question in a positive, suggestive manner can lead to answers instead of roadblocks.

The culture of the team should encourage experiments. Experiments are just that, experiments. They should be allowed to have room for failure and modifications. If we discourage someone when the experiment doesn’t meet expectations, the culture of ideation is lost, and the team doesn’t learn or grow and continue to refine their ideas and practices.





References:

● Spence, Muneera U. "Graphic Design: Collaborative Processes = Understanding Self and Others." (lecture) Art 325: Collaborative Processes. Fairbanks Hall, Oregon State University, Corvallis, Oregon. 13 Apr. 2006.
https://www.pgi.com/blog/2014/11/types-of-collaboration-synchronous-and-asychronous/
http://www.satisfice.com