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/ qt-sales@sra.co.jp ※ 本資料に記述されている企業名、および製品名は、各社の登録商標または商標です。 Copyright© 2015 Software Research Associates, Inc. All Rights Reserved
© Copyright 2024