Qt におけるベストプラクティス

Qt におけるベストプラクティス
株式会社SRA
産業第1事業部
シニアマネージャー
山口 大介
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
Content
• SRAとQt
• Qtにおけるベストプラクティス
•
•
•
•
Qtにおけるテスト
Qtにおける高速化
Qtにおける多言語対応
その他
• まとめ
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
2
SRA と Qt
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
株式会社 SRA (Software Research Associates, Inc.)
設
⽴
代表取締役社⻑
資 本 ⾦
売
上
従業員数
:
:
:
:
1967年11月20日
⿅島 亨
26億4,020万円
365億円(2015年3月期 SRAHD連結)
168億円(2015年3月期 SRA単体)
: 958名(2015年4月1日現在)
SRA国内拠点
SRA海外拠点
㈱ SRAホールディングス
㈱ SRA(東京本社)
㈱ ソフトウェア・サイエンス
㈱ AIT
㈱ SRAプロフェッショナルサービス
㈱ クレディスト
SRA OSS, Inc. /日本支社
㈱SRA東北
㈱SRA 中部事業所(名古屋)
㈱SRA 関西事業所(大阪)
㈱SRA西日本
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
ボールダー研究所
(アメリカ コロラド州)
SRA AMERICA, Inc.
(アメリカ ニューヨーク州)
SRA(Europe) B.V.
(オランダ アムステルダム)
SRA OSS, Inc.
(アメリカ カリフォルニア州)
InterTech Data Systems, Inc.
(アメリカ カリフォルニア州)
SRA India Private Limited(インド バンガロア)
SRA South East Asia Pte. Ltd.(シンガポール)
大連愛鴻軟件有限公司(中国 大連)
★SJグループ (中国:上海・北京・南京・合肥・蘇州) ※業務・資本提携
4
SRAのQtへの取り組み
•
•
10年以上前からQtのビジネスを開始。
書籍の翻訳、Webや雑誌の記事執筆等にてQtの普及を推進。
2000
販売代理店契約打診
Trolltech が幕張で開催されたインターロップに出展
2002
シャープ(株) の依頼を受けた Trolltech社 から、
日本語でのトレーニング開催の打診 (Qt トレーニング提供開始)
2003
Trolltech社より依頼があり、代理店契約締結
2004
Qt Embedded 取り扱い開始
2008
SRAオリジナル 組込み向けQtソリューション開発、販売開始
2010
eT-Kernel/POSIXへQtを移植、製品化
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
5
SRAの提供するサービス、製品
セミナー
- 無料体験セミナー
- 有償トレーニング
コンサルテーション
- 導入支援
- カスタマイズ、チューニング
開発
- Qtノウハウを持った開発チームによる開発支援
- Qtコンサルタントによるサポート体制
- Squish for Qtにてテスト自動化
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
販売
- 各種ライセンス
- オリジナルQtソリューション
・SWキーボード「Qtouch」
・日本語入力モジュール「Qinput」
- 自動テストツール Squish for Qt
- Qt Adapter for T-Kernel
サポート
- 日本語によるサポート
6
Qtにおけるベストプラクティス
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
Qt でどうする?
ライセンス
パフォーマンス
多言語対応
テスト
マルチ
プラット
フォーム
デバイス
ポーティング
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
アーキテクチャ
Qt5
VerUp
SW KB
日本語⼊⼒
8
よく問題となることは…
・バグ、障害
・性能が出ない
・アーキテクチャ
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
9
困らないためにどこでつぶしておくか…
・バグ、障害 → 実装、テスト
・性能が出ない → 実装、設計
・アーキテクチャ → 設計
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
10
Qtを活用するには…
・Qtのことをよく知る
・課題を明確にし、解決策を導き出す
・自動化
・SRAをうまく使う
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
11
Qtにおけるテスト
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
Qt におけるテストCI環境
静的解析、動的解析
単体テスト
GUI テスト
Jenkins
コードカバレッジ
集計
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
Coverity
Fortify
CPPCheck
Valgrind
Purify
QTestLib
Google Mock
Squish for Qt
Squish Coco
Covertura
13
工程
プログラミング
単体・結合テスト
ツール名
概要説明
Coverity
Fortify
CPPCheck
Purify
Valgrind
静的解析、動的解析ツール
QTestLib
ユニットテスト用フレームワーク
Google Mock
検査対象のモジュールが、その下位モ
ジュールを正しく利用しているかを検証
する
Squish
ユーザ操作をスクリプトに記録し、検証
コードを追加することで、回帰テストを
自動化する
Squish Coco
コードカバレッジ分析ツール
Cobertura
Squish Coco で出⼒した分析結果を
Jenkins と連携させるためのプラグイン
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
14
Squish for Qtとは?
•
•
•
•
•
Qt 専用の自動テストツール
アプリケーションの修正不要
クロスプラットフォーム
バッチ実⾏・リモート実⾏
Jenkinsとの連携によりCI化可能
ホスト側
テストスクリプト
Squish IDE
Squish
Runner
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
凡例
作成部分
利用部分
ターゲット側
テスト対象
アプリケーション
Squish
Server
15
画面イメージ (Jenkins 連携)
カバレッジ
(Squish Coco)
静的解析
(Coverity、Foritfy、
CPPCheck)
単体テスト
(QTestLib)
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
16
Qt における高速化
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
QML Profiler
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
18
Qt Quick Compilerとは
•
•
QMLをC++コードに変換
メリット
• アプリ実⾏時のQMLファイルコンパイル時間削減
• JITが使えない環境でのJavaScript高速化
• iOS, Windows Phone
• QMLソースコードの秘匿
•
測定条件
• 4413⾏のQML
• Rectangle + MouseArea のペアを20×20個展開 Qt.createComponent()を
25回実⾏し平均を計算
• 毎回QQmlComponent::clearComponentCache()でキャッシュをクリア
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
19
実⾏結果(コンパイル時間)
実行環境
コンパイラ無し
コンパイラ有り
Linux/X11
344.20 ms
20.00 ms
Linux/Eglfs
5432.12 ms
349.20 ms
Mac OS X
243.56 ms
13.00 ms
•
Linux/X11
– Core 2 Duo E6750 2.66GHz (2GB)
•
Linux/Eglfs
– Raspberry-pi: ARM1176JZF-S(ARM11) 700MHz (512MB)
•
Mac OS X
– Core i7 2.8GHz 4558U (16GB)
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
20
Qtにおける多言語対応
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
Qt Linguistによる多言語化
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="ja">
<context>
<name>CloseButton</name>
<message>
<source>Name</source>
<translation></translation>
</message>
</context>
.ts ファイル
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="ja">
<context>
<name>CloseButton</name>
<message>
<source>Name</source>
<translation>名前</translation>
</message>
</context>
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
22
翻訳の仕組み
QTranslator translator;
translator.load(“~.qm”);
qApp.installTranslator(&translator);
QLabel *senderLabel = new QLabel(tr("Name"));
QTranslator::translate(…)
.ts ファイル (XML)
<message>
<source>Name</source>
<translation>名前</translation>
</message>
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
.qm ファイル(バイナリ)
lrelease
“Name”
“Number”
…
=> “名前”
=> “番号”
23
• ⽂字列の⻑さの変更によるはみ出しへの対応は?
C++では、要件に合わせたWidgetのカスタムが必要
QML では、Text Element が持つ、fontSizeMode プロパティ
で制御可能。
• 翻訳メモリとの連係は?
Toradosが生成するXLIFのようなXML形式との連係も可能。
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
24
その他
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
Qt4からQt5へのバージョンアップ
• Porting Guide
http://doc.qt.io/qt-5/portingguide.html
• Porting QML Applications to Qt 5
http://doc.qt.io/qt-5/qtquick-porting-qt5.html
• Porting from Qt 4 to Qt 5
http://www.kdab.com/porting-from-qt-4-to-qt-5/
• Automated porting from Qt 4 to Qt 5
http://www.kdab.com/automated-porting-from-qt-4-to-qt-5/
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
26
Qtのライセンス
商用版
プロプライエタリ開発
可能
ソースコード公開不要
Qtソースコードを
改変した際の公開義務
LGPL v2.1、v3
可能
GPL v2
不可
但し、LGPL の義務を
準拠のこと
GPL条件に準拠した開発かつ
ソースコード公開も必要
なし
あり
あり
バージョンアップ
保守契約に基づき提供
無償にて提供
無償にて提供
技術サポート
サポ-ト契約に基づき提供
別途有償にて
SRAより提供
別途有償にて提供
リバースエンジニアリングの禁止
可能
不可能
-
Qt使用の明示義務
なし
あり
あり
Qt自体の配布義務
なし
あり
あり
コードでの差異
Qt Charts, Qt Data Visualization, Virtual KeyBoard, Qt Quick Compiler,
Qt Quick Enterprise Controls, Qt Quick 2D Renderer,
Qt Enterprise Tooling等の商用版限定のアドオンが存在
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
27
Qt LGPLの注意点
• Qt 4.5 以降のバージョンでのみ LGPL が使用可能。
• Qt LGPL 版の改変の際の公開義務については、Qtライブラリとアプリ
ケーションソースコードのスタティックリンクや、バグの独自修正を
⾏った場合なども含まれる。
• Qt LGPL 版を使用して作成したアプリケーションのライセンスに、
リバースエンジニアリングを禁止する条項を⼊れられない。
• 同一プロジェクト内で、Qt 商用版を使用する開発者がいる場合に、
他の開発者が Qt LGPL/GPL 版を使用することはできない。
• Qt LGPL 版で開発をした場合、そのアプリケーションは⼆度と
Qt 商用版で開発することができない。
• LGPL v3では、一部の場合を除きインストール用情報を提供する必要。
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
※ ご利用頂く際には、法務部門様へ貴社のコーポレートポリシーや
ライセンスの法的解釈についてご確認頂くことをお奨めします。
28
ボードへのポーティング
• Qt Device Creationとしてスタックにてすぐに評価ボードで
実⾏可能な環境を提供
http://doc.qt.io/QtEnterpriseEmbedded/index.html
-
Nexus 7 (2012/2013) (embedded Android)
Boundary Devices i.MX6 Boards
SABRE SD i.MX6Quad (embedded Linux)
SABRE SD i.MX6Dual (embedded Linux)
Toradex Apalis iMX6 (embedded Linux)
Toradex Colibri VF50 and VF61 (embedded Linux)
ArchiTech Tibidabo (embedded Linux)
BeagleBone Black (embedded Linux)
Raspberry Pi Model B (embedded Linux)
• ルネサスエレクトロニクス R-CAR, RZ/Gでもサポート
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
29
まとめ
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
最初にコストをかけてでも
仕様検討や設計、テスト環境を確実に。
80
60
40
20
0
仕様検討
設計
実装
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
テスト
ユーザ評価
Qtをよく知り、活用しよう
幅広い開発に関する知識をQtトレーニングで
課題となる技術の検証をQtコンサルティングで
開発の際のQtの使い方、仕様をQtサポートにて
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
Thank you!
http://www.sra.co.jp/qt/
[email protected]
※ 本資料に記述されている企業名、および製品名は、各社の登録商標または商標です。
Copyright© 2015 Software Research Associates, Inc. All Rights Reserved