プログラマー回顧録(18)

~ エンデベッドシステム開発経験を回顧する ~

詳細設計完了。レビューで提示された2つ案。

詳細設計で言及することは以下4点。

①要求仕様に基づく当該機能の改修理由

②改修方針

③改修の内容

④改修の妥当性

①~④までを明確に文章化することで初めてソースコードを改修できる、コーディングフェーズに移行できるわけである。

そして、詳細設計からコーディングへとフェーズ移行するときもレビューは必須。

その参加者は、2人だった。

レビュアー、俺。レビューイ、担当者。

このとき、改修方針として提案されたのが2案。

案1)サーバーから取得した設定値群(1ブロックのデータ)を全てメモリに格納する。新しい設定値は後々参照できるよう構造体メンバに追加する。

案2)サーバーから取得した設定値群(1ブロックのデータ)を現在使われている分だけメモリに格納する。新しい設定値に関する構造体メンバの追加は行わない。

担当者の推しは、案1。

通知されたのだから取り込んでおけばよい。

妥当性としては、ソースコードを全て検索した結果、新たに格納したデータを参照する機能はないのでメモリに格納しても安全、とのこと。

絶対的な安全策でいえば案2なのだ。

だが、確かにデータを参照する機能がないのであれば案1でも問題ない。

担当者の推しもあり、案1を採用することでレビューを閉じたのであった。

振り返ってみるとここでバグが埋め込まれたわけである。

そう、振り返れば分かるのだ、何が間違っていたか。



これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.06.12更新日0000.00.00

プログラマー回顧録



今月のみてみて(2022年5月)

Firebase連携アプリ、みてみてエストーク伊勢125社巡り

このうち、みてみてにフォーカスを当て、Firebaseのアクセス動向やアプリの改善を考察する開発記事です。

Realtime Database+Storage構成の投稿アプリ

アプリの新規獲得ユーザー数の変動とともにFirebaseのアクセス動向を確認します。

2022年5月5日~6月4日の新規獲得ユーザー数

(ユーザー数の変動)

1ヶ月の新規獲得ユーザー数

先月と比べ、新規獲得ユーザー数は約1.5倍となりました。

そして、それに比例して減少数も約1.5倍。。。

この1ヶ月、何も対策をしていないので致し方なし。

(インストールの上位国)

先月に引き続き、フィリピン、そして、インドネシアとランクイン。

なぜインストールしてくれるのか分からないが、ありがたい。

そして、ロシアが圏外となり、トルコ、アメリカが上位ランキングに初登場。

(と言ってもインストール数1人でしょうか。。。

今回も多言語化対応は特に考えておりません。

(Firebaseの変動)

新規インストール数が増えた割にはFirebaseのアクセスは伸びていません。

そう、投稿がほとんどないわけです。

まだ慌てる時じゃあないようです。

(今週の投稿ピックアップ)

韓国料理屋が近所にオープンするみたい。

(楽しみにしてます

海外ユーザーさんもたまに投稿してくれるのですが、なぜか床や壁の投稿。

なぜなんでしょう。。。

(今後の改善案)

先月から引き続き、下記2件の改善を検討。

①UIの改善。

②ベースアーキテクチャのデファクタリング。

ステップ分けしてでも今月中には1度リリースしたい。

,

プログラマー回顧録(17)

~ エンデベッドシステム開発経験を回顧する ~

基本設計から詳細設計へ

V字モデルとして、基本設計、詳細設計、製作、単体試験、結合試験、総合試験と開発を進めるにあたり、基本設計の役割とは何か?

要求仕様に対し、どの機能を改修するのか、また、どのような改修方針とするのか、この点を明確にする。

これが基本設計の役割との認識である。

つまり、影響のある機能を洗い出し、改修方針を立て、改修が及ぼす影響を予め把握するわけである。

本プロジェクトにおける要求仕様検討から基本設計作成までの担当は1人。

プロジェクトリーダーの俺の担当というわけです。

基本設計フェーズまでは1人で黙々とプロジェクトを進めることになります。

そして、基本設計が完成すると次から詳細設計フェーズへ。

ここで作業分担を行うわけですが、その入り口となるのが基本設計レビューの実施。

詳細設計フェーズから各機能に知見のある担当者に引き継ぐわけですが、

ここで基本設計レビューを行い、詳細設計担当者との意識合わせをするわけです。

改修すべき機能の漏れ、改修方針の妥当性などを検討、精査し、ここでバトンタッチ。

「サーバーから通知された設定値を(必要もなく)参照したことによってメインシステムの一部が機能しなくなった」問題。

この問題で登場する機能は以下。

①サーバーとの通信を担う機能(Windowsで動くモジュール)

②サーバー通信機能と連携するデータ管理機能(Linuxで動くモジュール)

③サーバーからの受信データを参照するメイン機能(Linuxで動くモジュール)

今回は、サーバーから通知される設定値群(1ブロックのデータ)のなかの予備エリアに新たに1つ設定値が追加されるという要求仕様。

そこで基本設計としては機能①の改修は行わず、機能②を改修する方針としました。

基本設計レビューで担当者と共に確認を行い、いざ、バトンタッチ。

詳細設計はどうなったのか?

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.06.05更新日2022.06.12

プログラマー回顧録



ファミリーポリシー違反がやって来たヤァ!ヤァ!ヤァ!

概要

神経衰弱を題材にしたミニゲーム”サイキック・パワー”、
このアプリは対象年齢を0歳以上(全ユーザー対象)としており、ファミリーポリシーの遵守が必須です。

ですが、アプリに連携させているAdmobがファミリーポリシー違反をやらかしたそうで。。。

唐突にファミリーポリシー違反通知がメールに送られてきました。

内容としては、アプリがファミリーポリシーに違反しており、Google Playからアプリを削除したとのこと。

このアプリでのポリシー違反指摘は初めてです。

ですが、過去にも何度かファミリーポリシー違反となったことはあります。

その度にAdmobのイニシャル処理とリクエスト処理を改善したり、Admob設定を変更したりと対応してきました。

そして、ファミリーポリシーに則る必要のあるアプリ全てに水平展開もしてきたのですが。

(ファミリーポリシーを遵守するためのAdmobコーディングについてはこちらの記事。)

(ファミリーポリシーを遵守するためのAdmob設定についてはこちらの記事。)

それでは今回の理由は何なのか?

Admobの配信設定を見直す

ファミリーポリシー違反の理由がこちらでした。

審査結果通知

ファミリーポリシー違反の理由は2点。

1つ目は、広告のフォーマット違反。
広告表示から5秒後に広告を閉じることができなかった、とのこと。

2つ目は、広告のコンテンツ違反。
Admobから配信されている広告に子供にふさわしくないコンテンツが含まれていた、とのこと。

そこで配信設定の見直しを行います。

まず1つ目は5秒ルールの遵守。

アプリにはインタースティシャル広告、バナー広告を設置しているのですが、インタースティシャル広告と5秒ルールの相性が悪そうでした。

そこでインタースティシャル広告の配信から動画を削除しました。

そして、2つ目は広告のコンテンツ違反です。

メールに添付されていた違反広告の画像を見るとギャンブル系のゲーム広告のようです。

そこでブロックのコントロール設定を変更することにしました。

Google Admob コンソール

まずはGoogle Admobコンソールを表示して広告配信を制御したいアプリを選びます。
そして、メニューの「ブロックのコントロール」を選択。

Google Admob コンソール

次に一般カテゴリを選択し、ふさわしくないと思われる「レジャー/ギャンブル」の配信をブロックしました。

あとは、再審査を促すため、バージョンのみを変更したアプリを再リリース。

再審査の結果、合格となりました。

しばらくは様子見となりそうです。

プログラマー回顧録(16)

~ エンデベッドシステム開発経験を回顧する ~

バグの原因と流出と対策と

ウォーターフォール型のシステム開発の利点はなんといっても品質だろう。

仕様が確定しているからこそ、設計に冗長性を持たせる必要もなく、

設計から検証に至るまで安定した工程が組めるし、バグの排除に注力できる。

「バグは早いフェーズで潰した方がコストが安い。」とはよく言ったもので、

基本設計、詳細設計、製作、単体試験、結合試験、総合試験と

各フェーズの移行タイミングでのレビュー(有識者がレビュアー、担当者がレビューイの対面式の改修方針の説明会のようなもの)は必須であったし、

総合試験でのバグ件数0を目標にバグの抽出管理も徹底していたわけである。

もちろん、今回の改修対応も同様に作業工程を厳守して開発したのだ。

それにも関わらず、バグは流出した。

「サーバーから通知された設定値を(必要もなく)参照したことによってメインシステムの一部が機能しなくなった」問題。

まずはこの問題が作り込まれたフェーズ「詳細設計」。

この「詳細設計」を掘り下げてみる。

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.05.08更新日0000.00.00

プログラマー回顧録(15)

~ エンデベッドシステム開発経験を回顧する ~

GW回顧録(ゆるく脱線

世間はGWまっただ中である。

せっかくの連休である、少し業務の話から逸れてみることにしよう。

GWの記憶を遡ってみると思い出すのは入社1年目のGWだ。

入社当時は横浜にある田園都市線沿いの会社の寮に住んでいた。

その時の同期とはよく遊び、よく飲んだものだ。

仕事終わりや休日などは寮のロビーにたむろしては時間を潰したものである。

そんな入社1年目の俺はGWになにをする当てもなく途方に暮れていた。

予定もなく部屋を出て、ロビーに向かうと奴らはいた。

同じように当てのない同期5人である。

「ちょっと出かけてみる?」

誰かが発した一言をきっかけに男6人のドライブが始まったのである。

レンタカーを借りて最初に向かったのは鎌倉。

結局、拝観時間に間に合わず、大仏の頭を眺めて後にした。

次に向かったのが御殿場だ。

時刻も夕方になり、ご飯を食べようと辿り着いたのがビアホールだった。

ナビゲーターは手配の上手い同期にお任せだったのでどこだったか記憶にないのだが、

ここで出会ったビールが人生史上No.1であり、いまだに忘れられない味になった。

種類はヴァイツェン、そこにレモンを絞って飲むのだが、この爽やかなこと。

個人的に苦味より軽快な味が好きというのもあるが、いまだにこの時に飲んだビールより美味いビールに出会ったことがない。

ワイワイガヤガヤと食事を堪能した後に向かったのは湘南。

波の音を聞いているといつのまにか0時を超えていた。

そろそろ帰宅するかと寮に向かった。

はずが、渋谷にいた。

誰かが一蘭が食べたいと言い出したのだ。

朝5時ぐらいだったか、ようやく着いた渋谷で一蘭を食べ、長いGWの1日を締めたのである。

今思うとずっと運転していた下戸の同期には感謝しかないな。

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.05.01更新日0000.00.00

今月のみてみて(2022年4月)

Firebase連携アプリ、みてみてエストーク伊勢125社巡り

このうち、みてみてにフォーカスを当て、Firebaseのアクセス動向やアプリの改善を考察する開発記事です。

Realtime Database+Storage構成の投稿アプリ

アプリの新規獲得ユーザー数の変動とともにFirebaseのアクセス動向を確認します。

2022年4月1日~4月30日の新規獲得ユーザー数

(ユーザー数の変動)

1ヶ月の新規獲得ユーザー数

先月と変わらず穏やかな波を描いていますが、直近2日ほど1日のインストール数が10人を超える日が続いているのでこの後の動向に注視したいところです。

ただし、ユーザー減少数の波とインストール数の波がシンクロしており、アプリの魅力を伝えられていないというのは相変わらず。

(インストールの上位国)

先月に引き続きフィリピン、インドネシアと続き、ロシアが再び、ランクイン。

リリース初期のインストール上位3ヵ国で継続してインストールしてもらっているようです。

そして、新たにブラジルがランクインです。

来月もインストール数が伸びるようなら多言語化対応としてポルトガル語を対応したいと思います。

(Firebaseの変動)

ようやくMBの領域になってきましたが、いかんせん投稿数が少ないのでなんとも言えないですね。

まだしばらくはFireBaseのアクセスに関して懸念すべき点はなさそうです。

(今週の投稿ピックアップ)

各国の投稿を増やしたいとの思いで国旗を各国の
日本大使館近くに投稿してみました。

(今のところ反応は薄いです。。。

(今後の改善案)

基本的なコミュニケーション機能は一通り実装してみたのであとは如何に投稿してもらえるようにするかが考え所です。

①世界中の投稿数を増やす。

②UIの改善。

③ベースアーキテクチャのデファクタリング。

改善案として3点あげましたが、③は少し大掛かりになりそうなので、まずは①と②を少しずつ進めていこうと思います。

,

プログラマー回顧録(14)

~ エンデベッドシステム開発経験を回顧する ~

とあるエンデベッドシステムの開発工程

初期開発が終わり、現地運用も安定している。

その中で毎年、新機能追加案件があり、年度末に現地展開する。

そんなエンデベッドシステムの開発工程とはどのようなものか。

典型的なウォーターフォール型、V字モデルの開発工程である。

様々な要求仕様があるなかで対応要・不要を取捨選択し、該当システムに落とし込み、仕様を策定する。

その仕様をもとに基本設計→詳細設計→コーディングと開発を進め、

単体試験→結合試験→総合試験と検証を行う。

ここでプロジェクトの受注側として品質を保証してリリースとなる。

あとは受入検査として発注側の品質検査が行われるわけである。

たがしかし、要求仕様というものは得てしてすんなり決まるものではなく、

1年を通して2度、この工程を繰り返すのが常であった。

(第1期を8月にリリースし、第2期を1月にリリースする。)

従ってプロジェクトの人の流れもこれに沿うものとなり、年に2度ある詳細設計→結合試験の工程で開発者が集約しては解散するを繰り返すのである。

はてさて、では今回の事象の原因となった「サーバーから通知された設定値を必要もなく参照してしまう」問題は本来どの工程で解決すべきであったのだろうか。

ちなみにサーバーからの通知を受け入れる仕様が確定したのは11月である。

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.04.24更新日0000.00.00

プログラマー回顧録(13)

~ エンデベッドシステム開発経験を回顧する ~

なぜバグを作り込んでしまったのか。なぜバグは見つからなかったのか。

システム誤作動。完全停止。現地復旧。対策会議。

怒涛の1日が終わり、改めて切られた2ヶ月のスケジュール。

まずは事象報告チームの一員として今回の事象の発生原因、流出原因をまとめて報告することとなった。

チーム構成としては、上長(プロジェクト責任者)が指揮をとり、俺(プロジェクトリーダー)、後輩(問題箇所の設計担当者)の3名からなる。

今回、報告資料として求められているものは大きく3つだ。

①当該事象報告書(発生事象、発生原因、流出原因の詳細分析)

②6why分析結果(なぜなぜ分析)

③復旧操作を3度ミスしたことに対する報告書

①、②は関係者として粛々と事象を整理するとして。。。

だが、③はどうなのか。

昨日の対策本部の緊張感のなかで3度失敗したときの居心地の悪さよ。

是非とも、お聞かせ願いたいものだ。

まずは事象を整理するにあたり、当該案件(エンデベッドシステム開発)の流れをまとめておこうと思う。

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.04.17更新日0000.00.00

プログラマー回顧録(12)

~ エンデベッドシステム開発経験を回顧する ~

システム開発費用でみるインパクト

ここまで我がプログラマー人生最悪の事象発生から1次復旧までを書き連ねてきた。

システム全台稼働停止、リリースモジュールの破棄、中期リカバリーの発生と前代未聞の事態となってしまった。

ここで少し目線を変え、今回の事象に対する費用の話を綴ろうと思う。

あくまでも3次請負企業のプロジェクトリーダーの立場として知り得る自社情報のみの話である。

企業間の免責や補償の取り決め、はたまた1次企業から通しての損失額は把握していないことを断っておく。

【とあるエンデベッドシステム開発】

開発内容:既存システムの改善、新機能追加

(新規機能の要求仕様検討から参画し、基本設計~検証~リリースまでをチーム開発する。)

開発期間:1年

開発工数:8000h(3次請負1社)

開発人数:12人(3次請負1社、ピーク時)

単価:¥5k(3次請負の契約単価)

これが我が3次請負企業の開発規模であった。

ちなみに利益率設定は30%。

つまり工程が理想通りに進めば1200万の利益となるわけである。

そして、開発終了時点の利益率はというと、33%。

まさに順調であったのだ。

トラブルが起きるまでは。

そして、トラブル発生。

リカバリー期間2ヶ月の工数だけ換算しても8人×360h×¥3k。

約860万。

利益の大半が吹き飛んだのだ。

もちろん社員が費用を賄うわけではない。

だがしかし、プロジェクトリーダーとして、プログラマーとして品質、利益の2大目標の達成を粉々に打ち砕かれたわけであり、今となっても忘れられない最悪の事態だったのである。

これは個人的体験談を元にした回顧録です。企業名、人名などは架空の名称です。
毎週日曜日更新。
随時、加筆、修正を行います。

投稿日2022.04.10更新日0000.00.00