Стандарты оценки качества программной продукции

Российские:

ГОСТ Р ИСО/МЭК 9126-93 — Оценка программной продукции. Характеристики качества и руководства по их применению. (введен с 28.12.1993)
ГОСТ 28806-90 — Качество программных средств. Термины и определения. (введен с 25.12.1990)
ГОСТ 28195-89 — Оценка качества программных средств. Общие положения. (введен с 01.07.1990)

Международные:

ISO/IEC 25010:2011 — Systems and software engineering. Systems and software Quality Requirements and Evaluation (SQuaRE). System and software quality models.
ISO/IEC 25030:2007 — Software engineering. Software product Quality Requirements and Evaluation (SQuaRE). Quality requirements.

[Android] Изменение host-файла

Задача: добавить в host-файл свою запись

Элегантное решение на примере эмулятора:

1. Запустить эмулятор: emulator -avd <EmulatorName> -partition-size 256

2. Выполнить команду adb shell

3. И последний этап: echo 127.0.0.1 NewHost >> /etc/hosts

[Tizen] Еще один способ узнать номер версии и сборки

Модель устройства, версию и номер сборки можно узнать в настройках телефона: «Настройки» -> «Сведения о телефоне». Но можно и так:

sdb shell # cat /etc/info.ini Будет выведено примерно следующее:

[Version]
Model=Ref.Device-PQ;
Build=Tizen_Ref.Device-PQ_20131108.1647;
[Build]
Date=2013.11.08;
Time=16:47:13;

Reference Device-PQ — это устройство для разработчиков, базирующееся на Samsung Galaxy S3.

Возможные проблемы из-за отсутствия Google Play services

Наша команда сейчас работает над одним Android-приложением. Дали мне его на тестирование. Пробую запустить на своем телефоне -> приложение сразу же аварийно завершает работу. В логах:

E/AndroidRuntime(5342): at com.htc.mobileshop.MainActivity.checkPlayServices(MainActivity.java:215)

Запускаю на другом устройстве -> ошибки нет, все стартует нормально. Так что же это может быть? Оказывается, не так давно я удалил со своего телефона системное приложение «Google Play services» за ненадобностью. И вот, как оказалось, что если не обрабатывать исключения, связанные с невозможностью обнаружить Play services, мы можем получить ситуацию, что наше приложение сразу же будет крашиться. А вот, к примеру, приложение Foursquare при своем запуске сразу же оповещает пользователя о том, что для дальнейшей работы с приложением необходимо установить «Google Play services».

[Android] Средства для анализа использования памяти

adb shell cat /proc/meminfo — покажет общую информацию по использованию памяти в системе. Наиболее важная и интересная информация содержится только в первых строчках вывода:

MemTotal: 419932 kB
MemFree: 11788 kB
Buffers: 3436 kB
Cached: 82272 kB
SwapCached: 14384 kB
...

MemTotal — это общий объем памяти, доступный для ядра и пользовательского пространства (зачастую меньше, чем фактический объем памяти устройства, так как некоторые количество памяти резервируется для радио, DMA буферов и т.д.).

MemFree — объем оперативной памяти, который не используется вообще.

Кеш оперативной памяти используется для кеша файловой системы и других подобных вещей. По-хорошему, системный кеш должнен иметь хотя бы 20 МБ (или около того) для того, чтобы избегать ситуации попадания в состояние подкачки.

adb shell dumpsys meminfo — также покажет информацию об используемой памяти в системе, но в более подробном виде (к примеру, по каждому запущенному Java-процессу):

C:\Users\ADmi>adb shell dumpsys meminfo
Applications Memory Usage (kB):
Uptime: 841043 Realtime: 841036

Total PSS by process:
    79059 kB: android.process.acore (pid 932)
    58356 kB: com.xxx (pid 6409)
    36592 kB: com.htc.launcher (pid 1062)
    36358 kB: system (pid 442)
    ...

Total PSS by OOM adjustment:
    36358 kB: System
               36358 kB: system (pid 442)
    58783 kB: Persistent
               27112 kB: com.android.systemui (pid 579)
               14913 kB: com.android.htcdialer (pid 729)
               11219 kB: com.android.phone (pid 715)
                5539 kB: com.android.nfc (pid 746)
    58356 kB: Foreground
               58356 kB: com.xxx (pid 6409)
    47710 kB: Visible
               ...

Total PSS by category:
   217584 kB: Dalvik
   148600 kB: Unknown
    50546 kB: .so mmap
    38764 kB: .apk mmap
    28005 kB: Other mmap
    13165 kB: .dex mmap
     1928 kB: Other dev
     1881 kB: Native
      696 kB: .ttf mmap
       40 kB: Cursor
       12 kB: Ashmem
       11 kB: .jar mmap

Total PSS: 501232 kB
      KSM: 0 kB saved from shared 0 kB
           0 kB unshared; 0 kB volatile

Зная PID или имя процесса можно вывести подробный отчет по нему:

adb shell dumpsys com.xxx — покажет:

C:\Users\ADmi>adb shell dumpsys meminfo com.xxx
Applications Memory Usage (kB):
Uptime: 939680 Realtime: 939674

** MEMINFO in pid 6409 [com.xxx] **
                             Shared  Private     Heap     Heap
                       Pss    Dirty    Dirty     Size    Alloc
                    ------   ------   ------   ------   ------
           Native       72      168       68    16516    16209
           Dalvik    48471     6512    48284    56867    47084
           Cursor        0        0        0
           Ashmem        2        4        0
        Other dev      268       52      264
         .so mmap     3087     6612     2508
        .jar mmap        0        0        0
        .apk mmap      149        0        0
        .ttf mmap      622        0        0
        .dex mmap      728        0        0
       Other mmap      956      636       92
          Unknown     3980     4328     3868
            TOTAL    58335    18312    55084    73383    63293

 Objects
           Views:      276     ViewRootImpl:        2
     AppContexts:        3       Activities:        2
          Assets:        4    AssetManagers:        4
   Local Binders:       13    Proxy Binders:       21
Death Recipients:        1
 OpenSSL Sockets:        1

 SQL
     MEMORY_USED:      112
PAGECACHE_OVERFLOW:       28      MALLOC_SIZE:       62

 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       20             57       29/34/10  /data/data/com.xxx/databases/google_analytics_
v2.db
Uptime: 939889 Realtime now=939883

Про Tizen, HTML5-приложения и большое потребление памяти

В последнее время наша команда разработчиков занимается портированием нескольких игр под платформу Tizen (Linux based):

Linux TRATS2 3.0.15-00002-g277d62a #1-Tizen SMP PREEMPT Tue Jul 16 13:12:44 KST 2013 armv7l GNU/Linux

Есть игра X, которую решили писать на HTML5 (в качестве фреймворка был выбран Cocos2D HTML5). И вот писали наши разработчики эту игру целых четыре месяца, а потом выяснилось, что игра уже через небольшой промежуток времени начинает сильно тормозить, а потом и вовсе зависает (вместе с самим Tizen-устройством).

Первая мысль — где-то течет память. Начали профилировать приложение, смотреть, сколько памяти потребляет JavaScript. Нашли проблемные участки, залатали. Но на общий процесс тормозов и зависаний это не сказалось. Хм… Тут нам бы очень помог сам Tizen, если бы умел выводить информацию об используемой и свободной памяти (в Android’е это настраивается в разделе разработчика). Tizen же настолько сырой, что ничего подобного в нем нет (потом, возможно, и появится). Тем не менее, к устройству можно подключиться через sdb (аналог adb), и через консоль устройства вызвать нужные команды для просмотра памяти устройства.

sdb shell
sh-4.1$ free

total used free shared buffers cached
Mem: 797944 779236 18708 0 7256 153432
-/+ buffers/cache: 618548 179396

Видим, что устройство обладает ~780 МБ оперативной памяти. Сама операционная система занимает порядка 300 МБ. Вычисляем: 780 — 300 = 480 МБ — это размер свободной памяти. Теперь запускаем нашу игру и видим, что свободной памяти стало всего ~18 МБ. 480 — 18 = 462 МБ — столько ушло под виртуальную машину, которая запускает HTML5-приложения, и непосредственно под нашу игру. Это слишком много, а тормоза и зависания, скорее всего связаны с тем, что через некоторое время расходуется вся свободная память и начинает активно работать своп.

Теперь проблема ясна и уже можно приступать думать над тем, как оптимизировать игру.

[Chrome] Двойной скроллбар

Просматривая сайт Яндекс.Картинки, заметил, что Google Chrome (версия 30.0.1599.69, Windows 7) иногда прорисовывает двойной скроллбар (некорректно обрабатывается кастомный скроллбар?):

2013-10-15_151021PS: интересная статья как раз про реализацию кастомного скроллара.

Баг в приложении YouTube — 43 years ago

В официальном приложении YouTube для iOS (версия 2.1.0) есть интересный баг — если открыть страницу «Popular» (кстати, являющейся главной), то в списке видео в качестве их даты публикации значится «43 years ago«. Также если присмотреться, то во всех других разделах впереди даты размещения стоит слово «uploaded», но вот только не в «Popular».

Итак, 43 года назад — это отсылка к знаменитой компьютерной дате 1 января 1970 (начало «эры UNIX»). Параметры принимают это значение, если они по какой-то причине неправильно инициализируются. Слово «uploaded», скорее всего добавляется только к тем датам, которые инициализируются правильно, что в нашем случае совсем не так.

youtube_42years

Небольшой пример бага на сайте m.htccare.ru

Есть мобильная версия онлайн-магазина HTC в России — http://m.htccare.ru. На этом сайте имеется простецкая ошибка, заключающаяся в отсутствии проверки совершенных действий.

В разделе «Корзина» ссылка «Подтверждение» (находится в верхнем меню навигации) всегда активна, в результате чего минуя пункт «Доставка и оплата» можно совершить заказ, финальным аккордом которого будет сообщение о принятии заказа:

Ваш заказ № принят, информация о нем отправлена на вашу электронную почту.
Мы сделаем всё возможное чтобы доставить ваш заказ как можно быстрее.

Ждем вас снова!