分かりやすく伝えるってなんだ?(小ネタ)

経緯

ちょうど先日、仲間内で「あいつ何言ってるかわからん」という話題が上がったため、説明が分かりにくくなる原因を考えました。
今日はそこからさらに発展させて読みやすい文章について考えてみました。

※注意:本記事は私がお客様先に常駐して QAエンジニアをしている都合でその視点での記事になっています

わかりにくい文章 3か条

なぜ相手に言いたいことが伝わらないのか。
と考えたときに、以下の 3つに区分してみました。

  • 伝える相手が何を知りたいのかわからない、知らない
  • 純粋な語彙力(知識)不足・日本語力(文章構成力やら文法、敬語やら)不足
  • そもそも実は伝えようと思ってなくて、実は単なるつぶやき

おまけで、思考すっ飛び型(本人の中では連想ゲーム的につながっているけど、それが全く言葉になってないので前後のつながりが破綻する)というのもあるかなという話も。

2,3つ目に関しては、頑張れ!としか言えないし、おそらく本人は自覚がないと思います。
2つ目はもし業務で必要な人材なのであれば、周りの人間がちょっと細かいかなっていうレベルで指摘してあげる必要があります。
正直自覚がないと、違和感にも気づかないので一生成長はしないです。
いつか気づいてくれるは幻想です

どうしたら伝わりやすい文章になるんだろう?

ちょっとかんがえてみました。

目的や読み手を明確にする
全体の構成や流れを考える
語彙力や日本語力を磨き、違和感に気付く

例えばこんな感じでしょうか。

目的や情報の受取手を明確にする

テストの各工程において、何らかの情報を伝えることはどの立場であってもついて回りますよね。

  • 対自社のマネージャー
  • 対メンバー
  • 対お客様のマネージャー
  • 対開発者
  • etc...

相手に何を求めているのか、相手は何を知りたいのか。
そこを意識できているでしょうか。

また、あえて立場に限った話をしましたが、同じマネージャーでも気にするポイントは違うと思います。

相手が気にするポイントを把握しようとしていますか?

例えばメール一つとっても、誤字脱字が気になって気になってしまう人と、とにかく1秒でも早く情報が欲しい人など、様々です。

... まあ、誤字脱字は無いに越したことはないのですが、それを置いてもすぐ情報が欲しい人、というのもいると思います。そういう場合、推敲に1時間もかけて情報を渡すのではナンセンスです。

受け手の意識や心情に配慮できるとよいですね

全体の構成や流れを考える

最近よく現場で「報告書を読み上げるんじゃなくて、何を伝えたいのか考えて話すように」と言われます。

自分が一番伝えたいことは何か、相手が一番知りたいことは何かを考えて予め構成を考えておきましょう。

報告内容によっても構成を変える必要があります。

時系列順
結論から経緯
etc..

例えばセキュリティインシデントの場合は、とにかく時系列順に伝える必要がありますし、時間のないマネージャー向けの説明の場合は結論から話すなどの工夫が必要です。

語彙力や日本語力を磨き、違和感に気付く

本を読め!話はそれからだ。

…だとあまりにもひどいので、長くなり過ぎない程度にポイントを。

読むほうは慣れるまでテンパる可能性があるので、経験上、まずは書く文章から気を付けるようにしたほうがよいと思います。

読み返し方
  • 時間をおく
  • 印刷して読む
  • 音読する
  • 読み手の立場で読み返す
読み返すポイント
  • 日本語が正しいか
  • 誤字脱字はないか
  • 文章全体の表記ゆれはないか
  • スペースの使い方は適切か
  • 違和感のあるところはないか
  • やたらと読点、句点が多くはないか
  • 接続詞は多くないか、間違ってないか
  • 逆接の接続詞から入っていないか
  • 必要ない言葉が含まれていないか
  • 蒸気は私が現場で出荷判定会の場で報告するときに気を付けるポイントです。
  • 上記は、私が、現場で、出荷判定会の場で、報告するときに、気を付けるポイントです。
  • 上記は、私が現場で気を付けているポイントです。
まとめ

どうです?どの文章が一番読みやすかったですか?
あるいはどれも響かなかったですか?

情報の受け手を意識して、日本語力を磨いて、素敵なエンジニアライフを過ごしましょう!

開発者と作るテスト観点(小ネタ)

開発者と作るテスト観点

2019年にとあるプロジェクトで行った取り組みについて、備忘録がわりにまとめます。
そのものずばり、テストのための観点出しを開発チームと一緒になって行うことで、観点の過不足を補ったりや合意を取って進めることができました、というお話。

経緯

今回の評価対象は非常に難易度の高いものでした。
理由はいくつかあって

  1. 新サービスであること (e.g. ノウハウがまとまってない)
  2. テストチーム内に前任者がいないこと (e.g. すぐに頼れる人がいない)
  3. 環境が多岐に渡ること (e.g. 不具合の切り分けが難しい)
  4. ドメイン知識そのものの難易度が高いこと (e.g. 理解そのものが難しい)
  5. ボリュームが大きい
  6. メンバーに類似サービスの知見がない

etc....

のような感じでした。

取り組み

従来の進め方は以下の通りです

  • [テストチーム内] テスト対象の分析を行う
  • [テストチーム内] テスト計画を立てる
  • [テストチーム内] テスト観点出しをする
  • [開発チームに向けて] 概要レベルの観点レビューを行う
    • 基本的には 1回 こちらが観点を読みあげて、その場でチェックしてもらう
  • [テストチーム内] テスト詳細設計をする
  • [テストチーム内] テスト実装をする
  • [テストチーム内] テスト実施をする

今回は、まずテスト対象の分析に時間がかかったこと、開発物が出てくるのと仕様の FIX が計画時点ですでにテスト実施が始まってからでないと難しそうな予感を漂わせていたこと、その他もろもろの理由で、従来の進め方ではテストの遂行が行えないだろうと思われました。
そのため、以下の工夫を行いました。

  • 開発チーム、運用チーム、(必須ではないが) サポートチームを招いた「仕様理解MTG」を週次で実施
  • 仕様ができた(もしくはできる)順番にテスト観点だしをテストチームで行い、私(類似サービスの経験あり)がレビューをする
    • 観点をマインドマップの形にして、かなり細かいレベルで書く(必要に応じてテストデータ、パラメータも当てはめた)
  • レビューが済んだもののうち、不安が残るものは週次のMTGで対面で説明し、不明点を埋める
  • それ以外のものについては開発チーム側の見える場所に集約し、非対面で指摘をもらう

よかったこと

上記の取り組みを行うことで、開発チームの持つノウハウの吸収が行えました。
また、テスト観点漏れをかなり防げました。

悪かったこと

開発計画時点で考えていたことではなかったため、開発側の工数をだいぶ食ってしまった。
今回が初だったので、次回からは早い段階でこういう取り組みがしたい旨を共有しておく必要がある、と思った。 悪かったとは言われませんでしたが、反省点の一つです。

システムテスト自動化カンファレンス2019 (中編 1)(後で編集するよ)

概要

7回目のシステムテストの自動化に特化したカンファレンス

私の確認する 講演会場2 テーブル

テスト自動化プロジェクトを支える技術と仕組み / 伊藤由貴さん

ベリサーブでは、品質・検証会社として様々な業種や対象のテスト自動化を行っています。 今回は、テスト自動化プロジェクトを成功させるために整備してきた

ガイドライン テスト自動化プロセス エンジニアのロールとスキル定義 教育体制 などのノウハウ・仕組みについてご紹介します。

シュゴイ…
テストの専門会社らしいなあという平凡な感想も抱きました。
中にいる人は目指すところがわかりやすくてとても良いですね。

会社レベルの「テスト自動化普及」ミッションに立ち向かう話 / 松木直之さん

社内のSEの開発活動において「テスト自動化を普及させる」というミッションを背負って仕事をしています。SI、PKG・サービス開発など幅広く多数の組織があるなかで、会社としてテスト自動化が十分に進んでいることを目指しています。ですが「どんなテストを自動化する話なの?」「どこまですれば普及になるの?」「現場はそんな余裕ないんだよ」など、まったく簡単な話ではありません。私も道半ばですが、そういう活動の状況や施策についてご紹介します。うまくいくこと/いかないこと含め、同じ立場の人のヒントになれば幸いです。

共通部門や自動化普及推進担当のような人はぜひ 個々のプロジェクトではなく複数組織横断、マスでとらえる活動です ミッションの考え方、説明の仕方、何をKPIにするか、など 施策例(ツール、教育、ナレッジ、など)

前のセッションと似ているようで違う話。
同じような話になるのかなと思っていたのでちょっと意外。
QAの専門会社と,超大企業の中の自動推進部隊だと、目的もやりたいこともその先に待っているものも違うもんなあ。

自動テスト≠コスト削減
って話はよく聞くけど、じゃあどういう風に表現するの、ってところはちょっと面白かった。
具体的に表現しつつ、簡単にコスト削減、って書かないようにしよう。

休憩中に tweet まとめ。

システムテスト自動化カンファレンス2019 (前半) 後でいっぱい書き換える予定

概要

7回目のシステムテストの自動化に特化したカンファレンス

私の確認する 講演会場2 テーブル

AIを活用した交通事故削減サービスのテスト自動化(仮) / 鈴木翔太さん、馬 立東さん

AI をちゃんと理解できてなくて難しかった。
なんとなくやっていることはわかる気がするのだが、いずれのことについてもそれが「なぜ」必要になるのかがわからなかった。

EM×QA視点で進めるテスト自動化への取り組み / 斉藤健太さん

ウエディングパークでEM(エンジニアリングマネージャー)とQAチームの責任者をしております。 両役割の視点から、QAで考えるテスト計画や設計をもとに、エンジニアリングでテスト自動化を進めていく取り組みを始めました。 弊社ではテスト自動化が、ほぼ標準化されておらずゼロからの取り組みとなり、そこに向けてどういうアプローチで進めていってるか、どういう全体構成や技術で基盤作りをしようとしているかなど、具体的な事例を交えてお話します! QAチーム自体も、私が約1年半前に完全内製化で立ち上げたチームですので、これからテスト自動化を進めていこうと思っている皆さんの参考になればと思います!

▼キーワード

CI/CD、自動テスト(unit/api/e2e)、静的解析、コードメトリクス、Webスクレイピング・・・など

思ったよりわかりやすかった。自動テスト関係なく大事なことも話してた。

Serverless automation UI testing by using AWS Fargate / 引持力哉さん

弊社LIFULLではサービスの回帰テストを目的として自動システムテストを利用しています。 リリース前に約800ケースの自動システムテストを定期的に行っています。 先日、テスト実行環境をEC2インスタンスからAWS Fargateへ移行しました。 これにより、効率的なテスト実行環境を作り上げることができました。 具体的には以下のものです

サーバコストの効率化

課金発生がテスト実行時のみになったため。 テスト実行時間の短縮

実行環境のスケールアップによる実行時間の短縮 実行の並列化による実行時間の短縮 AWS Fargateでのテスト実行環境アーキテクチャと、構築時に得た知見等をお話できたら良いと思っております。

コスト削減(性能的な部分の)に成功した話。
めんどくさいことが、タスク定義を書くだけで解決できるようになった。

問題解決の時に、ツールのオプションに頼りすぎず、ChromeDriver で解決したところとても好感度高い。

休憩中に tweet まとめ

ffmpeg で動画を結合する方法 2 mpd ファイル編(memo)

ffmpeg で動画を結合する方法

ffmpeg で MPEG-DASH を扱う | ニコラボ

基本的な手順は上記の URL を参照しつつ実施しました。
上記の手順で詰まったところを補足しています。

環境

ffmpeg は今回 WSL 入れて、Ubuntu 上で下記を実施してインストールしました。

sudo apt install ffmpeg

手順

  1. mp4 ファイルを作成。作成方法は問わず。
  2. 下記コマンドを実行する
ffmpeg -re -i test.mp4 -map 0 -map 0 -c:v:0 copy -c:a:0 copy \
-filter:v:1 "scale=-2:360" -c:v:1 libx264 -profile:v:1 main -b:v:1 600k -c:a:1 aac -b:a:1 128k \
-f dash -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" \
-movflags +faststart test.mpd

ログ

ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 7 (Ubuntu 7.3.0-16ubuntu3) configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2017-08-25T06:57:06.000000Z Duration: 00:01:11.84, start: 0.000000, bitrate: 1383 kb/s Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 1253 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc (default) Metadata: creation_time : 2017-08-25T06:57:06.000000Z handler_name : ISO Media file produced by Google Inc. Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default) Metadata: creation_time : 2017-08-25T06:57:06.000000Z handler_name : ISO Media file produced by Google Inc. Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Stream #0:0 -> #0:2 (h264 (native) -> h264 (libx264)) Stream #0:1 -> #0:3 (aac (native) -> aac (native)) Press [q] to stop, [?] for help [libx264 @ 0x7fffb9ffba00] using SAR=1/1 [libx264 @ 0x7fffb9ffba00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 0x7fffb9ffba00] profile Main, level 3.0 [libx264 @ 0x7fffb9ffba00] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=11 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=600 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 [dash @ 0x7fffb9fa0980] Opening 'init-stream0.m4s' for writing [dash @ 0x7fffb9fa0980] Opening 'init-stream1.m4s' for writing [dash @ 0x7fffb9fa0980] Opening 'init-stream2.m4s' for writing [dash @ 0x7fffb9fa0980] Opening 'init-stream3.m4s' for writing Output #0, dash, to 'test.mpd': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 encoder : Lavf57.83.100 Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 1253 kb/s, 30 fps, 30 tbr, 15360 tbn, 30 tbc (default) Metadata: creation_time : 2017-08-25T06:57:06.000000Z handler_name : ISO Media file produced by Google Inc. Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default) Metadata: creation_time : 2017-08-25T06:57:06.000000Z handler_name : ISO Media file produced by Google Inc. Stream #0:2(und): Video: h264 (libx264), yuv420p(progressive), 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 600 kb/s, 30 fps, 15360 tbn, 30 tbc (default) Metadata: creation_time : 2017-08-25T06:57:06.000000Z handler_name : ISO Media file produced by Google Inc. encoder : Lavc57.107.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/600000 buffer size: 0 vbv_delay: -1 Stream #0:3(und): Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s (default) Metadata: creation_time : 2017-08-25T06:57:06.000000Z handler_name : ISO Media file produced by Google Inc. encoder : Lavc57.107.100 aac [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing bitrate=N/A speed=0.996x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00001.m4s.tmp' for writingpeed=0.999x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00001.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00001.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00001.m4s.tmp' for writingpeed=0.998x [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00002.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00002.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00002.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00003.m4s.tmp' for writingpeed=0.999x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00003.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00003.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00002.m4s.tmp' for writingpeed=0.999x [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00004.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00004.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00004.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00003.m4s.tmp' for writingpeed=0.999x [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00005.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00005.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00005.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00006.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00006.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00006.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00004.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00007.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00007.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00007.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00005.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00008.m4s.tmp' for writingpeed=0.999x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00008.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00008.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00009.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00009.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00009.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00006.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00010.m4s.tmp' for writingpeed=0.999x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00010.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00010.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00007.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00011.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00011.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00011.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00012.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00012.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00012.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00008.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00013.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00013.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00013.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream0-00014.m4s.tmp' for writingpeed= 1x [dash @ 0x7fffb9fa0980] Opening 'chunk-stream1-00014.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream2-00009.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'chunk-stream3-00014.m4s.tmp' for writing [dash @ 0x7fffb9fa0980] Opening 'test.mpd.tmp' for writing frame= 2155 fps= 30 q=-1.0 Lq=-1.0 size=N/A time=00:01:11.84 bitrate=N/A speed=0.997x video:16469kB audio:2223kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown [libx264 @ 0x7fffb9ffba00] frame I:9 Avg QP:20.69 size: 40942 [libx264 @ 0x7fffb9ffba00] frame P:588 Avg QP:23.30 size: 6658 [libx264 @ 0x7fffb9ffba00] frame B:1558 Avg QP:28.54 size: 850 [libx264 @ 0x7fffb9ffba00] consecutive B-frames: 2.8% 1.8% 2.1% 93.4% [libx264 @ 0x7fffb9ffba00] mb I I16..4: 14.3% 0.0% 85.7% [libx264 @ 0x7fffb9ffba00] mb P I16..4: 0.6% 0.0% 1.2% P16..4: 38.9% 22.2% 17.1% 0.0% 0.0% skip:20.1% [libx264 @ 0x7fffb9ffba00] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 41.3% 2.9% 0.8% direct: 1.6% skip:53.4% L0:42.2% L1:51.6% BI: 6.1% [libx264 @ 0x7fffb9ffba00] final ratefactor: 23.12 [libx264 @ 0x7fffb9ffba00] coded y,uvDC,uvAC intra: 78.9% 60.9% 23.5% inter: 10.5% 5.6% 0.1% [libx264 @ 0x7fffb9ffba00] i16 v,h,dc,p: 25% 31% 8% 36% [libx264 @ 0x7fffb9ffba00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 30% 11% 5% 8% 6% 10% 5% 7% [libx264 @ 0x7fffb9ffba00] i8c dc,h,v,p: 57% 22% 15% 5% [libx264 @ 0x7fffb9ffba00] Weighted P-Frames: Y:3.2% UV:0.2% [libx264 @ 0x7fffb9ffba00] ref P L0: 59.5% 17.3% 13.7% 9.3% 0.2% [libx264 @ 0x7fffb9ffba00] ref B L0: 82.9% 12.7% 4.5% [libx264 @ 0x7fffb9ffba00] ref B L1: 89.8% 10.2% [libx264 @ 0x7fffb9ffba00] kb/s:624.49 [aac @ 0x7fffba073ba0] Qavg: 57434.145

dig の status の見方 memo

dig の見方 第1弾 status

第2弾はないかもしれないが。気が付いたベースのメモ。
ANSWER SECTION の見方はわかってるが、それ以外の見方についてあまり意識してこなかったので、ちょこっとメモを残しておく。

一例

; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53541
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

↑の場合、google.com を dig った結果。名前解決もばっちり。 なので、status が NOERROR になっている。

status 意味 実際に打ってみたコマンド
NOERROR エラーとなっているが、No Error なので、ちゃんと結果が返ってきた証拠 dig google.com
NXDOMAIN どんな型のレコードも存在しない。ネームサーバ未登録のドメインとか。要は名前解決できなかった場合。 dig hogehoge.fugafuga.com
NODATA 例えば Aレコードを解決しようとして、A はないけど他はあるよ、という場合? (調査中)
CNAME CNAME の名前解決をしたとき? (調査中)
referral/委任 他の権威DNSサーバが知っている。親のネームサーバに聞きに行ったときとか? (調査中)
REFUSED 名前解決不可なネームサーバに名前解決しに行ったとき? (調査中)

( 参考 URL ) https://www.geekpage.jp/blog/?id=2014/7/25/1 https://qiita.com/hypermkt/items/610b5042d290348a9dfa

behave での実行方法備忘録(memo)(作成中)

概要

behave 使って自動化試み中なので、試行錯誤の情報をまとめておく。
なお、日々少しずつ進めているので、途中でも自分用のメモとしてあげて、ちょこちょこ更新する予定。

behave に関するリンク集

www.ainoniwa.net

githubja.com

behave.readthedocs.io

使用した環境

> python --version
Python 3.7.3

anaconda Command line client (version 1.7.2)

ファイルの配置

example L features L behave-test.feature L environment.py L steps (ディレクトリ) L step1-login.py

feature の書き方

@common
  Scenario: 契約を作る
    Given ログイン画面を開く 
      And ログインする
     When 契約作成ボタンを押す
      And 値を設定する
       | hostname       | 
       | behave-comon  | 
      And 確認ボタンを押す
      And 設定ボタンを押す
     Then 完了と表示される