Download presentation
Presentation is loading. Please wait.
1
2016年11月25日(金) アプライアンス&デジタルソリューション株式会社 デジタルAV事業部 京都支店 中村 香澄
2016年秋季 成果発表 2016年11月25日(金) アプライアンス&デジタルソリューション株式会社 デジタルAV事業部 京都支店 中村 香澄 デジタルAV事業部 京都支店 の 中村香澄です。 これから2016年秋季成果発表を始めます。よろしくお願いします。 ※10秒 ・発表時間:10分がベスト ・声の大きさ:後ろまで聞こえるように ・態度:スライドばかり見ない ・資料のわかりやすさ:アニメを使う ・自分の成果が書けているか:「成果発表」という趣旨にあっているか
2
目次 担当業務と成果 まとめ リファクタリング DTVソフトウェア開発 目標の達成度合と課題 下期の目標 こちらが、今回の発表内容です。
業務内容と成果では、私が担当したデジタルテレビのソフトウェア開発の内容と成果について発表します。 以下、紙面ではデジタルテレビをDTVとします。 まとめでは、上期の成果と課題をまとめ、下期の目標を発表します。 ※30秒
3
担当業務と成果 業務内容と成果 ※5秒
4
リファクタリング リファクタリングとは? →ソフトウェアの動作を変えずに、プログラムの内容を変えること
→ソフトウェアの動作を変えずに、プログラムの内容を変えること プログラムを見やすく、編集しやすくすることが目的 内容:使われていない関数・変数の削除 目標:DTVの内部構造について知る プログラム remote_control { } rokuga_kiki { } TV { } TVphone { } プログラム remote_control {{ } record_device { } TV { } 変数名を変更 不要な記述を削除 まず、私が担当しました、リファクタリングという作業について説明します。 リファクタリングとは、ソフトウェアの外部仕様を変えずに内部構造を変更することです。 この作業は、プログラムを見やすくし、編集しやすくすることが目的です。 これは一例であり、実際に削除したプログラムとは違うものなのですが、 変数名の変更、不要な記述の削除などがリファクタリングにあたります。 デジタルテレビのプログラムは、多くのメンバーと共有するものなので、見やすさは重要な要素といえます。 私は使われていない関数・変数を削除するというリファクタリングを通して、 DTVの内部構造、すなわち各モジュールのプログラムについて知ることを目標にしました。 削除した関数・変数は、ソフトウェアのバージョンアップに伴い、削除された機能に関するものです。 ※1分
5
リファクタリング eeprom DTVシステムの概略図 設定変更の定義部 パネル描画部 アプリケーション 担当 (選局、各種設定など) 箇所
モジュール間の 情報共有部 ドライバ (ハードウェアの制御) eeprom DB TVシステムは、アプリケーション部、ドライバ部、ハードウェア部で成り立っています。 簡単に説明しますと、 アプリケーション部は選局や各種設定などの機能、 ドライバ部はハードウェアを制御するソフトウェア、 ハードウェア部がオーディオやスピーカーの再生機能 となります。これにデータベースを加えて、TVシステムの大まかな全体像となります。 私がリファクタリングを担当したのは、アプリケーション部です。 未使用の関数・変数を削除するため、アプリケーションを構成する各モジュールについて学びました。 主に確認したのは、大きく分けて3つのモジュールです。 一つめは表示や設定の変更の制御部です。 各設定、例えばDTVを任意の時間で自動で起動させるオンタイマー設定は、 一つのアプリとして管理されています。一つ一つに起動までの時間や、 ドライバを使用する際の優先度、そのアプリを起動させるための関数などが定義されています。 二つめはパネルの描画部です。 パネルは、メニューから設定項目を選んだ際のこのようなウィンドウです。 このパネルの幅、高さ、背景の色、テキスト、画像などを描画します。 三つめはモジュール間の情報共有部です。 これは、各モジュールで設定した値を、他のモジュールが参照するために必要になります。 例えば、オンタイマー設定のオンオフ設定、時間、音量、チャンネルといった値は テレビの電源が切れても保持しなければなりませんし、 指定の時間になれば指定のチャンネル、音量で起動しなければなりません。 そこでeepromという不揮発性メモリを用いて、設定値を保持し、他のモジュールが参照します。 動作や役割がわからない関数や変数については、関数名や変数名に頼って削除することもありました。 そのため、自分が新しい関数や変数を定義する際は、一目見てどの機能かわかるような名前をつけようと心がけています。 ※1分 ハードウェア (オーディオ、スピーカーなど)
6
リファクタリング 録画しますか? 予約しますか? 初期化しますか? 録画する 予約する ??? ~問いかけ文リスト~ “予約しますか?”
“録画しますか?予約しますか?” “初期化しますか?” 初期化しますか? 録画する ~上選択肢リスト~ “はい” “録画する” “初期化する” 予約する ??? リファクタリングで注意すべき点として、 関数や変数の削除が、どのような影響を及ぼすか把握することがあります。 これも一例であり、実際のパネルを元にした架空のパネルなのですが、 このようなパネルがあったとします。 このパネルは、問いかけ文と選択肢を表示するために、 このような問いかけ文リストと、選択肢リストの2番目の要素を参照する仕様になっています。 ここで、「録画しますか?予約しますか?」の選択肢を削除したとします。 この場合、問いかけ文リストの2番目の要素が「初期化しますか?」になってしまい、 パネルの問いかけ文と選択肢が対応しなくなります。 このように、リファクタリングは関数や変数の影響範囲を把握しないと、 変更前には正常に動作していた機能が動作しなくなる、といったデグレを引き起こす可能性があります。 私は何度かデグレを起こしてしまいましたが、 変数の参照値を注視することで、なるべく早く解消することができました。 ※1分半 ~下選択肢リスト~ “いいえ” “予約する” “初期化しない”
7
ソフトウェア開発 内容:入力切換の仕様変更、外部機器の接続検出 目標:DTVについて理解し、仕様を実装する
追加する(リモコンの左右キーで選択できる) 入力切換 テレビ HDMI1 HDMI2 ビデオ 入力切換 テレビ HDMI1 HDMI2 < ビデオ D端子> 私はリファクタリングで各モジュールの役割について理解した後、 日本向けデジタルテレビの次世代モデルのソフトウェアの開発を担当しました。 プログラムを修正し、入力切換の仕様変更、外部機器の接続検出、バグの修正を行いました。 例として私が担当しました、入力切換パネル (このように、テレビ、HDMI、ビデオなどの切換を行う設定パネルです)に 「D端子」の選択肢を「ビデオ」の右に追加する、という仕様変更を解説します。 ※45秒
8
ソフトウェア開発 入力切換 テレビ HDMI1 HDMI2 ビデオ 入力切換 テレビ HDMI1 HDMI2
入力切換を 参照している 既存の箇所に 「D端子」を 追加する 入力切換 テレビ HDMI1 HDMI2 ビデオ 入力切換 テレビ HDMI1 HDMI2 < ビデオ D端子> 文字が入らないため パネルの幅を広くする、あるいは文字間隔を狭める 「D端子」という選択肢を増やしたことにより、既存のパネルでは文字が入りきらず、 表示できなくなります。そのため、パネルの幅を広くする必要があります。 しかし、実際は入力切換パネルを大きくと画面が見づらくなったり、見切れたりといった問題があるため、 文字間隔を設定する箇所も修正が必要でした。 また、今までの入力切換パネルは左右キーで操作する必要がないので、 左右キーが入力された際の処理は設定されていません。 つまり、このままでは左右キーを入力しても全く動きません。 「このキーが入力された場合はこの処理」という定義を行うキー関数を定義する必要もあります。 さらに、D端子が接続されたことを検出し、自動的に選択肢を切り換える必要もあります。 そして、入力切換を参照している、既存の箇所に、この選択肢を追加しなければなりません。 例えば、先ほどリファクタリングの項で解説した「オンタイマー設定」では、 指定の時刻に電源が自動でオンされた際の入力を設定できます。 ここの設定として、「D端子」を追加しなければなりません。 既存の入力切換では リモコンの左右キーを 受け付けていないため キーの受付を設定する D端子の入力を 検出する
9
ソフトウェア開発 DTV本体のキーでの動作 特定条件下で 設定できる項目 海外モデルとの 仕様の違い 2画面時の 変数の レイアウト
他のアプリ (接続機器一覧 など)への影響 特定条件下で 設定できる項目 想定していた 影響範囲 海外モデルとの 仕様の違い ここまでは、私が想定していた、「D端子」という選択肢を追加する際の影響範囲です。 しかし実際は想定できなかった影響範囲が数多くありました。 DTV本体に入力切換パネルを操作するキーがついているので、それを押した際の動作を定義する。 接続機器一覧表示など、他のアプリへ「D端子」を追加する。 ホテル向けモードなど、特定の条件下でのみ設定できる項目が、 先ほどのオンタイマーの例のように入力切換を参照している。 海外モデルと仕様を合わせる。 2画面になるとレイアウトが崩れるので、それも想定する。 既存の変数がオーバーフローする可能性があるので、値が異常にならないようにする。 などです。 2画面時の レイアウト 変数の オーバーフロー 想定できなかった影響範囲
10
まとめ まとめ
11
目標の達成度合と課題 リファクタリング 目標:DTVの内部構造について知る 課題:変数名に頼って、プログラムを修正している
アプリケーションを構成するモジュールのうち、3つを理解した 参照する値がずれないようにリファクタリングする知識を得た 課題:変数名に頼って、プログラムを修正している 削除する項目がわからない際、まずは項目名で当たりをつけて しまうことがあった プログラムの動作を一から理解し、DTVの内部構造について より理解を深める必要がある デバッグツールを用いて、変数名ではなく動作を見る
12
目標の達成度合と課題 ソフトウェア開発 目標:DTVについて理解し、仕様を実装する 課題:仕様変更の影響範囲が把握できていない
パネルの描画・レイアウトの変更を行えるようになった 外部機器の接続検出を行えるようになった 課題:仕様変更の影響範囲が把握できていない 一つの実装ごとに新たなバグを起こし、デグレになる 複数のモジュールやアプリが関わる場合は顕著 eepromによる情報共有が理解できていない
13
下期の目標 プログラムの動作を理解する 仕様変更の影響範囲を把握する 業務速度を向上させる 進捗、現状、問題点を把握する
C、lispを中心に学習する 仕様変更の影響範囲を把握する より多くのモジュールについて知る eepromによる情報共有について学ぶ 業務速度を向上させる デバッグツール(GDBなど)の利用に慣れる 進捗、現状、問題点を把握する 3つの観点に応じて、やるべきことを決定する
14
発表内容は以上です。 ご静聴ありがとうございました。 ありがとうございました!!
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.