If you decide not to design some parts of TAF at the very beginning, you are guaranteed to have HUGE problems in the long run. Do not deceive yourself by thinking that the future is far away. Issues that stem from poor design can turn out to be nasty. It will not be just 'a bit expensive' to get rid of them. Failing to design TAF layers properly may render the whole system virtually unusable. I always invest a lot into the initial design, and I have never regretted it. It saved me time, effort and sanity.
Thursday, February 2, 2023
Real Life Requirements For A Test Framework
The layers
The majority of test frameworks solve the same problem, so it is only natural that even on different projects you end up using the same architecture. The variable part is limited to:-- tests (they depend on requirements);
-- support of the project-specific infrastructure (you may need to implement support for AWS when assigned to project A, and it will not be required on project B, because the stack is completely different).
Balancing team effort
Personally, I developed a habit of thinking of TAF architecture in terms of layers:
-- a layer of test;
-- a layer of helpers (mainly boilerplate, moved out of tests to avoid duplication);
-- core layer and configuration (start up and shutdown, envrironmnet, logging, working with API of third-pary systems, etc.)
This approach has a lot of advantages, because it allows to share workload across the team without stepping on each other toes.
Test Framework Is A Software Product
When you intend to write a test framework you need to remember the following:
- test framework is a software product, which means everything that applies to a commercial product, also applies to a test framework;- test framework is not less important than the software under test, it is actually more important (and sometimes more complicated) than the software under test.
Test frameworks are created to help you check if you still meet the requirements (and to do it with less effort than manual test requires). Because if you do not meet the requirements, you do not achieve the project goals and|or create more problems than you solve. For instance, you spend enormous amount of time on manual defect management and dealing with architectural issues when it is too late and too expensive.
So if you decide to create a test framework, you have to:
-- define the requirements;
-- define priorities for the requirements;
-- define stages of maturity (what is to be implemented first and what next);
-- find out how much resource you have (time, technical knowledge, congitive ability, ability to delegate);
-- build the schedule of implementation (preferably by using a Gantt diagram).
Otherwise, I am sorry to say, your test framework will be nothing but a cost.
-------------------------------
Related posts:
Real Life Requirements For A Test Framework
More On Designing TAF Layers
Saturday, January 21, 2023
TCP/IP vs Real Life
I was busy talking to my imaginary friends and then it came to me how to explain TCP/IP to the non-technical people. It is important because most of my imaginary friends are non-technical. So, here is how you can do it.
First, forget the OSI, no one needs it anyway. Think of TCP/IP as your clothes.
Application layer is your coat, your suit, your jumper, your shoes, your hat.
Transport layer is your shirt, your dress, your pants (meaning trousers), your stockings.
Internet is your underclothes, your lingerie, your thermals.
Link is the naked you.
Protocol stacks follow the same logic. For instance, when you have a date you wear your suit and you put your shoes on, right? Then all this gradually comes off. Then the connection happens. Then you put everything on in the reverse order. You don't put your underwear over your jeans, do you?
See, technology can be easy to understand.
Friday, January 20, 2023
Firefox Conspiracy Theory
I am a little paranoid which is an unfortunate side-effect of my profession. And due to this side-effect I always keep my third-party cookies switched off. I also use Firefox most of the time, unless it is required to do otherwise. I have been using it since version 0.75 and it is a bit like till death do us part. And this is how I ran into a very funny problem about a year ago: Google began to ask for third party cookies in order to allow you to download the content.
My guess is Google decided to switch from client-side trackers to server-side trackers sometime during summer 2021. They have already been tracking users by means of a fingerprint, and a fingerprint was (and is) built around user's device data, such as network data, payment data like cards (a card number carries information about the bank it was issued by), unique configuration of your device, user activity patterns, etc, etc. Well, they do own about 3/4 of the mobile market, don't they? And they do that without giving the end user the root access to the system.
Monday, January 9, 2023
Why I Don't Regret Starting This Stupid Blog
From time to time I ask myself is it really worth it? The blog. Who reads it? Well, today I got the ultimate answer: I DO. My post from almost three years ago has just saved my OS, my data and my sanity. So, keep writing your blogs, and NEVER EVER switch your BIOS to defaults if you notebook was made to be Windows-friendly. Windows will never be a friend to a Linux user.
The post in question: https://tatjandr.blogspot.com/2020/03/fix-invisible-drive-for-linux-installer.html
PS: Even my failing touchpad, who started all this, seemed to behave better for a minute
Monday, October 31, 2022
ISTQB is a bad bad thing
ISTQB is a bad, bad thing. Reeeeeally bad thing. And here is why.
First of all, they certify something there are more than one opinion about. Something that has different approaches. Something that is poorly measurable since it depends on efficiency of decision making process. And decades of IQ testing and similar attempts to measure and control human brain and psyche proved it spectacularly inefficient.
Whatever you can read in ISTQB material is just an opinion and a book would suffice to share it. Unfortunately, royalties that only one or even several books can bring is nothing compared with certification system would bring. Basically, you bypass market competition by forcing people into buying books and paying for exams, and you do it by pressuring their employers into pressuring their employees.
Friday, September 9, 2022
IT suffers from its own popularity
IT suffers from its own popularity. People go to IT not only because they love it or know how to do it, but because they need money, a reputation and a little bit of power. Because of this, a significant part of decisions are made out of greed, vanity and for the sake of a line in a resume. And an attempt to change priorities in favor of the interests of the project often leads to a conflict. The problem is equally common among both management and engineers, although it manifests itself in each group in its own way
2022-09-09
Monday, September 13, 2021
General Purpose Randomizer
I've decided to introduce some noise into the fingerprints collected on me by various unnecessarily curious services and people, so I've written a simple randomizer for selecting a string from a list of strings. The idea was to remove patterns from server selection process when using vpn. Not sure it'll work for obfuscation, but it is a functioning piece of code. Life will prove the rest.
Known to be working with Ubuntu+bash+ExpressVPN
#!/bin/bash
vpnservers=$(expressvpn list all | cut -d" " -f 1 | tr "\n" " ")
list=${vpnservers}
# using just a big value for length
# syntax ${parameter:offset:length}
vpnservers=${list:12:1500}
printf "Available vpn servers:\n${vpnservers}\n"
read -a arrayofservers <<< ${vpnservers}
length=${#arrayofservers[@]}
printf "Actual array length:\n$length \n\n"
randomvalue=$((1 + $RANDOM % ${length-1}))
printf "Your random value:\n$randomvalue \n\n"
printf "Your server id:\n${arrayofservers[randomvalue]} \n"
Thursday, December 17, 2020
Requirements for Requirements
This text is not exactly mine. It is a very high-level abstract of what a book Requirements Engineering by Elizabeth Hull, Ken Jackson, Jeremy Dick, 2005 has to say on the subject of requirements for requirements.
So, how can we understand that your requirements are ok, or not ok? If they are another source of quality risks? To answer these questions, I've prepared some sets of criteria that we can use for assessment:
Sunday, March 29, 2020
Fix Invisible Drive for Linux Installer on Windows Notebook (ASUS VivoBook S14)
I got myself a new ASUS VivoBook S14 and there were no legacy option (it was in place on my old ACER Aspire V). I had to google around, try switching things on and off, and here is what changed things to the better:
-- get into BIOS menu (F2);
-- switch to Advanced;
-- open SATA Configuration;
-- permanently switch it to AHCI.
This will make your hard drive visible and goodbye Windows.
My configuration:
ASUS VivoBook S14
Ubuntu 19.10 on Unetbootin USB stick
Temporary enabled boot with USB
Wednesday, February 26, 2020
Docker commands vs Docker life cycle - Basic level
So, I started to collect this information for myself and pair it with command sets. Below you can find a use case for setting up a docker image and performing some basic commands on it. I shall extend this collection later, if I'm lucky.
Tuesday, July 23, 2019
Troubleshooting Citrix Client for Linux and Fixing Mike Support
And the answer is
to add AllowAudioInput=True
to the section [WFClient]
of wfclient.ini file
of your Citrix client configuration
So, here is how to fix it in slightly more detail:
Monday, July 15, 2019
Test Plan structure proven by several projects
So, below you can find a structure that helps to collect in one place all info you need to know about the state of test in a project. (I usually build a test plan as a single entry point for all the questions related to test by means of Atlassian Confluence, but I guess any other knowledge sharing system will do).
Also, I can guarantee that if you are able (have enough info, that is) to fill all the sections of my version of a test plan, then you do have your test process under control. So it can function as a checklist and and answer to a question where to start.
My version of a test plan consists of eight sections with subsections. Subsections may vary for each particular project, but I recommend sticking with the top-level ones.
IMPORTANT: Don't duplicate info, don't add info just to fill in sections, it is important that test plan is not just a formal piece of paper.
Saturday, June 29, 2019
Bash - Another thing for the lazy: umount by name
Or maybe it does both:
#!/bin/bash
if [ -z $1 ]
then printf "\nPlease provide drive name (label)\n\n"
exit
fi
drivelabel = $1
cat /etc/mtab | grep ${drivelabel} | cut -d " " -f1 | xargs umount
Friday, June 7, 2019
Bash - Bulk file update with find and sed
#!/bin/bash
if [ -z $1 ] || [ -z $2 ] || [ -z $3 ] || [ -z $4 ]; then
printf "\nPlease enter:\n
1. file command-compatible filename pattern
2. backup suffix for affected files
3. pattern to replace
4. replacement\n\n
For instance, $0 *.txt .xml-backup blue red\n
This should replace blue with red in all txt files\n\n"
exit
fi
filename_pattern=$1
backup_suffix=$2
pattern_to_replace=$3
replace_with=$4
find . -type f -name ${filename_pattern} -exec sed -i${backup_suffix} "s|${pattern_to_replace}|$replace_with|g" {} \+
Bash - Cut a fragment of a log by some criteria (like timestamp)
#!/bin/bash
printf "\nResults are returned *inclusive*\n\n"
if [ -z $1 ] || [ -z $2 ] || [ -z $3 ]; then
printf "\nPlease enter SUBSTRSTART SUBSTREND and LOGPATH\nFor instance, $0 11:59:17,206 12:02:14,606 test.log\n\n"
exit
fi
substrstart=$1
substrend=$2
logpath=$3
sed -n "/${substrstart}/,/${substrend}/p" ${logpath} | tee log_excerpt-$(date +%F_%H-%M-%S) | cat
Bash - Getting network data for the port (localhost only)
#!/bin/bash
printf "\nCurrently for localhost only\n\n"
if [ -z $1 ]; then
printf "Please enter port and [host]\n\n"
exit
fi
port=$1
host=localhost
printf '========= lsof -i ============\n\n'
lsof -i :${port}
printf '========= netstat -lnt | grep $port ============\n\n'
netstat -lnt | grep ${port}
printf '========= nc -z $host $port ============\n\n'
nc -z ${host} ${port}
Bash - kill everything with a matching name
#!/bin/bash
if [ -z $1 ]
then
printf "keyword is empty\n\n"
exit
fi
let k=0
let min=1
# mind the double brakets in do part
for i in $(ps -e | grep "$1"); do ((k++)); done
if [ "${k}" -lt "${min}" ]
then
printf "no such process to kill\n\n"
exit
fi
for i in $(ps -e | grep $1 | cut -s -f1 -d\t); do kill -9 ${i}; done
Thursday, June 6, 2019
Password generator with bash
Solution is based on LINK. Stuff in use: cat, tr, fold, head, /dev/urandom, echo, printf, for each and parameters testing