कम्पैटिबिलिटी टेस्टिंग

Compatibility testing जाँचती है कि product अपने आस-पास की हर चीज़ के साथ सही काम करे: वे systems जिनसे वह data exchange करता है, वह दूसरा software जो उसका device या browser share करता है, वे platforms और versions जिनके support का वह वादा करता है, और वह data और clients जो उसके अपने पुराने versions पीछे छोड़ गए हैं। एक clinic booking app हर functional test pass करके भी clinics के scheduling system को एक घंटा खिसके हुए appointment times भेज सकती है, password manager के sign-in field में icon जोड़ते ही टूट सकती है, या उस app version की requests reject कर सकती है जिसे ज़्यादातर patients ने अभी update नहीं किया।

Software quality वाले lesson की तरह, ISO/IEC 25010:2023 इस शब्द को सीमित अर्थ देता है: compatibility यानी co-existence और interoperability, जबकि अलग-अलग operating systems, browsers और devices पर चलना flexibility में आता है (2011 edition में portability)। ज़्यादातर teams इन सबको "compatibility testing" कहती हैं, और यह lesson भी, लेकिन यह बँटवारा काम का है क्योंकि हर हिस्से को अलग tests चाहिए।

यह क्यों ज़रूरी है

Compatibility defects systems के बीच रहते हैं, इसलिए कोई एक team उनकी मालिक नहीं होती। हर side अपने tests pass करती है: app valid JSON भेजती है, partner उसे accept करता है, और सिर्फ़ दोनों के साथ चलने पर order गलत date के साथ पहुँचता है। ये release के दिन इकट्ठे भी होते हैं, जब नया server हज़ारों ऐसे devices से मिलता है जो अभी भी पिछले महीने की app चला रहे हैं, पुराने shape के data से भरे accounts से, और ऐसे partners से जिन्होंने कुछ नहीं बदला।

Tester के लिए ख़तरा झूठी coverage है: fresh installation पर, mocks (नकली partner systems) के सामने, सबसे नए platform पर चलने वाला regression suite पूरा green हो सकता है जबकि असली users fail हो रहे हों। Product के compatibility relationships का नाम लेना, usage data से तय करना कि किन्हें test करें, और जो छोड़ा उसे लिखना, "यहाँ चलता है" को ऐसे statement में बदल देता है जिस पर team भरोसा कर सके।

ISO/IEC 25010 में compatibility

ISO/IEC 25010:2023 compatibility को इस degree के रूप में describe करता है कि product दूसरे products के साथ information exchange कर सके, या उनके साथ common environment और resources share करते हुए अपने functions कर सके, या दोनों। ISTQB Foundation syllabus compatibility को उन characteristics में गिनता है जिन्हें non-functional testing evaluate करती है। इसकी दो sub-characteristics, वह characteristic जिसमें platform support आता है, और versions के बीच का रिश्ता, हर एक अलग तरह के test की ओर ले जाता है:

  • Interoperability: systems information exchange करते हैं और exchange की गई information इस्तेमाल कर पाते हैं। File पहुँच जाना काफ़ी नहीं; receiver को amounts, dates और codes उसी अर्थ में पढ़ने चाहिए जो sender का था।
  • Co-existence: product दूसरे products के साथ environment और resources share करते हुए, उन्हें नुक़सान पहुँचाए बिना, अपने functions करता है। उसे अपने पड़ोसियों के बीच टिकना है और उन्हें तोड़ना नहीं है।
  • Flexibility: adaptability दूसरे operating systems, browsers और devices पर चलना cover करती है; installability और replaceability product को install करना और नए version का पुराने की जगह लेना cover करती हैं, और upgrade testing यहीं आती है।
  • Backward और forward compatibility: एक ही product के versions के बीच compatibility के लिए standard में अलग term नहीं है। Practice में यह versions के बीच interoperability है, जैसे पुरानी app का नए server से बात करना, साथ में replaceability।
ISO/IEC 25010:2023 के सामने compatibility के पाँच dimensions: compatibility में interoperability और co-existence, flexibility में platform support, versions के बीच backward और forward compatibility, हर एक का सवाल और test।
DimensionISO/IEC 25010:2023 मेंकिस सवाल का जवाबExample test
InteroperabilityCompatibilitysub-characteristicक्या दोनों sides exchange की गई information इस्तेमाल कर पाती हैं?App में booking बनाएँ, clinic system में field-by-field जाँचें
Co-existenceCompatibilitysub-characteristicक्या यह दूसरे software के बगल में, उसे नुक़सान पहुँचाए बिना चलता है?Password-manager extension install करके sign in करें
Platform supportFlexibilityadaptability; 2011 में portabilityक्या यह हर वादा किए गए OS, browser और device पर चलता है?सबसे पुराने supported OS version और current version पर critical journeys
Backward compatibilityअलग term नहींversions के बीच interoperability, replaceabilityक्या नया version पुराना data और पुराने clients स्वीकार करता है?App N-1 की requests बिना बदले नए server पर replay करें
Forward compatibilityअलग term नहींversions के बीच interoperabilityक्या पुराना version नया data संभाल पाता है?Rollback करें, फिर नए version से saved records खोलें

Interoperability: सिर्फ़ sender नहीं, exchange test करें

Interoperability tests data को एक boundary के पार follow करते हैं और दोनों sides जाँचते हैं: क्या भेजा गया, क्या पहुँचा, और receiver ने उसके साथ क्या किया। पहले architecture diagram, integration settings और product के पास मौजूद keys से हर connected system की list बनाएँ; भूले हुए integrations ही बिना test रह जाते हैं। फिर चार तरह के exchange cover करें:

  • Connected systems: अपने product में record बनाएँ और दूसरे system में field-by-field confirm करें: currency और decimals के साथ amounts, time zone के साथ dates, receiver के codes से map हुए status codes, सही-सलामत Arabic names। फिर unhappy paths: partner धीमा है, record reject करता है या उसे दो बार पाता है।
  • Import और export formats: अपने exports उन programs में खोलें जो customers सच में इस्तेमाल करते हैं, और उन programs की बनाई files import करें। Encoding बदलें (byte order mark के साथ और बिना UTF-8), separator बदलें (RFC 4180 comma-separated CSV describe करता है, लेकिन decimal comma वाले regions में spreadsheet programs अक्सर semicolons लिखते हैं), date और number formats, quoted fields के अंदर line breaks, और एक खाली file।
  • API और schema versions: पुराना और नया contract compare करें, जैसे OpenAPI description (API के endpoints और fields की machine-readable list) या response का JSON Schema (वे rules जो उसके fields को मानने हैं)। Optional field जोड़ना आम तौर पर safe है; field हटाना या rename करना, उसका type बदलना, optional request field को required बनाना या enumeration में नई value जोड़ना पहले से released clients को तोड़ सकता है। पिछले client की requests बिना बदले replay करें।
  • Third-party integrations: payment, maps, sign-in और SMS providers अपने schedule पर बदलते हैं। Provider के sandbox (उसका test environment) में उस API version पर test करें जिसे आपका product pin करता है, उसका change log और deprecation notices पढ़ें, और जाँचें कि provider down होने पर आपका product क्या करता है।
Pharmacy order response, v1 (read by every released app)
{ "id": "A-1042", "total": 149.5, "deliveryDate": "2026-10-04" }

Pharmacy order response, v2 (proposed)
{ "id": "A-1042", "total": "149.50", "currency": "SAR",
  "delivery": { "date": "2026-10-04", "slot": "AM" } }

Change                        Effect on released clients
"currency" added              usually safe if clients ignore unknown fields
"total" number -> string      breaking: arithmetic and validation fail
"deliveryDate" moved          breaking: the field old clients read is gone

आज़माएँ: रिस्पॉन्स कॉन्ट्रैक्ट कम्पेरेटर आज़माएँ: JSON Schema वैलिडेटर आज़माएँ: CSV डेटासेट जनरेटर

Co-existence: environment share करना

Co-existence tests product को उन चीज़ों के बगल में चलाते हैं जो सच में उसका device, browser या server share करती हैं, और दोनों दिशाएँ जाँचते हैं: आपका product चलता रहे, और उसके पड़ोसी भी। ये failures requirements में शायद ही लिखी होती हैं, इसलिए पड़ोसियों की list support tickets, error logs और company के standard device setup से लें:

  • Shared resources: camera, microphone या audio output जिसे कोई दूसरी app इस्तेमाल कर रही है; file, port या printer जिसे कोई दूसरा program पकड़े है; कम storage या memory; दूसरी services के साथ shared database या message queue। आपका product इंतज़ार करे, समझाए या recover करे, और जो लिया उसे छोड़ दे।
  • दूसरा software: आपकी files scan करता antivirus, network बदलता VPN, screen reader, और payment के बीच आने वाली phone call।
  • Browser extensions: ad blockers अपनी filter lists से match करने वाले elements छिपा सकते हैं, जैसे ad-banner जैसी class वाला banner; password managers और translators icons डालते हैं या text दोबारा लिखते हैं; dark-mode extensions pages का रंग बदलते हैं। Users जिन extensions की शिकायत करते हैं, उनके साथ critical journeys अलग browser profile में test करें।
  • Side-by-side versions: एक computer पर install दो versions, एक phone पर store build के बगल में test build, या दो tabs जिनमें से एक deployment के बाद भी पुरानी web app चला रहा है। Shared settings, files और local storage जाँचें, और यह भी कि link कौन सा version खोलता है।

Support policy, backward और forward compatibility

Users कभी एक साथ update नहीं करते। Release के दिन नया server हर installed app version से, सबसे पुराने supported operating system वाले devices से और पुराने versions के लिखे data से मिलता है। एक लिखी हुई support policy तय करती है कि इनमें से क्या चलना चाहिए: minimum operating system versions, browsers, server अभी भी कितने app versions serve करता है (अक्सर current और previous, यानी N और N-1) और कब तक, और unsupported user क्या देखता है, जैसे silent error की जगह साफ़ update prompt।

Backward compatibility का मतलब है कि नया version पुराने versions के बनाए data के साथ और अभी भी इस्तेमाल हो रहे पुराने clients के साथ काम करे। Forward compatibility इसका उल्टा है: पुराना version नए version का data संभाल ले, आम तौर पर अनजान fields को ignore करके; rollback इसी पर टिका है। Upgrade paths पुरानी दुनिया से test करें, सिर्फ़ clean installation से नहीं:

  • पुराना data, नया code: realistic accounts (orders, saved addresses, आधा भरा form) के साथ upgrade करें और पुराने exports और bookmarks खोलें। सब कुछ मौजूद, सही और इस्तेमाल लायक़ रहना चाहिए।
  • पुराने clients, नया server: हर supported client version को बिना बदले नए server के साथ चलाएँ, और पहले unsupported version में update prompt जाँचें।
  • Settings migration: language, notification और accessibility settings, saved sign-in और preferences upgrade के बाद बचे रहने चाहिए, कई versions एक साथ लाँघने पर भी, जैसे 3.8 से सीधे 4.2।
  • नया data, पुराना code: नए version से data save करें, फिर rollback करें या उसे पिछले client में खोलें; पुराने version को अनजान चीज़ ignore करनी चाहिए, न crash होना चाहिए, न उसे overwrite करना चाहिए।

आज़माएँ: JSON डिफ़

Worked example: usage data से एक coverage matrix

एक pharmacy chain website और Android व iOS apps से बेचती है। Release 4.2 order API बदलती है और delivery slot जोड़ती है; interoperability section वाले contract comparison के बाद team ने total को number ही रखा और deliveryDate भी रखा, ताकि released apps response पढ़ सकें। अलग-अलग lists की जगह tester एक compatibility coverage matrix बनाता है, जिसकी हर row evidence से आती है: 90 दिन के analytics, API log में client-version header, app stores के version statistics, integration list और support tickets। हर row को depth मिलती है, जो छोड़ा गया वह लिखा जाता है, और row के अंदर बाक़ी parameters, जैसे language और payment method, pairwise testing वाले lesson की तरह pairwise selection से जोड़े जाते हैं, ताकि values की हर pair कम से कम एक test में आए। Numbers illustrative हैं।

Platform rows पुराने काम को दोहराती नहीं, दोबारा इस्तेमाल करती हैं: responsive testing का lesson viewport widths और breakpoints देता है, cross-browser testing का lesson engines और support tiers देता है (Tier 1 पर हर release में critical journeys और regression set चलते हैं, Tier 2 पर critical journeys का smoke set, Tier 3 पर सिर्फ़ best-effort checks), और आगे mobile module में device fragmentation का lesson बताता है कि phones कैसे चुनें। यह matrix वह जोड़ता है जो वे lessons cover नहीं करते: client versions, connected systems, formats, पड़ोसी और upgrades, ताकि एक page बता सके कि क्या test हुआ, किसके सामने, और क्या छोड़ा गया। Plan से तीन defects मिले:

  • पुराना client, नया server: app 4.1, जिससे 31% orders आते हैं, अपनी order request में नया deliverySlot field नहीं भेजती (response slot को delivery.slot में लौटाता है)। API 4.2 इस field को required मानता है और default लगाने की जगह 400 Bad Request लौटाता है, ठीक वही request-side break जिसकी चेतावनी interoperability section देता है। यह release रोक देता है।
  • Interoperability: stock system को जाने वाला नया export dates को 04/10/2026 लिखता है, day पहले, और stock system उसे 10 April पढ़ता है। दोनों systems ने अपने tests pass किए; सिर्फ़ field-by-field check ने इसे पकड़ा।
  • Co-existence: एक लोकप्रिय password-manager extension अपना icon sign-in page के show-password button के ऊपर रख देता है। अकेले कोई product ग़लत नहीं; team button खिसका देती है।
Release 4.2 compatibility coverage matrix (illustrative numbers, last 90 days)

Area          Row                                     Evidence          Depth
Platforms     Tiers 1 and 2, cross-browser plan       analytics         per tier
              Android: oldest supported, current      store statistics  critical journeys
              iOS: previous and current               store statistics  critical journeys
Clients       app 4.2 (new)                           -                 full regression
              app 4.1 (31% of orders)                 API client log    critical journeys
              app 4.0 and older (2%, unsupported)     API client log    update prompt
Interop       payment provider, pinned API version    integration list  pay, fail, refund
              stock system export (CSV)               integration list  field by field
              SMS provider                            integration list  send, outage
Co-existence  password-manager extension              support tickets   sign-in journey
Upgrade       4.0 and 4.1 to 4.2, real accounts       -                 data, settings
Rollback      4.2 data opened in app 4.1              -                 forward check
Left out (recorded in the test plan): Firefox on Android (0.3%), tablets in landscape

आज़माएँ: पेयरवाइज़ टेस्टिंग जनरेटर आज़माएँ: User-Agent पार्सर

आम गलतियाँ

  • Compatibility को browser list मान लेना, जबकि connected systems, file formats, पुराने app versions और पड़ोसी software बिना test रह जाते हैं।
  • सिर्फ़ यह जाँचना कि दूसरे system ने data accept कर लिया: खिसकी हुई date या गलत पढ़ी गई amount के साथ accept हुआ record भी interoperability failure है।
  • हर test clean installation और खाली database से शुरू करना, जिससे upgrade, migration और settings defects कभी दिखते ही नहीं।
  • नई app को सिर्फ़ नए server के साथ test करना, और users अभी जो client versions चला रहे हैं उन्हें कभी नहीं।
  • Integrations को सिर्फ़ mocks के सामने test करना: mock contract की आपकी समझ से सहमत होता है, provider के मौजूदा behaviour से नहीं।
  • Support policy और matrix को बिना लिखे छोड़ना, जिससे कोई नहीं बता पाता कि कौन से versions test हुए और कौन से जानबूझकर छोड़े गए।

QA का नज़रिया

Compatibility test planning का हिस्सा है। Product owner और developers से पूछें: हम किन systems से, किन formats और API versions में data exchange करते हैं? Support policy कौन से operating systems, browsers और app versions का वादा करती है, और कब तक? Unsupported user क्या देखता है? यह API change additive है या breaking? Evidence analytics और operations के owner से लें, और जवाब तारीख़ के साथ coverage matrix में लिखें।

Execution के दौरान सबसे पुरानी supported चीज़ें पहले test करें, क्योंकि releases वहीं fail होती हैं। Compatibility defect दिखे तो वह एक variable अलग करें जो बदलता है, जैसे client version, extension, locale या partner का API version, और exchange की दोनों sides report करें: क्या भेजा गया, क्या पहुँचा और receiver ने उसके साथ क्या किया। Test completion report में cover हुई rows, छोड़ी गई rows और उनकी वजह लिखें।

अभ्यास

School app के लिए compatibility coverage matrix बनाएँ

आपका काम

एक school website और parents की Android व iOS app से timetables, homework और fee payments publish करता है। Release 2.0 homework को नए format में store करती है, fees API में एक field जोड़ती है और grades को ministry के reporting system में CSV के रूप में export करना जारी रखती है। नीचे के facts से एक coverage matrix बनाएँ: rows, हर row का evidence, depth, और आप क्या छोड़ते हैं। फिर वे तीन checks चुनें जो आप सबसे पहले चलाएँगे और product owner के लिए अपने सवाल लिखें।

सामग्री
Facts (illustrative)
- Sessions: 55% Android पर app, 30% iOS पर app, 15% school laptops पर website
- API log में app versions: 1.9: 64%, 1.8: 27%, 1.7 और पुराने: 9%
- Support policy: current और previous app version (N और N-1); Android के चार
  सबसे नए major versions; iOS के दो सबसे नए versions
- Fees: bank payment gateway, जिसका API version integration settings में pinned है
- Grades: ministry के reporting system को CSV के रूप में export; students के
  नाम Arabic में
- Support tickets: पिछले term में school laptops पर टूटे pages के बारे में 14,
  सभी उस content-filtering extension के साथ जिसे IT team install करती है
- Release 2.0: homework नए format में store होता है; fees API में "discount"
  field जुड़ता है
चरण
  1. Compatibility relationships की list बनाएँ: platforms, client versions, connected systems, formats, पड़ोसी, upgrade और rollback।
  2. हर row के लिए facts से evidence लिखें और depth चुनें।
  3. लिखें कि आप क्या test नहीं करेंगे, और क्यों।
  4. सबसे ज़्यादा risk वाले तीन checks चुनें और अपने सवाल लिखें।
मॉडल उत्तर दिखाएँ
मॉडल उत्तर

Platforms (evidence: sessions का बँटवारा और support policy): चार supported Android versions में सबसे पुराने और current पर, दोनों supported iOS versions पर, और school laptops पर website में critical journeys, browsers cross-browser plan से लेकर। Clients (evidence: API log और policy): 2.0 को full regression; 1.9 (N-1, 64%) 2.0 server के सामने critical journeys चलाता है, नए format में saved homework खोलने समेत; 1.8 और पुराने को सिर्फ़ update prompt का check, क्योंकि policy अब उन्हें support नहीं करती।

Interoperability (evidence: integration settings और release notes): pinned API version पर payment gateway sandbox (pay, fail, refund, duplicate notification); नए discount field के साथ और बिना fee responses, जैसे 1.9 उन्हें पढ़ता है; Arabic names, तय separator और encoding, और बिना students वाली एक class के साथ ministry system में load किया गया grades CSV। Co-existence (evidence: 14 tickets): content-filtering extension वाले school laptop पर website की critical journeys। Upgrade और rollback (evidence: homework का नया format): मौजूदा homework, linked children और notification settings के साथ 1.8 और 1.9 से 2.0; फिर server को पिछले release पर rollback करके 2.0 से saved homework खोलना, और पुराना version न नए format पर crash हो, न उसे overwrite करे। छोड़ा और वजह के साथ लिखा गया: बीच के दो Android versions (सबसे पुराना और current range की सीमाएँ cover करते हैं; बीच वाले बाद की releases में बारी-बारी से आएँ), 1.8 और पुराने पर पूरी journeys (unsupported, इसलिए सिर्फ़ update prompt), और phones व घर के computers पर website (sessions दिखाते हैं कि website school laptops पर चलती है)।

पहले तीन checks: नए format वाले homework के साथ 2.0 server के सामने app 1.9, real data और settings के साथ upgrade, और ministry import में grades CSV। सवाल: app traffic का 27% अभी भी 1.8 से आता है, जिसे policy अब support नहीं करती; क्या release के दिन उन parents को block करें या support बढ़ाएँ? Ministry system का test account कौन दे सकता है? IT team extension का कौन सा version install करती है? क्या gateway pinned API version को retire करने वाला है?

अक्सर पूछे जाने वाले सवाल

क्या compatibility testing और cross-browser testing एक ही हैं?

नहीं। Cross-browser testing platform support का एक हिस्सा जाँचती है। Compatibility testing connected systems के साथ interoperability, दूसरे software के साथ co-existence, operating system और app version support, और backward व forward compatibility भी cover करती है। बिना किसी user interface वाला server-to-server integration भी compatibility testing माँगता है।

क्या API response में field जोड़ना हमेशा safe है?

आम तौर पर, पर हमेशा नहीं। यह उन clients के लिए safe है जो अनजान fields ignore करते हैं। जो client responses को ऐसे strict schema से validate करता है जो extra properties मना करता है, या जो partner file के columns को उनकी position से map करता है, वह फिर भी fail हो सकता है। देखें कि मौजूदा consumers data कैसे पढ़ते हैं, और पिछले client को नए version के सामने चलाएँ।

Backward और forward compatibility में क्या फ़र्क़ है?

Backward compatibility: नया version पुराने versions के बनाए data और अभी इस्तेमाल हो रहे पुराने clients को स्वीकार करता है। Forward compatibility: पुराना version नए version का data या messages संभाल लेता है, आम तौर पर जो नहीं समझता उसे ignore करके। Rollback forward compatibility पर टिका है, क्योंकि पुराने version को वह data पढ़ना पड़ता है जो नया version लिख चुका है।

क्या compatibility testing automate की जा सकती है?

इसका बड़ा हिस्सा। Contract checks हर build पर पुराने और नए API descriptions compare कर सकते हैं, पिछले client की recorded requests नए server के सामने replay की जा सकती हैं, और upgrade tests पुराने data की stored copy से शुरू हो सकते हैं। पड़ोसी software, असली partner systems, और यह आँकना कि receiver ने data के साथ क्या किया, अभी भी planned manual sessions माँगते हैं।

संदर्भ

  • ISO/IEC 25010:2023 — Systems and software Quality Requirements and Evaluation (SQuaRE) — Product quality modelISO/IEC · 2023उत्पाद गुणवत्ता मॉडल: कार्यात्मक उपयुक्तता, प्रदर्शन दक्षता, संगतता, इंटरैक्शन क्षमता, विश्वसनीयता, सुरक्षा, रखरखाव-योग्यता और लचीलापन।
  • ISTQB Certified Tester Foundation Level (CTFL) v4.0ISTQB · 2023सॉफ़्टवेयर टेस्टिंग का फ़ाउंडेशन पाठ्यक्रम: टेस्ट स्तर और प्रकार, टेस्ट डिज़ाइन तकनीकें, टेस्ट प्रबंधन और टूल।
  • OpenAPI SpecificationOpenAPI InitiativeREST API के वर्णन का मानक: पाथ, ऑपरेशन, पैरामीटर, स्कीमा, रिस्पॉन्स और सिक्योरिटी स्कीम।
  • RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) FilesIETF · 2005CSV के आम नियम: कॉमा सेपरेटर, CRLF लाइन एंड, और कॉमा, कोट या लाइन ब्रेक वाले फ़ील्ड की क्वोटिंग।

Mutqan tools से अभ्यास करें

JSON डॉक्यूमेंट को JSON Schema (draft-07 / 2019-09 / 2020-12 के मुख्य कीवर्ड) के विरुद्ध वैलिडेट करें।

JSON और डेटा

कस्टम कॉलम, डेटा टाइप, पंक्ति संख्या और डिलिमिटर के साथ CSV फ़ाइलें जनरेट करें।

टेस्ट डेटा

दो JSON डॉक्यूमेंट की सिमैंटिक तुलना करें और जोड़ी गई, हटाई गई तथा बदली गई वैल्यू हाइलाइट करें।

JSON और डेटा

User-Agent स्ट्रिंग से ब्राउज़र, वर्शन, इंजन, OS, डिवाइस टाइप और बॉट की पहचान करें।

वेब

और गहराई से

इस topic में आपकी प्रगति

QA रोडमैप का हिस्सा