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, September 23, 2023

Should we NOT do contract testing on API’s and Messages?

 

Welcome readers on this interesting article. If you are a software QA/SDET professional, and interested or involved in API testing, then the term “Contract Testing” may be familiar with you. Or, you may have heard about the term “PACT”, most famous tool for Contract Testing. Here, I am not going to include a definition of Contract testing, neither I will explain how to use “PACT” tool in detail, I will focus only on the important use cases where we can apply it.

Avoiding surprise chaos between teams:

If you are part of an organization who are heavily using micro-services architecture to design their reusable common business components, then you might have encountered chaotic scenarios when one department made some changes to a micro-service, either by mistake or to enhance it for some specific requirement, may have run their department specific unit and integration tests, and published the service (dev-deployment, not to production) without thoroughly assessing its impact on other departments who are consuming that service by using the reusable component. If the concerned team forgot to inform the other consumers (departments), then it can severely impact the development and testing of other departments, as they will be surprised by the unexpected change. If for some reason, the issue slips through other teams, it could create bigger problem in production.

So, this type of services is a prime candidate for Contract Testing. All consumers of these type of services should mutually define a set of consumer interactions in an open API contract, based on business requirements and user journeys that they are expecting from the provider service and keep a single source of truth. Ideally, this contract document should be placed under version controlling.

Integrating third party APIs or providing a consumable service to other businesses:

Let’s say, you have an online retailer website, and you want to integrate a third-party payment gateway. In this situation, you should seek a consumer contract from the third-party provider and ensure that you are interacting through the predefined interactions and providing right responses to the third-party payment gateway for their consumption. Additionally, you can create a consumer contract and share it with the third party, so that they can ensure that they are sending payment acknowledgements in conformance with the given contract.

Faster dev-integration testing of APIs and messages:

Contract testing (using PACT tool) once integrated in CI/CD pipeline will significantly shorten the build time for API’s and messages (MQ/Kafka etc.), as it replays the provider test for each service in dynamic stubs and perform conformance check against the consumer contracts. Thereby, it identifies the integration issues faster. Remember, leveraging contract testing should not give an excuse to avoid end-to-end functionality testing of the services or messages completely. Rather it will help in optimizing the end-to-end functionality testing, test designers can only focus on the business-critical services after running a risk assessment exercise.

Conclusion:

The ultimate need of contract testing is context dependent; it is beneficial for above use cases. These are some important considerations for Agile/Lean teams:

  • it is not a sensible decision to enforce contract testing for each service/message, rather it should be done for most critical/important services.
  •  training and adoption of contract testing should be done at the very beginning of the project, otherwise it will be challenging.
  •  Contracts generated by “PACT” tool should be reviewed by a duo of Business Analyst and a Technical SME to ensure that it specifies the consumer interactions in conformance with the business requirements. Without adequate review process, it may happen that the contract test passes but it does not conform to the business requirements.
You can now clone the below repository and start learning about how to do automated contract testing using Java, Pact, Junit and Spring Boot:

https://github.com/susnigdha1/LearnPactContractTesting 

Thank you for viewing this post.


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 ...