Showing posts with label QA. Show all posts
Showing posts with label QA. Show all posts

Wednesday, May 1, 2024

Interview preparation series Java: Are you not getting interview and/or coding test invites?

Are you not getting interview and/or coding test invites? 

These days it is pretty common. So, first of all, I would advice, consider reviewing your CV/Resume. Kindly do not exaggerate listing your skills, by copying from others. The technical panels are smart to judge how much truth is in it. Focus on elaborating on your role, job duties and some of the key challenges that you may have faced in the projects that you have been a part of, your professional achievements and certifications. My advice to freshers is they should put focus on their academic projects, and challenges faced in executing them and the certifications.

Now, if you get an invite for interview/coding test with a very short notice, how much prepared do you think you are? 

If you are among a small set of lucky candidates who received the interview/coding test invites, you still are in a competition.Thus, you need smart preparation to compete fairly, which includes a lot of coding practice on a regular basis. Below are my recommendations for preparing well:

Java:

1. Thoroughly study and memorize the functions under java.lang.Math package. You may ask why? Because over past 10 years, most of the coding tests ask require you to solve either a mathematical or a numerical problem. So without having a solid command over Math package, you can't solve most of the problems.

2. Focus on Java 8 onward features and coding styles. These days Java 6 style coding is old-fashioned and the industry trends follow Functional programming, including asynchronous functions (lamda), bi-functions and its use in stream() operations. In some of the online coding tests, you will be asked to only write the missing part of the code in a method. If you are not familiar with the aforementioned concepts, then you may miss an opportunity to score, because sometimes the asks will be very simple, but by the time you realize it, the opportunity will turn into a lost opportunity.

3. Thoroughly study and memorize the functions under java.util.Stream package. You may ask why? Again, most coding tests moved to Java 8 and above syntax. So, the expectation is to solve problems using stream() operations. Practice using Array, Strings, charArray, collections, (i.e. List, Set) and map. The idea is to determine whether you are familiar with the java data-structure and collections framework or not, and if you can apply it whenever appropriate in a programming context. 

4. Bitwise operations, sometimes most neglected by the students and professionals, however Bitwise operations are very important to master if you are a Java developer or going to become one. Brush up the bitwise operations and practice the number conversions including Octal, Hexadecimal and Binary numbers, bitwise shift operations, XOR operations. This topic always finds its place either in the online coding test or in the interview process.

5. You might have learned about Data-Structures: Stack, Queue, Dequeue, LinkedList, Tree etc. Do you know when to use it to solve a programming problem? Have you tried using the built-in data-structures in Java in any of your academic or professional code? Being honest with yourself, if you feel you are not comfortable with applying Data-structures, then revisit the concepts, look out for programming practice problems and set out sometime everyday to do practice for at least an hour.

6. None of the programming is complete without its File operations, and Java is not an exception. So please read through java.io.File package, memorize the functions and its parameters, and understand when to use which technique to read and write to files. The interviewers are sometimes more interested in understanding how much you know about the file operation efficiencies.

7. Without DB connection, a standalone program does not deliver value. So, you need to master JDBC connection and Spring Boot alternatives. In the interviews, you may expect questions on DB operations with respect to microservices development. So, getting yourself familiar with MySQL, Postgre, MongoDB will help a lot.

8. Exception handling and debugging is an integral part of any programming language. So, you should be able to tackle questions around efficient ways of handling errors and exceptions, including raising custom exceptions.

Sunday, April 14, 2024

Pocket guide on popular IT job roles - for students and professionals

1. For Developer and QA roles, while in college, take your studies seriously. Don't bunk your mathematics, automata theory, computer architecture, operating systems, Unix, Could computing, DBMS and data structure lectures. Learn and understand the core concepts and its applications. Even after finding employment, don't forget these subjects and do some revision every year to keep your core knowledge solid in these areas. Reason behind is, the market is competitive, you may be asked to sit in online exams for screening. If you don't prepare, you shouldn't curse a prospective employer.

2. If you don't like coding at all, during your college, you need to master these subject areas: Systems analysis and design, Software Engineering and Agile practices, Cloud Computing Project Management, DBMS, and Management Information systems. Additionally study Basics of Management, Organization Theory, Business Communications and People Management. You should focus on roles like Business Analyst, Scrum Master, Software Auditor, PMO, Project manager, Digital Creator. Additionally, if you have good mathematical (Linear Algebra, Calculus) and statistical background, then consider Business Analytics and Data Science. You need to master at least MS Excel and its statistical formulas to progress. If choose this track then you need to improve your coding skills. R programming is simple, whereas Python with its data-science packages will take much longer to learn.

3. If you like coding, then master at least two object oriented programming languages, say Java and Python, or C#.net and Python. Also, learn JavaScript and Groovy. The rational behind is, full-stack developer roles needs good programming skills. Practice, practice and practice writing code using different IDEs, example Eclipse, Intellij, Visual Studio Code, Atom etc. Always refer best coding practices, and do self review of your code against those standards. In your local developers machine, use SonarQube or similar tools to check your code. Don't skip writing unit tests and master test driven development. This process also demands learning git, maven, Gradle, Jenkins and Docker containers, knowledge on Jfrog Artifactory and similar tools that helps to mange binary versions among releases. And these days we can't think of doing development without including build and CI tools. If development is your passion then you must sweat a lot in writing the right code, unit testing it well with all possible scenarios, meeting timelines and quality checks. Solve programming puzzles available online in sites like Topcoder, Coderanch, Hackerrank

4. If you like testing, then don't just do selective reading of articles from the internet. You must read the lovely books which reflects the research and thoughts went into establishing testing and quality assurance as an important branch of software engineering. These initial books written on test automation still motivates a lot of QA professionals in finding better ways to organize and optimize their testing efforts and automation strategies. Your entire computer science study comes to life when you join as a QA professional to a project and experiences the e2e SDLC or Agile life-cyles. You need at least following skills to succeed, irrespective of what career level you are in:
  • Analytical ability and problem solving
  • Comprehension and proofreading
  • Inspection and review
  • Ability to quickly absorb functional domain knowledge
  • Ability to identify and quantify risks
  • Identifying and deriving test scenarios
  • Constructive debate and negotiation skills (part of overall communication skills)
  • Identifying test data requirements and finding/suggesting ways to acquire it in adequate quantities before test execution phase (in simple words should have good knowledge on TDM (Test data management process)
  • Test infrastructure identification, setup and management
  • Test driven development and automation first approach in agile
  • Defect logging best practices and defect lifestyle management using tools like Jira, ALM
  • Optimizing test design at per quality expectations and delivery time
  • Optimizing test execution using techniques like prioritizing test based on risk, coverage, functionality, cross-cutting dependency etc. Leveraging automated test execution (parallel test execution preferred) through continuous integration platform
  • Error and exception log analysis skills to narrow down to potential root cause. Example CI/CD logs (i.e. Jenkins), batch/shell job execution logs, DB logs etc.
  • Good communication and presentation skills
  • Self-management (i.e. self-organizing, stress management, time management etc.)
5. Identity Management, System Admin (including Cloud), DevSecOPS, Cyber Security: If you are a computer science student and are interested in these roles, you should focus on subjects like Digital Electronics, Computer Hardware and Networking, Unix Operating Systems, Cloud computing, Unix Administration, Windows Administration, Computer Security, Cyber Security, Ethical Hacking, Containerization and orchestration (including networking, ingress, administration), Virtual desktops administration and management (i.e. VMWare, Microsoft Remote Desktop Environment, Citrix etc.). But never undermine the mathematics lectures which equips you with important concepts of calculations. Besides, you must learn how to do Shell scripting in Unix, windows scripting in Powershell, Groovy or GoLang scripting.

If you are a professional in these areas, then stay relevant with latest technologies and skills. Do self-retrospective to identify areas you must focus on, put up a plan and stick to it until your goal is achieved. 

Thursday, March 28, 2024

Image recognition based test automation - practicalities

In anticipation of readers time, keeping this post short and simple. Just sharing my experiences with image recognition based automation.

My first encounter with SikuliX was in early 2013. That time it was pretty new, and it used to serve the purpose during test automation, where there was no other means to mimic user actions on the application. The best part was, it used to recognise images based on similarity factor. Lot of time has passed since then, there have been significant development of OpenCv, and numerous new tools been to market.

My second encounter took place in 2017. I supposed to perform some visual testing and also need to validate some images within pdf files. I used Java and OpenCv to achieve the test objectives. OpenCv is used by SikuliX internally to recognize images. But one thing I must admit, learning curve of OpenCv with Java is much longer than with Python. For people without image recognition background, it is tough to master this tool in its raw form. I picked it up because I need to run these tests in headless mode and SikuliX didn't satisfy the criteria.

My third encounter with image recognition based automation was when using Test Complete tool in 2018. It was not as efficient as SikuliX, since the images were searched pixel-by-pixel. Given same test environment setup, it used to work fine, but with different screen resolutions the flakiness starts.

Most recently, I supposed automate an application running on Citrix, and I tried UiPath computer vision. They offers many cool features, like anchors, which works as referential identifiers. During script recording once you select an UI field, it will start suggesting anchors if it can't identify the image uniquely. It will automatically store the images in a repository, saves lot of manual efforts, compared to SikuliX and Test Complete. However, there are some drawbacks. Example, selecting a value from a multi-select listbox. You need to capture individual items, and it gets stored with its Region details. So, unlike SikuliX, you cannot identify an item based on text. So data parameterization is not possible in this case.

At last, I would say SikuliX still have the upper hand, in terms of its simplicity and ease of usage. I have been using the latest version, the actions are performed very fast than earlier, and often I need to put waits to slow it down.

Note: I professionally never used EggPlant tool, only used for training purposes long ago.

Saturday, July 29, 2023

How do we sustain in Software Test Automation career?

I am sure that this question often strikes every test automation professional, irrespective of their experience level and skills proficiency. So, in this blog, I am going to do a deep dive with you to share the industry experience which I have gained, and that you can easily relate with your experiences.

The rise and transformation of test automation roles:

From around year 2002, Software Testing as a profession got significant acceleration in India. And within few years, the market demand for Test Automation professionals risen scrumptiously. Popular testing tools of that decade was Quick Test Pro, WinRunner, Silk Test, Rational Robot, SoapUI, Rational integration tester and Ruby on rails. I am not covering ETL test automation tools in this blog, as I do not have practical experience with any of those tools.

Nevertheless, Microsoft Excel based macros and VB Scripts were very popular those days, mostly used for some windows based repetitive tasks automation, including manipulation of Databases. PERL and Shell Scripting provides similar capabilities in more secured Unix/Linux/Solaris platforms.

Many training centres emerged across India, to utilise the opportunity to upskilling a mass and make huge profits out of it. Those days, all training centres used to conduct classroom trainings, some even offered placement assistance. Many who could afford such trainings those days, got benefitted either by switching to new role or by securing a new job. These days, the traditional training centres evolved too, offering hybrid trainings (including classroom, virtual, offline), but now they are facing direct competition from more organized Online training platforms and free training vlogs available on the internet.

In that decade, many did certifications in QTP, WinRunner, Silk Test and RFT tools. Whoever did the certifications earliest, mostly got benefitted.

So, what is challenging our sustainability in test automation roles?

In simple terms, the technological advances in electronics and semiconductor industry, coupled with substantial advances in Cloud computing, mobile platforms, AI, ML, IoT, Responsive Web, Single page/React applications, and new generations of high-speed internet, opensource tools has been destabilising our careers over the past decade, say 2013 to 2023.

Well, one might debate, that the technological advances have impacted all types of job roles, and human lives. Absolutely!!! Our lives have transformed to Digital; Quality Assurance and Test Automation are directly responsible to maintaining and raising the quality of our Digital transformation journey.

Between 2002 – 2012, many organizations used to conduct trainings on test automation tools, beside other technologies, for their employees, and it was optional to participate. They did use to conduct some skill-based exams, offering a certificate to their employees whoever scores 72% (for example) or above. Since, its optional, only people whoever was serious in building a career out of it or who want to be a future manager, were the only participants. In that decade, most roles demanded a manual tester, who can do automation if needed.

From 2012 onward, the optional training started becoming mandatory, and they started featuring in the career paths, yearly learning goals and performance appraisal discussions. From 2015 onward, many organizations revamped the role of manual testers, by upskilling that population to Automation Tester roles, who can perform manual testing if required. In this period, we mostly transformed from using Excel based test data sheets to BDD Examples, API driven data (JSON, XML, and recently GraphQL), Configuration based data (Properties files) etc. Many of us were tasked with doing complex test automation's, for example Mainframe applications, PDF files, image recognition and comparison, Big Data, running Unix batches part of integration test and reading console logs etc.

From 2020, the automation roles now demand knowledge and experience of CI/CD tools (GitLab’s, Jenkins, TeamCity, Terraform, Ansible, Ant, Docker, Kubernetes, Azure/AWS), deployment, Elasticsearch backed log server. That means, an automation tester who can perform DevOps tasks too.

Additionally, introduction and rise of new automation tools (mentioned below) started challenging the test automation professionals who spent most of their career with UFT (QTP), RFT, Selenium (IDE, 2.0 or 3.0) and Silk Test to upskill in these tools, to sustain and stay relevant in the job market.

  • Open source: Playwright, Cypress, WebdriverIO, Puppeter, Selenium Webdriver 4.0, PyTest, Robot Framework, RestAssured
  • Licensed tools (Including SaaS offerings): Copado Provar, AccelQ, Tricentis TOSCA, Test Complete, Ranorex, Katalan Studio, Karate
  • Test Infrastructure providers: BrowserStack, SauceLab, LamdaTest

Accompanied by the language antagonisms Java, C#, Python, JavaScript, and TypeScript.

For hardcore techies, who are having 12+ years of experience, there are other additional challenges to deal with in order to sustain, managing an agile or e2e test automation team, preparing and implementing test strategies, enforcing design patterns and architectural decisions, code reviews, mentoring, managing conflicts, test environments, test data, test logging (Elasticsearch, New Relic), test metrics and test reporting.

Finally, what actions would help us to sustain?

  •  Positive attitude and openness towards learning.
  • A systematic approach, balancing our life priorities and managing at least 4 hrs a week for our personal skills development and practice, with devotion.
  • Taking advantage of our organizations provided/supported learning platforms to identify, register and complete relevant training.
  • Earning digital badges
  • Keeping an eye on market relevant certifications, and earning those
  • Getting accustomed to NLP based machine learning algorithms and trying out tools like ChatGPT
  • Build skills in at least one RPA tool (UiPath, Microsoft Power Automate etc.)
  • Finally, mastering JavaScript. What??? Yes, you read it right. If you master JavaScript, all these tools will become easy for you to learn: Cypress, Playwright, WebdriverJS, WebdriverIO, Test Complete and Tricentis TOSCA.

 

Test Automation Strategy for Oracle Forms application running in Citrix servers

  Context : There are many product based applications developed using Oracle Forms and Java thick-client architecture, and most of them are ...