2018年
今まで年始に今年の目標とか、考えることをしてこなかったけど今年はやってみる。
将来どうなりたいか、何を身につけていきたいか、を明確にして意識しておくことで、自分の意識や言動が自然と変わってくる部分があると思うので。楽しく生きたい。
あとこれを全部叶える的な強欲思考でいくと頓挫した時点で虚無を感じてしまうタイプなので叶えられたら最高だからがんばるくらいのスタンスでやる。
割と自分用の覚書みたい。
点を線にするための行動をする(自身の関心分野で)
社会問題
現状Twitterでフォロイーのツイートから情報を得ている部分。リアルタイムなニュースや断片的な知識は得ることができているけど、全体像や基本的なことがわかってない。考えるための基盤を作る。
歴史
社会や世界を見る目を標準レベルに合わせる。今生きている社会は過去の延長線上にあることを体感的に理解したい。未来を考える基盤にする。
語学(英語)
自身が生きる社会を外側から見られるようにするための手段。あと英語は毎年、毎年、勉強したい…と思ってきたので今年はやる。duolingoを毎日やる。
技術
webアプリケーションを3つ作る。何でもいいからとりあえず3つ完成させる。最後まで完成させる、という経験をこなす。
既存のwebサービスのコピーを作ってみる。とりあえず1つ。
買ったけど読みきってない技術書を読む。とりあえずリーダブルコードとアルゴリズム図鑑とテーブル設計の本。
月一以上で勉強会行きたい。そして勉強会に行ったらブログにアウトプットするまでを1セットにしたい。
アウトプット量を増やしたい(早めにまとめないとまとめたい内容を忘れてしまって悲しい気持ちになる)。
その他
時間の使い方を意識する
趣味含めやりたいことが多いのでやりたいこと全部やるために時間の使い方をまず意識する。具体的な時間の使い方を考えられたらベター。
映画
去年映画観るのが趣味になった感じがするので、今年たくさん観たい。
Fate
stay night全ルートクリアする。
蒼銀のフラグメンツ読破する。
FGOの1部読み返す。
エクストラクリアしてCCCをプレイする。
去年のこと
人生二度目の転職をした。自身にとって3社目だったけど、入社前にもっとあれこれ確認するべきだったなぁ…と入社してから反省した。
技術的な部分に関して、言語のバージョンは何かとかバージョン管理はどうしているかとか(新しいバージョン・ツールを導入しているだろうと当たり前に思わない方がいいんだろうと思った)。技術的な課題とかも聞けたらいいのかなぁ…と思う。
あと社内のムードに関しても、イメージとのギャップがすごかったのでここら辺も質問した方がいい。
なんか2017年は特別大きな出来事はなかったかも。小さな見えない変化は少なくはなかった気がする。
ぼんやり考えたのは、人は生きる限り考え続けないといけないんだなぁということ(そして考え続けている人を尊敬するし信頼できる)。世の中答えがあることの方が少なくて、だから答えがわからないことを、答えがわからないからこそ自分の答えを定めるためにずっと考え続ける必要があって、うわ〜生きることってこんなに地道で泥臭いことなんだ…大変すぎる…と思うようになった。わからないことを考え続けるのはとてもしんどいことだと感じた、答えを探すというよりは自分の答えを定める感じなのかなという気もする。
あと正しいことってないのかも、あるとしても時代ごとに正しさは変わるよなとか。人はいざという時や一番最初のポイントでは感情で動く生き物だと思ったから、何かを為すときは人の気持ちを汲んだ上で行動した方が得をするんだろうなとか。いまのこの時代に生きてるんだな的な線の上のポイントにいることを自覚できた気もした。ザ・抽象的。
ソフトウェアテスト・品質勉強会に行ってきた(12/06)
テストや品質の基本について学ぶ勉強会に行ってきたのでそのまとめ。
(参加の動機としては「今まで往々にしてテストをやってきたけどなんとな〜くでこなしていてよくないな…これからもテストをする場面はたくさんあるだろうし、品質を担保するものだからきちんと学びたい…」というのを以前から思っていた。その中でこの勉強会を見つけた、しかも基本だから学びやすそうと思い)
概要
- そもそも品質とは何か?
- そもそもテストの目的は何か?
- どんなテストをするべきか?
- どんなテストケースを作るべきか?
- どんなテストレポートを書くべきか?
…等々、そもそもの原点に立ち返って、テスト・品質の基本を学ぶ。
以下が勉強会で投影されていたスライド。
www.slideshare.net
学んだ内容のメモ
テストの目的は何か?
欠陥の検出
対象ソフトウェアの品質レベルが十分(≠完璧)であることの確認
→「テストは「欠陥があること」しか示せない」。考えてみたらその通りなんだけど、印象に残った部分だった。意思決定のための情報の提示
欠陥の作り込みの防止。開発前に行うこともある
→開発前にテストを行うことがある、のをここで初めて知った…(この後まとめる「Wモデル」の話)
開発サイクルの中でのテストの立ち位置
ここでVモデルとWモデルというものを初めて知る。
Vモデルとは
V字モデルは、ソフトウェアの開発~テスト~リリースまでの一連の流れにおける、開発工程とテスト工程の対応関係を表した1つのモデルです。
V字モデルとは? | ソフトウェアテスト・第三者検証ならウェブレッジ
Wモデルとは
開発の上流工程からテスト設計を開始し、開発プロセスとテストプロセスを同時併行に進めるプロセスモデルです。
V字モデルにおける従来の問題点を解決する方法として発達したモデル(……)
W字モデルとは? | ソフトウェアテスト・第三者検証ならウェブレッジ
今までVモデルでの開発しかやってことがないなぁ…そしてWモデルという開発サイクルがあるのを初めて知った…。
VモデルとWモデルの違いは、Vモデルの左側にある上流工程に対してもテスト工程を設けること。そうすることで、後続のテスト(Vモデルでいう右側の工程)で検知するバグを減らすことができる(らしい)。
他にもいろいろメリットがある様子(上記参考URL参照)。確かに設計時点で抱えてしまっていた問題が、開発後のテストの時点で問題認識されるより、設計の時点で問題認識できればまた実装方法も変わってくるもんな…と腑に落ちた。
スライドのp.14で「要求仕様の誤りを1とした場合、納入時点で誤りを修正する場合はコストが200倍にもなる」という話もあり、そんなに?!!という驚き。まぁでも誤りが見つかるのが早ければ早いほど修正しやすい、というのは十二分に納得できる話だった。
どうやってテストケースを作るのか
境界値分析
境界値付近にバグが潜んでいることが多いため、それを確認するもの。
状態遷移テスト
仕様に定められている通りに状態が遷移するかを確認するもの。動作が不明な時点で開発者に確認すべき。
どうやってテストを実施するのか
テストレポートの書き方について。レポートは他人が見てもわかるように書く!確かにこれはめちゃくちゃ大事…と過去の案件を思い出して思った…。
スライド内で、例として出ていたテストレポートのフォーマットでは、以下の項目が用意されている。
- テスト目的
- 再現手順
- 期待値
- 結果(OK or NG)
- 実際の結果
この中のテスト目的が大事だなーと思った。なんでそれをテストしたの…と上がってきたバグチケットを見て思ったことがあるので、自分でもこの失敗をしないよう覚えておきたい、テスト目的大事。
その他
チェッキングとテスティング
この2つも初めて聞いた用語、初めて知った概念だった。
チェッキングは開発者自身で行うもの、テスティングがテストエンジニアが行うもの。
ドッグフーディング
開発したサービスを開発者自身で利用することで、改善点を見つけていく試み。
機能は満たしていても使いにくいシステムというのは多々あるかと思いますが、そのひとつの原因として、実際に開発している人たちが、そのシステムをユーザとして使っていないがために気づいていないという可能性があります。そしてドッグフーディングでは、それを防ぐことができます。
【読書メモ】働きたくないイタチと言葉がわかるロボット
(読み終わってしばらく経ってからのまとめ&付箋を貼ってなかったのでまとめ方が雑…)
自分が普段(不自由がない程度には)使いこなしている言葉について、それを習得するまでの過程について考えてみたくなった。多義的な言葉の意味をどうやって自分は判別しているのか、抽象的な概念を示す言葉をどうやって理解していくのか、とか。
人間は、多義性のある言葉でも使われた状況を鑑みて意味を判別することができるが、機械にそれを教える・機械がそれを理解できるようにすることはめちゃくちゃ難しい。
ということが、言葉を理解するに至るために解決すべきポイントごとに、丁寧に解説されておりわかりやすかった。美風藍がこの世に生まれるまでは、まだまだ長い年月がかかる。
【読書メモ】パーフェクトPHP(6章 Webアプリケーション入門)
『パーフェクトPHP』「6章 Webアプリケーション入門」の読書メモ。
スーパーグローバル変数(p.177)
$_GET
… GETパラメータの連想配列。$_POST
… POSTで送信されたデータの連想配列。$_FILES
… ファイルのアップロードが行われた際、この変数に情報が格納される。ファイル名、ファイル形式等。$_COOKIE
… キーと値のペアでブラウザ側に保存され、リクエストごとにアプリケーションに送信される。その値がこの変数に格納される。$REQUEST
… $GET、$POST、$COOKIEの3つの内容がまとめて格納されている。それぞれのスーパーグローバル変数を適切に使う方が望ましいため、使用しない方がよい。$_SERVER
… webサーバーの情報やプログラム実行時の環境情報等を格納。ホスト名やIPアドレス、リクエストのプロトコル等。$_ENV
… 環境変数の値を格納。$_SESSION
… セッションの値を連想配列で格納。クッキーと違い、情報をwebサーバー上に格納する。セッションIDをブラウザとwebサーバー間でやりとりして状態を保持する。
(データの)保存処理(p.181)
mysql_connect()関数を実行してDBに接続する。
⇨ この本ではPHP5.3.3で動作確認がされており、PHP7以降では非推奨となっている。mysqli関数を使う。
値が入力されているかどうかのバリデーションでisset()を用いる。「Webの仕組み上、name属性に指定したものが必ず送信されるとは限らない」ため、チェックが必要。(ここら辺、Webの仕組みの知識が乏しくいまいちピンとこない)
mysql_real_escape_string()関数
⇨ mysqli_real_escape_string()関数を使う。SQLインジェクション対策。
エラーメッセージ出力(p.185)
htmlspecialchars()関数。データをそのまま出力するのではなく、エスケープを施してから出力する。XSS等の脆弱性対策。
「必要な場所のみエスケープするのではなく、「基本的にはエスケープを行い、エスケープしたくない場合ではエスケープ処理をしないようにする」という考えでプログラムを作る」
投稿されたひとことの表示(p.186)
mysql_free_result()関数
⇨ mysqli_free_result()関数。mysqli_query()で取得した結果をメモリ上から解放する。mysql_close()関数
⇨ mysqli_close()関数。mysqliをnewして取得した接続を解放する。これらの解放処理はPHPが自動的に行ってくれるが、作法として明示的に行うと良い。
投稿後のリダイレクト(p.188)
- header()関数にLocationとURLを指定することで、指定URLにリダイレクトされる。Locationヘッダには絶対URLを指定する。
header('Location: http://ntoukm.hatenadiary.com/');