डिवाइस फ़्रैगमेंटेशन

Device fragmentation उन environments की विविधता है जिनमें एक ही mobile build को चलना होता है: कई manufacturers के devices, एक साथ चल रहे कई OS versions, अलग-अलग size, shape और density वाली screens, अलग-अलग memory, और font size, language और dark mode जैसी user settings। हर combination एक अलग environment है, और वही build हर एक में अलग व्यवहार कर सकता है।

एक उदाहरण: portrait में बड़े phone पर टेस्ट की गई checkout screen ठीक चलती है। पर बड़े font वाले छोटे phone पर Pay button कट जाता है; landscape में keyboard card field को ढक देता है; खुले foldable पर form पूरी width में फैल जाता है। इनमें से कोई भी logic defect नहीं है, और कोई भी उन phones पर नहीं दिखता जिन्हें टीम रोज़ इस्तेमाल करती है।

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

Users app अपने devices पर चलाते हैं, आपके नहीं। छोटी screens पर कटने वाला layout, phone घुमाते ही खाली हो जाने वाला form, या किसी एक manufacturer की system layer पर ही होने वाला crash, उस device वाले हर user तक पहुँचता है, और store में ख़राब reviews और कुछ ख़ास models पर इकट्ठा होती crash reports के रूप में दिखता है।

कोई टीम हर model पर टेस्ट नहीं कर सकती, इसलिए ये defects या तो devices के सोचे-समझे चुनाव से मिलते हैं या users को। लिखे हुए कारणों वाला device matrix "हमने कुछ phones पर टेस्ट किया" को ऐसे coverage statement में बदल देता है जिसका release decision में बचाव किया जा सके: हर device कौन से risks कवर करता है, और टीम ने कौन से risks कवर न करने का फ़ैसला किया।

Fragmentation कहाँ से आता है

Android और iOS वाले lesson में OS versions और store builds आ चुके हैं। बाक़ी हर चीज़ में सबसे ज़्यादा फैलाव Android में है, क्योंकि कई manufacturers इसे budget से flagship तक के hardware पर ship करते हैं और अपनी system layer जोड़ते हैं। iOS कम models पर चलता है, पर कई iPhone sizes और, जहाँ app support करे, iPads एक साथ इस्तेमाल में रहते हैं।

  • Screen: size, aspect ratio, pixel density, और camera cut-outs या गोल कोने जो layout की जगह घटाते हैं।
  • Form factor: tablets, fold या unfold करने पर size बदलने वाले foldables, और split-screen windows जो app को screen का एक हिस्सा देती हैं।
  • Hardware: memory, processor, camera और sensors। कम memory वाला device background apps को जल्दी बंद करता है, इसलिए app पर लौटने पर वह ज़्यादा बार restart होता है।
  • Manufacturer layer (Android): बदले हुए system dialogs और keyboards, और battery optimisation जो background काम और notifications में देरी कर सकता है।
  • User settings: font size, display size, dark mode, language और text direction।

आज़माएँ: टेस्ट सिनेरियो जनरेटर

Screen sizes: pixels, density और size classes

Apps का layout pixels में नहीं, density-independent units में बनता है: Android पर dp और iOS पर points। एक dp 160 dpi वाली screen पर एक physical pixel के बराबर है, इसलिए dp में width = pixels में width × 160 ÷ density। 420 dpi पर 1080 pixels चौड़ा phone लगभग 411 dp चौड़ा है; 320 dpi पर 720 pixels चौड़ा phone 360 dp का है। iPhones हर point को हर दिशा में दो या तीन pixels से बनाते हैं (@2x, @3x)। Screen पर कितना आएगा, यह resolution नहीं, dp या points में width तय करती है।

Adaptive layouts thresholds पर बदलते हैं। Width के लिए Android की window size classes हैं: compact (600 dp से कम: portrait में लगभग सभी phones), medium (600 से 839 dp: portrait में ज़्यादातर tablets और खुले बड़े foldables) और expanded (840 से 1199 dp: landscape में ज़्यादातर tablets); इससे चौड़ी windows की अपनी classes हैं। iOS पर हर axis compact या regular होता है: portrait में iPhone की width compact और height regular होती है, और full screen पर iPad app दोनों में regular होता है, पर तंग multitasking window में उसकी width compact हो जाती है। हर threshold एक boundary है, इसलिए boundary value analysis वाला lesson लागू करें: 599 और 600 dp, 839 और 840 dp टेस्ट करें।

Width अकेली सीमा नहीं है। Status और navigation bars, camera cut-outs और iPhone का home indicator जगह लेते हैं, और content को safe area के अंदर रहना चाहिए; Android 15 को target करने वाले apps default रूप से edge to edge दिखते हैं, इसलिए target SDK update किसी button को navigation bar के नीचे छिपा सकता है। User settings जगह और घटाती हैं: Android की display size setting dp में width बदल देती है, और 200% तक font scaling (Android 14 और उसके बाद) या iOS पर सबसे बड़े Dynamic Type sizes में बहुत कम text आता है।

  • Matrix की सबसे छोटी और सबसे बड़ी width: कोई कटा text नहीं, कोई overlapping elements नहीं, कोई sideways scrolling नहीं।
  • हर threshold के दोनों तरफ़: layout design के मुताबिक़ बदलता है, जैसे 840 dp से two panes।
  • Safe area: system bar, cut-out या home indicator के नीचे कुछ भी tappable नहीं।
  • सबसे बड़ा font और display size: text कटने के बजाय wrap होता है, और हर action scroll करके पहुँच में रहता है।
Width in dp = width in pixels × 160 ÷ density (dpi)

1080 px at 420 dpi  ->  ~411 dp   compact
1198 px at 320 dpi  ->   599 dp   compact  (just below the threshold)
1200 px at 320 dpi  ->   600 dp   medium   (first value of the class)

Android window size classes (width)
  compact    < 600 dp       almost all phones in portrait
  medium     600 - 839 dp   most tablets and unfolded foldables in portrait
  expanded   840 - 1199 dp  most tablets in landscape

On an Android emulator
  adb shell wm density 320
  adb shell wm size 1198x2000      # 599 dp, then 1200x2000 for 600 dp
  adb shell wm size reset && adb shell wm density reset

आज़माएँ: बाउंड्री वैल्यू जनरेटर

Orientation और दूसरे configuration changes

Android पर rotation एक configuration change है: default रूप से system मौजूदा screen (activity) को destroy करके फिर से बनाता है। App ने जो save नहीं किया वह खो जाता है: टाइप किया text, scroll position, चुना हुआ tab, खुला dialog, और चल रहा request दो बार जा सकता है या उसका result खो सकता है। Foldable को fold या unfold करना, split-screen window का size बदलना, और font size, dark mode या language बदलना, यही recreation चलाते हैं, इसलिए rotation उस state saving को टेस्ट करने का सबसे तेज़ तरीका है जिस पर events का यह पूरा परिवार निर्भर है।

iOS screen को बनाए रखता है और नए size के हिसाब से, और size classes बदलें तो नई size classes के हिसाब से, उसका layout दोबारा करता है, इसलिए iOS पर rotation defects ज़्यादातर layout defects होते हैं: छिपा हुआ button, या focused field को ढकता keyboard। Landscape में phone की height छोटी हो जाती है (Android की compact height class 480 dp से कम है), और keyboard खुला हो तो सिर्फ़ एक या दो fields दिख सकते हैं।

किसी screen को portrait पर lock करना product decision है जिसे record किया जाए, अनुमान नहीं। WCAG 2.2 का success criterion 1.3.4 Orientation (level AA) इसकी अनुमति तभी देता है जब कोई ख़ास orientation अनिवार्य हो। और Android 16 को target करने वाले apps के लिए system उन screens पर orientation और resizability restrictions को ignore करता है जिनकी smallest width 600 dp या उससे ज़्यादा है, games जैसे कुछ अपवादों के साथ, इसलिए portrait-only app भी tablets और खुले foldables पर landscape में दिखता है।

  • Input वाली हर screen पर दो बार rotate करें: text, selections, scroll position, dialogs और मौजूदा step बने रहते हैं।
  • Pay या Submit चलते समय rotate करें: action एक ही बार जाता है और उसका result दिखता है।
  • Keyboard खुला रखकर landscape: focused field और submit action पहुँच में रहते हैं।
  • जहाँ app phones पर orientation lock करता है, वहाँ lock बना रहता है; system में auto-rotate बंद हो तो app user की orientation बनाए रखता है।

Device matrix चुनना

Device matrix उन environments की लिखित सूची है जिन पर टीम टेस्ट करती है, हर एक कितनी गहराई से टेस्ट होता है, और वह वहाँ क्यों है। इसे किसी भी test design की तरह बनाएँ: पहले coverage items तय करें, यानी हर dimension की वे values जिन्हें कम से कम एक बार टेस्ट करना है, और उसके बाद ही वे devices चुनें जो उन्हें कवर करें।

  • Data: analytics, store consoles और crash reports से OS version, model, manufacturer और screen class के हिसाब से active users। Mobile website के लिए server logs की User-Agent strings से browser और device type मिलते हैं, पर Android पर Chrome अब एक तय Android version और model भेजता है, इसलिए ये दोनों analytics से लें। नया app अपने target market से शुरू करता है।
  • Coverage items: हर platform पर सबसे नया और सबसे पुराना supported OS, असल इस्तेमाल में सबसे छोटी width और हर बड़ी supported size class, कम memory वाला एक device, प्रमुख manufacturers, सबसे बड़ा font size और हर text direction।
  • Devices: ऐसे devices को प्राथमिकता दें जो एक साथ कई items कवर करें, फिर सबसे ज़्यादा sessions वाले models और crashes के cluster वाला हर model जोड़ें।
  • Tiers: Tier 1 के असली devices पर हर release में critical journeys और regression set चलता है; Tier 2 में emulators, simulators या device farm के devices पर हर release में smoke set चलता है; Tier 3 बड़ी releases से पहले चलता है।
  • Settings: language, orientation, font size और theme को हर combination टेस्ट करने के बजाय pairwise selection से devices में बाँटें।
  • Upkeep: हर device के होने का कारण लिखें, और हर quarter और हर नए OS version, नए minimum version या नए market के बाद matrix की समीक्षा करें।

आज़माएँ: रिस्क-बेस्ड टेस्ट जनरेटर आज़माएँ: User-Agent पार्सर

Worked example: food delivery app

App Android 10 (API 29) और उसके बाद, और iOS 17 और उसके बाद support करता है, iOS पर सिर्फ़ iPhone पर चलता है (कोई iPad version नहीं), और Arabic व English में इस्तेमाल होता है। पिछले 90 दिनों का illustrative data: 55% sessions Android पर, जिनमें से तीन-चौथाई manufacturers A और B पर; Android के 18% sessions 4 GB या उससे कम memory वाले devices पर; इस्तेमाल में सबसे छोटी width Android पर 360 dp और iPhone पर 375 points; Android के 6% sessions foldables और tablets पर; 70% sessions Arabic में; और payment page से लौटते समय manufacturer B के phones पर crashes का एक cluster।

पाँच devices हर coverage item को कम से कम एक बार कवर करते हैं, जैसा figure दिखाता है। Budget phone D3 सबसे ज़्यादा काम करता है, और manufacturer B का phone होने के कारण "payment से लौटना" scenario सबसे पहले उसी पर चलता है। चौड़ी screens सिर्फ़ device farm के foldable से कवर होती हैं: Android के 6% sessions पर एक accepted risk, जो matrix में लिखा है। Settings के लिए, पाँच devices पर दो-दो values वाले चार parameters से 5 × 16 = 80 पूरे combinations बनते हैं; एक pairwise set values के हर pair को सिर्फ़ 10 runs में कवर कर सकता है।

  • D1 और D2: हर platform पर सबसे नया OS और सबसे ज़्यादा sessions वाले models; D1 manufacturer A का भी है।
  • D3: सबसे पुराना supported Android, कम memory, Android पर सबसे छोटी width और अपने crash cluster के साथ manufacturer B।
  • D4: सबसे पुराना supported iOS और iPhone पर सबसे छोटी width।
  • D5: सबसे नया Android, medium और expanded width, और app चलते समय size बदलने वाली window।
Food delivery app का device matrix एक coverage check के रूप में: device से जुड़ा हर coverage item पाँच में से कम से कम एक device से कवर है, budget phone D3 चार items कवर करता है, और medium व expanded width सिर्फ़ foldable D5 पर टिकी हैं।
Coverage itemD1Android, maker A · सबसे नया · Tier 1D2iPhone · सबसे नया iOS · Tier 1D3Android budget, maker B · Android 10 · Tier 1D4सबसे छोटा iPhone · iOS 17 · Tier 2D5Android foldable · सबसे नया · Tier 2
सबसे ज़्यादा sessionsकवरकवरयह device कवर नहीं करतायह device कवर नहीं करतायह device कवर नहीं करता
सबसे नया OS versionकवरकवरयह device कवर नहीं करतायह device कवर नहीं करताकवर
सबसे पुराना supported OS versionयह device कवर नहीं करतायह device कवर नहीं करताकवरAndroid 10कवरiOS 17यह device कवर नहीं करता
इस्तेमाल में सबसे छोटी widthयह device कवर नहीं करतायह device कवर नहीं करताकवर360 dpकवर375 ptयह device कवर नहीं करता
Medium और expanded widthयह device कवर नहीं करतायह device कवर नहीं करतायह device कवर नहीं करतायह device कवर नहीं करताकवर
App चलते समय window का size बदलनायह device कवर नहीं करतायह device कवर नहीं करतायह device कवर नहीं करतायह device कवर नहीं करताकवरfold, unfold
कम memory (4 GB या कम)यह device कवर नहीं करतायह device कवर नहीं करताकवर3 GBयह device कवर नहीं करतायह device कवर नहीं करता
Manufacturers A और Bकवरmaker Aयह device कवर नहीं करताकवरmaker B, crash clusterयह device कवर नहीं करतायह device कवर नहीं करता
Settings: language, orientation, font size और themepairwise runspairwise runspairwise runspairwise runspairwise runs
  • यह device कवर करता है
  • Settings का pairwise set हर device पर कवर करता है

Worked example का illustrative data। जिस row में कोई covered cell न हो वह coverage gap है: एक device जोड़ें, या risk को लिखित में स्वीकार करें।

Device matrix: food delivery app (illustrative data, last 90 days)

ID  Device                         OS                   Runs on      Tier
D1  Android mid-range, maker A     newest Android       real device  1
D2  iPhone, standard size          newest iOS           real device  1
D3  Android budget, maker B, 3 GB  Android 10 (oldest)  real device  1
D4  iPhone, smallest (375 pt)      iOS 17 (oldest)      device farm  2
D5  Android foldable               newest Android       device farm  2

Tier 1: critical journeys + regression set, every release
Tier 2: smoke set of critical journeys, every release
Tier 3: other models above 1% of sessions, before major releases
Settings: language × orientation × font size × theme, pairwise across D1..D5

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

आम गलतियाँ

  • सिर्फ़ टीम के अपने phones पर टेस्ट करना, जो आम तौर पर नए, बड़े और तेज़ होते हैं, default font size और English के साथ।
  • अपने users के data के बजाय general market rankings से devices चुनना।
  • Rotation को सिर्फ़ देखकर जाँचना, यह कभी न जाँचना कि टाइप किया input, खुले dialogs और चल रहे requests बचते हैं या नहीं।
  • User settings को अनदेखा करना: सबसे बड़ा font, display size, dark mode और right-to-left किसी screen को एक अलग model से ज़्यादा बदल देते हैं।
  • Coverage items के बजाय devices गिनना: पाँच मिलते-जुलते flagship phones तीन सोच-समझकर चुने phones से कम कवर करते हैं।
  • बिना कारणों और बिना review date वाला matrix रखना, जिससे उसमें पिछले साल के devices ही बने रहते हैं।

QA का नज़रिया

Matrix उन लोगों के साथ बनाएँ जिनके पास उसके inputs हैं: product owner supported OS versions, markets और form factors तय करता है; developers जानते हैं कि कौन सी screens size classes के हिसाब से ढलती हैं या orientation lock करती हैं; analytics और crash reporting जिसके पास है वह data देता है। जल्दी पूछें: हम सबसे पुराना कौन सा OS support करते हैं और क्यों? क्या हम tablets और foldables support करते हैं या सिर्फ़ install होने देते हैं? क्या इस screen पर portrait-only अनिवार्य है? जवाब matrix के साथ लिखें।

Test reports में लिखें कि हर test किन devices और tiers पर चला, और इस release में कौन से coverage items कवर नहीं हुए। Bug reports में model, OS version, orientation, font और display size, language, और device असली था या emulated, यह लिखें। अगर कोई defect एक device पर दिखे, तो उसी class के दूसरे device पर आज़माएँ: अगर वह reproduce हो, तो defect किसी screen class या setting का है, किसी एक model का नहीं।

अभ्यास

Clinic booking app के लिए device matrix चुनें

आपका काम

एक clinic booking app Android 11 (API 30) और उसके बाद, और iOS 17 और उसके बाद support करता है; Android पर यह tablets पर भी install होता है। Illustrative data: 60% sessions Android पर, ज़्यादातर दो manufacturers से; Android के एक-चौथाई sessions 4 GB या उससे कम memory वाले devices पर, ज़्यादातर Android 11 और 12 पर; Android के 5% sessions tablets पर; 65% sessions Arabic में। Users शिकायत करते हैं कि booking form "कभी-कभी" चुना हुआ time slot खो देता है।

टीम चार असली devices रख सकती है और उसके पास device farm का access है। Matrix चुनें और सबसे पहले चलाए जाने वाले checks लिखें।

चरण
  1. Coverage items की सूची बनाएँ।
  2. ऐसे चार असली devices चुनें जो ज़्यादा से ज़्यादा items कवर करें, और बाक़ी के लिए device farm इस्तेमाल करें।
  3. जाँचें कि हर coverage item कम से कम एक बार कवर हुआ है।
  4. Reported defect से शुरू करके screen और orientation के पहले चार checks लिखें।
मॉडल उत्तर दिखाएँ
मॉडल उत्तर

Coverage items: सबसे नया Android और सबसे नया iOS; Android 11 और iOS 17; हर platform पर इस्तेमाल में सबसे छोटी phone width; medium और expanded width (portrait और landscape में एक Android tablet); 4 GB या उससे कम memory; दो प्रमुख manufacturers; हर platform पर सबसे बड़ा font size; Arabic और English।

Tier 1, असली devices: R1, सबसे नए Android पर manufacturer A का सबसे ज़्यादा इस्तेमाल होने वाला model, Arabic में; R2, सबसे नए iOS पर एक iPhone, Arabic में; R3, Android 11 पर manufacturer B का 4 GB phone, data की सबसे छोटी Android width और सबसे बड़े font के साथ, English में; R4, iOS 17 पर data का सबसे छोटा iPhone, सबसे बड़े Dynamic Type size के साथ। Tier 2, device farm: दोनों orientations में एक Android tablet। हर item कवर है; tablet सिर्फ़ farm में, Android के 5% sessions पर एक accepted risk जिसे matrix record करता है।

पहले checks: R3 पर एक time slot चुनें, दो बार rotate करें, फिर app छोड़कर लौटें, Don’t keep activities चालू करके भी; slot चुना हुआ रहना चाहिए, क्योंकि state restore न करने वाली दोबारा बनी screen या बंद हुआ process "कभी-कभी" की संभावित वजह है। R1 और R2 पर keyboard खुला रखकर landscape में Book button पहुँच में रहता है। R3 और R4 पर सबसे बड़ा font कोई time slot नहीं काटता और form scroll होता है। Tablet पर portrait में medium layout और landscape में expanded layout काम करते हैं, और rotation के बाद slot बना रहता है।

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

Device matrix में कितने devices चाहिए?

कोई तय संख्या नहीं है। Matrix तब काफ़ी है जब हर coverage item कम से कम एक device से कवर हो और आपके ज़्यादातर sessions वाले combinations असली devices पर चलें। एक छोटी टीम अक्सर चार या पाँच सोच-समझकर चुने असली devices और emulators, simulators या device farm से मुख्य items कवर कर लेती है।

क्या fragmentation testing में emulators और simulators असली devices की जगह ले सकते हैं?

Screen sizes, densities, OS versions, orientation, font size और language के लिए वे ज़्यादातर checks के लिए तेज़ और काफ़ी सटीक हैं, और 600 dp जैसे thresholds तक पहुँचना आसान बनाते हैं। वे manufacturer system layers, असली memory pressure, performance, cameras या sensors नहीं दोहराते, इसलिए इन risks वाले devices असली होने चाहिए। Mobile testing guide device strategy को विस्तार से बताता है।

अगर app portrait-only है तो क्या landscape टेस्ट करूँ?

हाँ। जाँचें कि phones पर lock बना रहता है और जहाँ lock लागू नहीं होता वहाँ कुछ नहीं टूटता: split-screen और foldables window बदलते ही हैं, और Android 16 को target करने वाले apps बड़ी screens पर portrait में नहीं रखे जाते। यह भी पूछें कि क्या portrait-only अनिवार्य है, क्योंकि वरना WCAG 2.2 का criterion 1.3.4 content से दोनों orientations में काम करने की अपेक्षा करता है।

Matrix कितनी बार बदलना चाहिए?

इसकी समीक्षा एक तय लय पर करें, जैसे हर quarter, और जब भी नया OS version आए, minimum supported version बदले, app किसी नए market में जाए, या crash reports किसी ऐसे model पर इकट्ठा हों जिसे matrix कवर नहीं करता।

संदर्भ

  • Certified Tester Mobile Application Testing (CT-MAT)ISTQB · 2019मोबाइल टेस्टिंग पर ISTQB का specialist पाठ्यक्रम: ऐप के प्रकार, डिवाइस व प्लेटफ़ॉर्म की चुनौतियाँ, टेस्ट प्रकार और टूल।
  • Core app quality guidelinesAndroid Developers (Google)Android ऐप के लिए Google के बुनियादी गुणवत्ता मानदंड — विज़ुअल अनुभव, कार्यक्षमता, परफ़ॉर्मेंस, प्राइवेसी और सुरक्षा — उन्हें जाँचने वाले टेस्ट के साथ।
  • Web Content Accessibility Guidelines (WCAG) 2.2W3C · 2024W3C की Recommendation जो सुलभ वेब कंटेंट के लिए टेस्ट करने योग्य success criteria तय करती है — चार सिद्धांतों और तीन conformance स्तरों (A, AA, AAA) में व्यवस्थित।
  • ISTQB Certified Tester Foundation Level (CTFL) v4.0ISTQB · 2023सॉफ़्टवेयर टेस्टिंग का फ़ाउंडेशन पाठ्यक्रम: टेस्ट स्तर और प्रकार, टेस्ट डिज़ाइन तकनीकें, टेस्ट प्रबंधन और टूल।

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

फ़ीचर को संभावना और प्रभाव के आधार पर स्कोर दें, फिर प्राथमिकता वाला risk-based टेस्ट प्लान जनरेट करें।

टेस्ट डिज़ाइन

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

वेब

किसी फ़ीचर के लिए functional, negative, security, usability और compatibility पहलुओं को कवर करने वाले उच्च-स्तरीय टेस्ट सिनेरियो जनरेट करें।

टेस्ट डिज़ाइन

और गहराई से

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

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