डिवाइस फ़्रैगमेंटेशन
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 resetOrientation और दूसरे 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।
| Coverage item | D1Android, maker A · सबसे नया · Tier 1 | D2iPhone · सबसे नया iOS · Tier 1 | D3Android budget, maker B · Android 10 · Tier 1 | D4सबसे छोटा iPhone · iOS 17 · Tier 2 | D5Android 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 और theme | pairwise runs | pairwise runs | pairwise runs | pairwise runs | pairwise 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 लिखें।
- Coverage items की सूची बनाएँ।
- ऐसे चार असली devices चुनें जो ज़्यादा से ज़्यादा items कवर करें, और बाक़ी के लिए device farm इस्तेमाल करें।
- जाँचें कि हर coverage item कम से कम एक बार कवर हुआ है।
- 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 का specialist पाठ्यक्रम: ऐप के प्रकार, डिवाइस व प्लेटफ़ॉर्म की चुनौतियाँ, टेस्ट प्रकार और टूल।
- Core app quality guidelinesAndroid ऐप के लिए Google के बुनियादी गुणवत्ता मानदंड — विज़ुअल अनुभव, कार्यक्षमता, परफ़ॉर्मेंस, प्राइवेसी और सुरक्षा — उन्हें जाँचने वाले टेस्ट के साथ।
- Web Content Accessibility Guidelines (WCAG) 2.2W3C की Recommendation जो सुलभ वेब कंटेंट के लिए टेस्ट करने योग्य success criteria तय करती है — चार सिद्धांतों और तीन conformance स्तरों (A, AA, AAA) में व्यवस्थित।
- ISTQB Certified Tester Foundation Level (CTFL) v4.0सॉफ़्टवेयर टेस्टिंग का फ़ाउंडेशन पाठ्यक्रम: टेस्ट स्तर और प्रकार, टेस्ट डिज़ाइन तकनीकें, टेस्ट प्रबंधन और टूल।
Mutqan tools से अभ्यास करें
पैरामीटर और उनकी वैल्यू से न्यूनतम pairwise (all-pairs) टेस्ट सेट जनरेट करें।
फ़ीचर को संभावना और प्रभाव के आधार पर स्कोर दें, फिर प्राथमिकता वाला risk-based टेस्ट प्लान जनरेट करें।
संख्यात्मक और लंबाई की constraints के लिए boundary value (min-1, min, min+1, nominal, max-1, max, max+1) जनरेट करें।
User-Agent स्ट्रिंग से ब्राउज़र, वर्शन, इंजन, OS, डिवाइस टाइप और बॉट की पहचान करें।
किसी फ़ीचर के लिए functional, negative, security, usability और compatibility पहलुओं को कवर करने वाले उच्च-स्तरीय टेस्ट सिनेरियो जनरेट करें।
और गहराई से
इस topic में आपकी प्रगति
प्रगति ट्रैक करने के लिए साइन इन करें
Topics पूर्ण चिह्नित करें, जहाँ छोड़ा था वहीं से जारी रखें और specialisation परीक्षाएँ खोलें।