ユニットテスト、結合テストをやりやすい実装・設計とはなにか#社内勉強会

ブランドオフィシャル」 というサービスの開発エンジニアをしている suezawan といいます。
主にエンジニアチームのタスクマネジメントを行っています。

今回は、3月20日に実施した社内勉強会の様子を紹介したいと思います!
弊社では社内勉強会を定期的に開催しているのですが、社外に対しあまり情報発信できていませんでしたので、
これを良い機会に社内で実施した勉強会の雰囲気が伝えられたら嬉しいです!

きっかけ

Slackでの竹澤さんの発言から約1週間という短い期間でしたが、当日は80人弱が参加する規模となり、業務時間外ということもあり、ピザとアルコールを楽しみながらのカジュアルな勉強会が開催されました!

「システムを作るときに考えてほしいこと」

セッションの冒頭は、本部長の松田さんから「非機能要求」についてお話でした。
詳しくは「非機能要求」というIPAの資料を是非ご覧ください。
非機能要求とは、文字通り「機能以外」の要求となり、大まかな分類は下記になります。

・可用性
・運用・保守性
・性能・拡張性
・移行性
・セキュリティ(不正アクセス対策)
・システム環境エコロジー

普段の私たちの業務は、こういう機能が欲しい!、
といった具体的な要求を開発していくことが多いかと思います。

そのときに頭の片隅にでも
・「この機能は汎用性があるだろうか?」
・「パフォーマンスに懸念がないだろうか?」
・「今は大丈夫かもしれないが、機能拡張したときに扱いにくい設計になっていないだろうか?」
など、アンテナを張って上記の観点を意識をしておくことが大切であると、今一度考えさせられるお話でした。

「求めれた要件に含まれていなくとも、言われたことだけを作るのではなく、システムを守る自分たちが扱いやすいシステムを構築していきましょう」

未来のエンジニアが困らないよう、丁寧にコーディングしていくことを心がけたいと思います!

ユニットテスト、結合テストをやりやすい実装・設計とはなにか

CTO 竹澤さんのセッションです。
140枚を超えるスライドを、1時間超かけて丁寧にご説明いただきました!
サンプルコードをもとにそれを抽象化していく過程の説明や、
なぜをそれを行うことが必要であるかまで落とし込んだ内容でした。
内容が濃かったため全部を載せきれないのですが、一部発表内容を抜粋します。

・ユニットテストにおける間違い
・ユニットテストを書くことが目的ではない
・ユニットテストを書くだけで品質が上がるわけではない
・一度書けばよいだけではなく何度も書くことが大事
・成功ケースを書くのだけでなく、異常系のテストを増やそう
・ユニットテストで全てのテストが網羅できるわけではない
・SOLID原則
・リスコフの置換原則
・依存関係逆転の原則
・抽象化ってなぁに?
・抽象度の違いによるコミュニケーションコスト
・なんでもできるようにするは、神クラスを生むだけ
・抽象化し責務を分けることで、テストを容易にし、バグの早期発見にもつながる

全体の様子

椅子と机、マイク準備をしている様子です。
弊社の34F会議室はパーティションを外すことで、
会議室を連結でき大人数を収容できるスペースが確保できます。

こちらは開始前の様子です。
横の大型ディスプレイには、スクリーンと同じ内容が映る仕組みになっています。

弊社で最近実施した社内勉強会のご紹介

弊社では毎週木曜日に社内勉強会を開催しています!
業務で得た知識や、会社全般で勉強していくことなどを中心に行っています!

  • いまさら聞けないインデックス
    リレーショナルデータベースのインデックスに関する勉強会
  • Apache SparkとElasticsearchで機械学習・強調フィルタリングをやってみようハンズオン Sparkを使った前処理編
  • AWSよろず相談会
     AWSの方をお招きし、AWSに関する相談を行う試み
  • Akkaのアクターモデルとはなんなのか
     アクターモデルからアクターの実装、分散処理周りの話
  • 機械学習入門の入門
     機械学習入門も入門、門の前に立つぐらいの内容の話
  • グラフDBの話がしたい
     グラフDBの基本的な機能説明と、美のセカイをつなげてみた話

最後に

会場の設営、ピザの手配、ごみ捨てなど、多くの方の協力のもと開催された社内勉強会でした!
参加された皆さんも是非今日の勉強会で学んだことを業務に活かしていきましょう!

このブログを読んでアイスタイルに興味を持っていただけた方いましたら、是非ご連絡ください!
アイスタイル採用ページ

2018/04 アイスタイル入社 ブランドオフィシャルサービス開発エンジニア PHP / laravel / Solr / AWS / fluentd / banana / Kibana / Mysql / Splatoon2 S+