Tuesday, April 17, 2018

קץ הבדיקות הידניות

Manual Testing - Finally dead

...
כן, שוב. 
עוד מאמר עם הכותרת הלעוסה הזו. ולא, זה לא מה שאתם מניחים. 
כמו שאפשר היה לשים לב כאן וכאן, אני מאוד לא מחבב את המונח "בדיקות ידניות". למרבה הצער, סתם לומר "אל תשתמשו במילה הזו" לא באמת פועל. אם נרצה ואם לא, המילים בהן השתמשנו עד כה יצרו תבניות מחשבה ודפוסי פעולה והיום יש אנשים שבודקים תוכנה על ידי כתיבת קוד באופן כמעט בלעדי, וכאלה שבודקים תוכנה ואינם כותבים קוד בכלל - בניגוד למה שטוענים בולטון ובאך, זה לא באמת אפקטיבי לקרוא לשני הדברים הללו באותו שם ("בדיקות"), כי אנשים תופסים את הפעילויות הללו כנפרדות. גם השימוש ב"מבחנים" (checks) לעומת "בדיקות" (testing) לא באמת תופס, כי אנשים שאינם מתחום בדיקות התוכנה רגילים להתייחס לכתיבת קוד כאל "כתיבת בדיקות", זאת נוסף על העובדה שתקלה במיתוג גרמה לכך שיותר מדי אנשים משתמשים בהפרדה הזו כדי לומר ש"מבחנים הם לא בדיקות" ולצמצם את החשיבות שלהם - שוב, למרות תיקונים חוזרים ונשנים מצד באך ובולטון (חמור יותר - התרגום של ההפרדה הזו לא עובד היטב בעברית, כי "לבדוק" זו מילה מקיפה פחות מאשר "לבחון" - אלא אם למישהו יש הצעות אינטואיטיביות יותר). 
בקיצור - חסרה לי דרך להפריד בין שני סוגי הפעילות באופן שמצד אחד ישתמש במילה "בדיקות", כי לזה אנשים רגילים ומצד שני לא יוצר הבדל הירארכי בין השניים. התואר "ידני" נתפס כמיושן ונחות ביחס ל"אוטומטי", והתואר "חקרני" (exploratory) הוא שקר גס - אני חוקר לא פחות כאשר אני כותב קוד מבדקים, ואפילו כשאני מנתח את תוצאות הריצה. בנוסף, זה שקר לא אפקטיבי - אנשים לא מבינים באופן אינטואיטיבי את כל הקטע הזה של בדיקות תוכנה כמסע גילוי, והתואר הזה לא אומר להם כלום. בנוסף, זה נשמע קצת כמו מונח פוליטיקלי-קורקט ל"ידני".  בקיצור, נדרש תואר שיכול לעמוד מול "אוטומטי" כשווה בלי ליצור מצג שווא ובלי שהוא יישמע כמו מסכה דקה ל"מה שכולם באמת חושבים". 
לאחרונה, מסתובב לי בראש רעיון - מה לגבי "בדיקות אינטראקטיביות"?
היתרון המרכזי במונח הזה, מבחינתי, הוא שאין צורך להסביר אותו - "אינטראקטיבי" הוא תואר שמייצג "מערב פעילות אנושית". בנוסף, המונח הזה כבר טעון באופן חיובי, והוא כמעט תמיד מופיע כתואר שמייצג יתרון (למשל, האם שמעתם על "למידה אינטראקטיבית"?).  המעורבות האנושית שמתייחסים אליה במערכות אינטראקטיביות היא רצויה, ובמקרים רבים היא אפילו המטרה. 
לכן, כבודק תוכנה אני נעזר בבדיקות - חלק מהן יהיו אוטומטיות, וחלק יהיו אינטראקטיביות. לא צריך להסביר אף אחד מהמונחים האלה, ולדעתי - גם לא צריך להגן עליהם. יש מקומות בהם אוטומציה חשובה לנו, ויש מקומות בהם נדרשת אינטראקציה. 
הנקודה היחידה בה עדיין קשה לי היא במעבר בין סוג הבדיקה לסוג הבודק (אין "בודקים אינטראקטיביים", בדיוק כמו שאין "בודקים ידניים" או "בודקים אוטומטיים"), אבל אני חושב שלכל הפחות, הבחירה ב"אינטראקטיבי" לא מחמירה את המצב.

אז, מה דעתכם?

-----------------------------------------------------------------------
Yes, Again. 
Another article with this unimaginative title. And no, it's not going to be what you might assume.

As you might have noticed here or here I don't like the term "manual testing" (unless, as is customary to say, you are testing a manual, in which case it is a fine way to describe what you are doing). Unfortunately, simply going about saying "don't use X" is very ineffective, and we need to suggest alternative wording that will be as compelling as the current one. Whether we like it or not, the words we've used until now have helped to create a thought pattern and define a strong distinction between writing code to test code, and humans testing software - those activities tend to be perceived as separate, and sometimes even performed by different people - at any rate, the point is that people are used to think of two activities, and therefore use two different terms to distinguish between them, so while saying "all of this is simply testing" is, in my eyes, preferable, it will be quite difficult to persuade people who are less versed in the world of testing to give up that useful distinction.
Currently, I'm aware of two ways to retain this differentiation, both of them I find lacking in some way. First there is Bolton & Bach's distinction between "Testing" and "Checking", which has a couple of problems: It was abused to try and make writing code to test inferior to playing with the software in person, it is not immediately understandable for people less interested in testing (i.e.: it needs to be explained), and it does not translate well to Hebrew (and possibly to other languages).
Second, there's an odd trend of used "Exploratory" as a euphemism for "manual" - While the terms can be traced back to Bach & Bolton as well, I don't think I've heard any of them use this odd term (which makes sense, as they retired their use of "Exploratory testing" for good reasons). Using "exploratory" in a manner that means "manual" has even bigger problems - First and foremost, It is a blatant lie. When I write a piece of "automation", I am actively exploring. The same is true for reading the run reports. Second, this too has no meaning on its own for the laymen -  the idea that software testing is an act of exploration is not a common concept outside of specific testing paradigm & communities - most people are more "just do your thing so that we can ship" (or worse - "make me some me quality") . Using "exploratory" in this sense feels like a politically-correct way to say "manual", and like most P.C. language - it is useful only for a very short time until the derogatory meaning and prejudice catches on with the new term. In addition, as it comes from the same idea-space as did testing and checking, it is easily used to demote "automation" and get again into that purposeless superiority struggle.
So, What I'm looking for is a term that can at the same time go along with people's habits (so automation remains "testing"), maintain the needed distinction between the two activities (people's habits, did I mention them?), be intuitive to understand and convey enough self confidence to co-exist peacefully with automation without the need to defend it and enter a futile & harmful battle. If possible, it should also help narrow the mental gap between the two activities.

Some time not too long ago, a thought hit my mind. I'm not sure where or when, but it has been there for a while now. How about interactive testing ? In essence, I feel that it helps address my problems with the other terms and stands up for most of the goals I want it to.
First of all, it is intuitive to understand - we use "interactive" in our day to day life and contrast it with "automated", so there's no surprise when we use it ("automated" \ "exploratory" is an odd axis, "automated"\"interactive" is as common and as natural as "automated"\"manual").
Second, it is positively charged: "interactive" is used most of the times to represent an advantage, or a desired result. For instance, have you heard about Interactive Learning?
Finally, is conveys a clear meaning of what testing is - "interactive" is used to imply cognitive involvement of the human(s) interacting with the object of interaction. Unlike "manual" which implies boring, repetitive work, "interactive" should be interesting and captivating.
As a tester, I do testing. Some of it will be automated, some of it will be interactive - There's no need to explain any of those terms, and my feeling is that none of them needs to be defended against the other. Some things are better if automated, some are better in an interactive form.
One point that is not solved by using a better term is the mix people make between type of testing and type of tester - having an "interactive tester" is as meaningless as having a "manual" or "automated" tester (another long time rant of mine). But, hopefully, it does not make the situation any worse on that front.

So, would "interactive testing" work for you? I would love to hear your thoughts.