The Evolution of Localizability Testing & Pseudo Localization Models Bj Rollison, Test Training Manager Microsoft, Inc.
The importance of localization Higher growth in international markets Governmental requirements “Localization is a right, not a privilege.” Success in software industry today depends on international scope
In the beginning… Hard coded strings in source code Source code recompiled per language main (void) { printf (“Hello World!”); return 0; }
Recompile localization ENU .rc
DEU .rc
JPN .rc
Others .rc
src
Ifdef src
Ifdef src
Ifdef src
Time & Cost
Present day… Single worldwide binary Resources isolated No compile localization Hello Bonjour こんにち
LoadString (hinst, IDS_HELLO, szFormat, cchMaxSz); while { char szString[cbMaxSz]; int nPercent = PercentComplete(); _tnsprintf(szString, szFormat, nPercent); DrawString (szString); //more code stuff here }
No compile localization ENU .rc
DEU .rc
JPN .rc
Other .rc
“GLOBAL” src
Reduced Time & Cost
Internationalization Model I18N Globalization
Localization L10N
Typical localization process ENU .rc
Pilot Langs. .rc
Tier 1 .rc
“GLOBAL” src
TIME + COST
Tier 2 .rc
Tier 3 .rc
Ifdef src
Localization lunacy Oh yeah…now localize it! Engineering costs > 40% of software localization Too many code defects found during localization processes Often no way of knowing where defects exist until localization begins No standardized development or localization processes
So what is localizability anyway? An engineering paradigm that allows modifications to the resources used by a software program Without introducing functional defects requiring modification of the source code Without requiring retesting of common functional areas
Inventing the wheel Identify common defects Isolate causes Craft model Define new heuristics
Localizability Entomology Missing files, setup failures Build scripts
Untranslated text Hard-coded strings Strings from external sources
Functionality problems String dependencies Over translation
Localizability Entomology Accessibility key issues Non-ASCII key mnemonics
Sentence composition Concatenated/dynamic strings
Truncated text/buffer overflow Hard-coded string buffer size Button text in string table User drawn menus/controls Hard-coded style layout in CSS
Localizability Entomology Character corruption Hard-coded font Not Unicode enabled Incorrect meta charset tag
User interface issue Dynamic controls Absolute coordinates Overlapping controls (string truncation) Registry keys used to display text
Taming the beast Set localization rules Append characters to all localizable strings Grow all string lengths Bracket all strings Replace accessibility key mnemonics
Pseudo localization models
Pseudo localization models
Hammer out the process Update BASE resources Generate pseudo loc dB Verify heuristics Generate pseudo build ALL ANSI charsets Unicode ONLY language
Test!
Internationalization Model Globalization I18N Localization International Sufficiency Testing
Global Functionality Testing
Localized Functionality Testing
Localizability Testing
User Interface Testing
L10N
Attacking localizability Pseudo localization model is not panacea for globalization testing Don’t retest everything Don’t use pseudo localized build to test general functionality Reuse automated tests
Focus on localizability class bugs
Pseudo localization as THE pilot M0 M1 Eng Lang Project
Mx
RC
Pseudo Localized Pilot
Pseudo localized build is the pilot language! Localization is not a release bottleneck!
Loc. Vers.
Spec. Loc. Vers.
Rebuilding the Tower of Babel Common linguistic databases Development tools Standardized processes Auto-resizing dialogs WYSIWYG localization tools Natural language processing
Summary English is Just Another Language (EJAL) Reengineering still drives localization Single worldwide binary & no-compile localization development strategy Pseudo localizability models qualify localizability & improve quality Localization = translation/simple modification
Questions