タナカのプログラミング

プログラミングについて

わかった気でいた用語たちと同値分割と境界値分析

f:id:tanagram18:20190928032810j:plain

こんちは!タナカです!
用語と同地分割と境界値分析について、
ま主にテストに関係することを書いていこうと思います。
最近、概念的なことしか書いてない気がしますが、、、
しょうがないじゃないか!会社入りたてなんだから!!!
最初はテストしまくってDB見てログを見て
エビデンスのキャプチャを取りまくるんです!!きっと多分、、

用語

エラー(謝り)、、、人間のミス!!!
欠陥(バグ、defect)、、、ドキュメントのミス!!!
故障(フォールト)、、、期待した動作がしない、環境による影響
 
JSTQBの用語説明は小難しいので自分なりの解釈で簡単に書きましたw
JSTQBとは日本におけるソフトウェアテスト技術者資格の運営組織。
各国のテスト技術者認定組織が加盟している国際組織(ISTQB)の加盟組織として認定されているため、
JSTQBの認定資格は世界的に通用する国際資格。
です。
 
早速実際のJSTQBの過去問
「故障」と言えるのはA〜Dのどれ?
 
A:間違った入力変数を使用した計算アルゴリズムを使用した。
B:間違ったバージョンのソースコードをビルドしてした。
C:開発者は計算に関する要件のアルゴリズムを誤った解釈をした。
D:ダイアログボックスのオプションを選択した時、製品が異常終了した。
 
 
正解
Aは「欠陥」のこと
故障を原因となる不備なので欠陥
 
Bは「欠陥」のこと
構成管理において間違ったバージョンを追加することは欠陥
 
Cは「エラー」のこと
開発者による人為的な間違いなのでエラー
 
Dは「故障のこと」、つまり正解
テストの間に見かける故障、システムが使えない状態だから
 
 
解けました??
俺は解けませんでした
最初は答えを見てもわかりませんでしたが色んな記事を見て
なんとなくわかりましたw
 
こんなとか 
 
要はいつどんな状況で起きてるかによる気がします。
 
開発手前、アプリの設計書そもそもが間違っていたら欠陥だし
開発中、開発者自身が間違った認識でコードを書いたらエラーだし
アプリを起動させて動かなくなったら故障だし
 
ちょっと「エラー」と「欠陥」が似てる気がするが
こんな感じ。
 
 
もっと用語知りたい人へ
 

同値分割と境界値分析

テストにおいて入力可能なプログラムの組み合わせは膨大で、
それらを全て試すことは不可能である。
そこで効果的な入力をもれなく選び取る方法が考案されている。
その手法の1つが同値分割と境界値分析(ブラックボックステスト
この技法により同じような意味のテストケースになることが避けられ、効率よくテストが実施できる。
 
実際に言葉自体を使うタイミングはなさそうだが、
この考えを意識するかしないかで大分理解度は違うと思う。
 
 
同値分割とは
対象のデータから同じ動作を行う条件の集まりに分類するもの。
システムが正常に作動する値を「有効同値」、エラーとなりうる値を「無効同値」という。
それぞれ代表値を用いてシステムが正常に作動するかエラー作動となるかをテストする。

f:id:tanagram18:20190928021726p:plain

境界値分析とは
仕様条件の境界となる値とそれに近い値に対してテストする技法のこと。
If文等による分岐がしっかりできているのか、
処理の切り替えができているのか確かめる。

f:id:tanagram18:20190928020635p:plain


例としてゴールに入るボールで例えました。

 

ゴールに入るエリアと入らないエリアがあります。
仮にゴールに入るエリア真ん中が0地点だとして
0地点から3m以内がゴールに入ることにしよう

f:id:tanagram18:20190928030712p:plain

 
ここで言えることは
ゴール真ん中から3m以内にボールを蹴れば入る
ゴール真ん中から4m以上にボールを蹴れば入らない
 ということなので
ゴールとしての制御が本当に正しく設定できているかを検証するには
3mにボールを蹴ってゴールに入ることと
4mにボールを蹴ってゴールに入らないことをテストする必要がある。
 
これが境界値分析によるテストです。
 
・・・わかりづらい?w
 
 
ま各々の解釈があると思うので
色んな事象を過程してより理解を深めていただければと思います!
それでは!
 

因みに

初めてはてなブログで目次を使ってみました。

なんだかブロガーのレベルが上がった気がする、、、

よかったら是非!!

 

oyakudachiafi.hatenablog.com

 

クッキーとセッションとAjax

f:id:tanagram18:20190921015713j:plain

こんにちは!タナカです。
この前通信についての記事を書きましたが、通信に関するクッキー、セッション、Ajaxについて書いていこうと思います。
 
 
クッキーとはクライアント側に作られるファイル。
Webサイト固有の値を保持できるローカルファイル。
例えばTwitterFacebook等でログインした場合、IDとパスワードを入力してログインするが、クッキーに保持できる。
Googleの広告や同一人物かどうかWebサーバー側で判断してる。

 

セッションとはWebサーバー側にあるセッションという名のメモリ。
通常、HTTPを使ったWebサーバーへの通信は一回で終わる、切れる。
先程、クッキーについて説明しましたが、クッキーの情報があったとして
Webサーバー側は同じID、パスワードを送っただけでは
さっきと同じ奴がアクセスしてきたなと判断ができません。
そこで発行されるのがセッションIDです。
 
あるサイトにログインした時、
セッションはセッションIDを返し、クッキーに入れます。
時間をあけてもう一度同じサイトにアクセスする時、
クッキーはWebサーバーにセッションIDを送ります。
そしてWebサーバー側が同じ奴がきたと判断して自動でログイン
してくれているという一連の流れでクッキーとセッションは動いている。
 
また、ログアウトしたらWebサーバーのセッションIDは削除されるが
Webサーバーのアクセスが集中した場合、メモリがいっぱいになってしまう為、
セッションはある期間が過ぎるとセッションの情報を削除する。

f:id:tanagram18:20190921232737p:plain

 
 
AjaxとはクライアントがWebサーバーにリクエストを送った時、
レスポンスの中にJavaScriptを返して以降自動でWebサーバーとやりとりをする。
 
例:Google Map。
 
昔は地図に矢印がついていてそれをクリックしてリクエストを送っていたが、
今はドラッグしたら勝手に出てくる。
JavaScriptを使って動的にWebサーバーとアクセスする仕組みで
ページも動的に変えてくれる。

f:id:tanagram18:20190921232910p:plain

 
とまあ説明はざっくりこんな感じです。
Ajaxの説明が足りない気がするので記事を添付!w

 

qiita.com

 

 
因みにクッキーと似たものでキャッシュがあるが、
キャッシュはユーザーが見たサイトの情報をブラウザに保存しておく仕組み。
主にユーザーのターゲティング広告に使われる。
キャッシュがあるお陰で同じサイトを閲覧した際、1回目に見た時よりも速く表示してくれる。ただ通信速度がどんどん速くなってきている今、キャッシュの有り難みを感じづらくなっている。
また、ブラウザでキャッシュの情報を持っている場合、優先的に表示され新しい内容が表示されないケースもある。
なので、うまく表示されない時は思いっきりキャッシュを消そう!!
wi-fiがあれば大丈夫!!
 
では

通信について

f:id:tanagram18:20190919214945j:plain

こんちは!今日は通信についておさらいしようと思います。
ルーターの事など抜けているところはあるけど、
自分がわかる範囲で書いていきます。
 
日々、自分達が見てるウェブサイトやSNSはどのような仕組みで動いているのか
 
それはHTTP通信という仕組みによって成り立っています。
 
HTTP通信とはブラウザからWebサーバー間で行う通信のこと。
ブラウザとはWebサイトやSNSを見る自分たちの端末やパソコン。
Webサーバーはサイトのページを返すサーバ、Webサーバのソフトが起動しているPC。Webサーバーのソフト:Apache Server nginx Tomcatなど。
 
ブラウザからインターネットにアクセスした時、
Webサーバーにリクエストを送っている。
そして最終的にクライアントとなるブラウザにレスポンスを返えしている。
 
www.yahoo.co.jpを検索すればYahoo!のページが見れるし
http://jojo.comを検索すればジョジョのページが見れる
 
しかし、URLだけだとWebサイトを閲覧することはできない。
普段、URLだけでWebサイトを見れてるように思うが、PC間の通信はURLだけではできない。そこで登場するのがIPアドレス
 
IPアドレスとは、Webサーバーや自分のパソコンなどインターネットに接続してる機器、全てに振られるネットワーク上の名前や住所のようなもの。
 
なので、実はURLには全てIPアドレスの情報がセットでくっ付いている。
 
それを使ってURLを読み取っている。
 
じゃあ直接IPアドレス打てばいんじゃね?ってなる
 
例えばYahoo!のページでいうと
IPアドレス182.22.70.250なので、
これを打つとしっかりサイトを表示することができる。
 
確かにIPアドレスを直打ちするのは良いが覚えるのが大変なのと、変更される可能性があるというデメリットがある。
 
そんな問題を解決するのがDNS(Domain Nmae System)サーバーです。
 
DNSサーバーはURL(ドメイン)とIPアドレスを紐づけ、
クライアントからURLのリクエストを送るとIPアドレスを返してくれるシステムです。

f:id:tanagram18:20190919204943p:plain 

TECH::EXPERTでメルカリのコピーサイトを作った際、なんだこの数字のURLは
と思っていたやつがIPアドレスだったという。
まだまだクッキーやセッションやらAjaxやら書きたいことはあるのですが
長くなりそうなので、ここで切ります。
 
 
 
 

夏の終わりに聴きたくなる曲!

f:id:tanagram18:20190919010128j:plain

こんにはタナカです。だんだん涼しくなってきて季節の変わり目を感じますね。

という事でプログラミング全く関係ないシリーズ。

私的、夏の終わりに聴きたくなる曲を発表します。

YouTube貼りまくりますので、携帯の電池の減り注意!w

 

平井 大「Beautiful Journey」


平井 大 / Beautiful Journey(Music Video)

 

佐藤千亜妃 「Summer Gate」


佐藤千亜妃 - Summer Gate

 

これといって夏の終わり感はないが最近よくきく

Ghost like girlfriend「煙と唾」


Ghost like girlfriend - 煙と唾

 

 wacci 「別の人の彼女になったよ」

www.youtube.com

 

Mr.ChildrenHANABI


Mr.Children「HANABI」 Tour2015 REFLECTION Live

 

特別夏の終わり感はないですが、朝よく聞いてる

MONOEYES 「Get Up」


MONOEYES - Get Up(Music Video)

 

定番!

ケツメイシ「夏の思い出」


ケツメイシ/夏の思い出

 

 

これまた定番!

ZONE「secret base ~君がくれたもの~」


secret base ~君がくれたもの~ ZONE

 

実はミスチルがすき

Mr.Children君がいた夏


Mr.Children『君がいた夏』LIVE REMIX EDITION

 

個人的にカッコイイと思うのと最近聞くのと頑張ろうってなる

Red Hot Chili Peppers「Snow」


Red Hot Chili Peppers - Snow (Hey Oh) (Lyrics)

 

切なくなるやつ、カバーしかなかったけど

サザンオールスターズ真夏の果実


真夏の果実 斉藤和義&BONNIE PINK

 

なんとなく夏の終わり感、つか懐かしい

大槻マキ「Memories」


02 Memories ~17 years later~ - Maki Otsuki

 

RADWIMPS「セプテンバーさん」


セプテンバーさん歌詞付き

 

ココロオークション「線香花火」


ココロオークション「線香花火」Music Video

 

最後はこれかな

KREBA「イッサイガッサイ」


イッサイガッサイ

 

 

はい以上!

ちょい年代がバラバラなのと男の曲多めだったかなw

季節の変わり目で体調を崩しやすいかと思いますが、

夏の終わりを感じながら元気に頑張りましょう!!!

次は秋に聴きたくなる曲探しますw

それでは!!!!!!!!

Ruby問題3

f:id:tanagram18:20190903163913j:plain

こんちは

とあるRubyの問題3問をあげてみる。

 

問題1 メールアドレスの不正チェック

メールアドレスが適正か不適正かを判別したい

 

条件

メールアドレスに"@"が含まれてること

"@"の後、1文字以上"."で挟んでさらにその後、2文字以上入れること

最初の文字は英数字から始まること

 

適切な場合”適切なメールアドレスです”

不適切な場合”不適切なメールアドレスです”と表示

 

入力例

uri@iiiii.jp

出力例

適切なメールアドレスです

 

入力例

a@a.a

出力例

不適切なメールアドレスです

 

入力例

-@gmail.com

出力例

不適切なメールアドレスです

 

 

解説できん答え

mail = gets.to_s

if mail.match?(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i) == true
  if mail.split("").first == "-" || mail.split("").last == "-"
    puts "不適切なメールアドレスです"
  else puts "適切なメールアドレスです"
  end
else puts "不適切なメールアドレスです"
end

参考にした正規表現の記事

yaoshisi.herokuapp.com

eng-entrance.com

qiita.com

 

 

問題2 BMI肥満度チェック

身長と体重を入力してBMIと肥満度を出力したい

 

条件

身長と体重を入力

 

BMIは小数第一まで表示しそれ以降は切り捨て

 

BMIの結果が40以上だったら肥満(4度)

35以上40未満であれば肥満(3度)

30以上35未満であれば肥満(2度)

25以上30未満であれば肥満(1度)

18.5以上25未満であれば普通体重

それ以外は低体重と表示

 

入力例

172 58

出力例

BMI:19.6

判定:普通体重

 

入力例

150 80

出力例

BMI:35.5

判定:肥満(3度)

 

答え(とりま動く)

 

hight,weight = gets.split.map(&:to_f)

result = weight.floor(2) / ((hight * hight).floor(2) / 10000)
puts "BMI: #{result.floor(1)}"

if result >= 40 
  puts "判定: 肥満(4度)"
elsif 35 <= result && result < 40
  puts "判定: 肥満(3度)"
elsif 30 <= result && result < 35
  puts "判定: 肥満(2度)"
elsif 25 <= result && result < 30
  puts "判定: 肥満(1度)"
elsif 18.5 <= result && result < 25
  puts "判定: 普通体重"
else puts "判定: 低体重"
end

 

 

問題3 ポイントの計算

とあるスーパーは購入した分ポイントが付与される

しかし購入日によってポイントの付与率が変わるのでポイントの計算機を作りたい

 

条件

1回目の入力で買い物した回数を入力

2回目以降に1回目に入力した回数分だけ日付と購入金額を入力

 

日付が1桁の場合、前に0をつける(例:1 → 01)

 

日付が1日の場合購入金額の5%ポイント付与

日付に"5"が含まれてる場合購入金額の3%ポイント付与

日付に"3"が含まれてる場合購入金額の2%ポイント付与

それ以外は1%ポイント付与

 

小数点は切り捨て

 

入力例

2

05 3000

13 4000

出力例

170ポイント

 

入力例

5

01 2190
08 3000
15 3789
23 4578
29 2718 

出力例

370ポイント

 

答え(ひとまず動く)

num = gets.to_i

count = 0

point = []

while count < num do
  day, money  = gets.split.map(&:to_s)
  money = money.to_f

  if day.include?("3")
    point << ((money / 100) * 2).floor
  elsif day.include?("5")
    point << ((money / 100) * 3).floor
  elsif day == "01"
    point << ((money / 100) * 5).floor
  else point << (money / 100).floor
  end

  count += 1
end

puts "#{point.sum}ポイント"

 

はてなでコードを貼る

参考にさせていただきました!!

kurokinomizuiwa.hatenablog.com

 

以上

 

経過と現状

f:id:tanagram18:20190902174014j:plain

こんちわ!ここではテックエキスパート卒業後の経過と現状をつらつら書いていこうと思います。
 
経過
テックエキスパートを卒業して2ヶ月(6月)
遂に某RPAの会社に就職することができたタナカでしたが、わずか1ヶ月と短い期間で退社してしまいました。
職場の環境やストレスなど様々な要因はありましたが、一番は上司とのコミュニケーションが取れなかったことでした。
 
日々怒られるのは、しょうがないことだし自分の実力不足で怒られることが殆どでした。
しかし、事あるごとに「試用期間ということを忘れないでね」と言われ
最初は喉が渇きまくってる中、焦って作業を進めるんですが、
その言葉を言われ続けていくうちに、次第に焦らなくなる自分がいて
会話をする度に怒られる日々が続き、
精神的に耐えられず、退社しました。
 
これだけ聞くと会社だけ悪く見えますが、
実際は、上司は頭が良く的確かつ最短で問題を解決していましたし理不尽な指示は殆どありませんでした。
RPAの製品を自社製品としてゴリゴリに開発してる会社は多くないので、
コンサルタント業務の比重が少し重いにしろ、業務の効率化やRPAに興味がある方にはオススメだと思います。
ただ、人数が人数なのでお互いの距離は近くコミュニケーションはかなり難しいというかかなりメンタルは必要かと思います。
 
早く辞めすぎて次の就職は大丈夫、、?
自分の中では辞めて良かったと思います。精神を病んでまで仕事するなんておかしいと思ったし、絶対すぐ就職してやると思いました。
しかし、問題は1ヶ月という短い職務期間、、
 
こんなやばい職務経歴の奴をスルーするわけはなく
企業側に必ずと言っていいほど前職の退社理由は聞かれました。
また実際に2、3社?くらいには『長い期間で働いてほしい為』といった理由で落とされてしまいました、、、
とまあ早く辞めれて良かった反面、ダメージがないとは言い切れない状態でした
 
現在は
テックエキスパートとエンジャパンさらにはGreenを駆使して7月から9月の2ヶ月
遂に内定を頂けましたーーーhuuuuuuuuriiiiiiii
めでたくテックエキスパートの紹介でSESとして某システム会社さんに入社することができました。
周りと比べ落ち込む日々もありましたが、多くの人に支えられました。
支えてくださった方々、ありがとうございました。
次はもっと長く居れるよう頑張ります!!
 
最後に
テックエキスパートに入って就職して1ヶ月で辞める奴あんまいないと思いますが誰かの為になればと思いながら経験して思ったことを書きます。
もし一度辞めたいと思ったら
今一度、自分の目指すべき道を確認してそれと会社の目指してる道を比較して一致してるものはあるのか考えるべきだと思います。今は大変かもしれないけど一度は入りたいと思った会社だと思うし、続けていけばってことがあると思うので塞ぎ込んで考えるのを止めるのは違う気がします。
 
一旦考え終えたら
まず、テックエキスパートのキャリアアドバイザーに相談した方がいいです。自分もそうだったんですが、かなり連絡を重ねてくれてとても心の支えになったし、辞めてもサポートを継続してくれるということだったのでいつでも辞めれる安心感がありました。
 
もし心に余裕があったら
テックエキスパートの同期もしくはエンジニアの仲間に相談。もし周りにエンジニアの友達がいたら相談した方がいいと思います。自分は同期の言葉にかなり後押しされ、早めに辞める決心をつけられたので相談して良かったと思います。最初の頃は、自分の現状と同期の会社を比べてしまうことに怯えあまり相談することができませんでしたが、現状を客観的に見てもらうのは大事だし巻き込むことも時として必要に感じます。
 
いざ辞めるってなったら
目処がたってから辞めるのか考える。上に書いた通り短期間で仕事を辞めた場合それなりの理由と覚悟がいると思います。もし、気力が残っているのなら次の会社を決めてから退職すること薦めます。
 
ま、会社なんて腐る程あるので追い込まれるようであればすぐ辞めていいと思います。因みに自分は20社くらい受けて一番行きたい会社に行くことができました。
なのできっと大丈夫!!と言い聞かせましょうw
 
 
とつらつら書きましたが一個人の主張ですので自分を信じてください!
自分も頑張ります!それでは!

オブジェクト指向とクラスとインスタンスとついでに経過

 

f:id:tanagram18:20190902172734j:plain

ども久々の投稿です
TECH::EXPERTを卒業して無事に企業に就職したのち、1ヶ月で退職するという暴挙に出たタナカです。
日々、Ruby を勉強してる毎日ですが今更ながらオブジェクト指向とクラスとインスタンスについてしっかり説明できない気がしたので文章にしてジョジョありきで頭の中を整理していこうと思います。
 
まずオブジェクト指向って何??
プログラミングを学ぼうとすると必ず序盤に出てくるオブジェクト指向
検索をかけても説明が人それぞれバラバラだし、よくわからん。
なんなら自分も100%ピンときていない、、
なんとなくコレかなーと思った記事を見つけたので貼っておく。
オブジェクトとは「モノ」という意味で
オブジェクト指向とは「こうゆうモノを作りましょう」「そしてそのモノを使いましょう」という概念。
ジョジョでいうと
「波紋の力で葉っぱを集めて飛行機を作りましょう」「そしてその飛行機を使って敵から逃げましょう」これがオブジェクトオーバードライブ。
 
ではプログラミングで考えた時、なぜモノを作っておくと良いのか。
 
①大変な作業をなくす

康一のスタンド名3つバラバラで考えるの面倒だから「エコーズACT〜」まで共通化しよう!

②大人数で開発するとき便利

「スタンド」という共通化されたルールがあれば、他の人がプログラムを壊す心配はない

 

jojotheworld.com

③同じようなものを作りやすい

ハーヴェストの形状、大きさバラバラで書くの面倒だから全部同じにしよ

 

クラスとインスタンス

クラスはオブジェクトの設計図。

インスタンスは『実体』『実例』という意味でクラスから作られた実動するもの。

ジョジョ風にまとめるとこんな感じw

 

f:id:tanagram18:20190902170537p:plain


 

クラスはオブジェクトの設計図って言ったけどややこしいのでクラスはこれから作るモノの設計図ってだけ考えればいい気がする。

ここでは書きませんが後々勉強していると「インスタンス変数」というものが出てきます。

これまたややこしいんですが、ここで言うとジョジョ図の属性と「スタープラチナ」「近距離タイプ」「時を止める」といった属性に与える情報がインスタンス変数にあたると思います。間違ってたらすいませんw

 

まとめると

 

です。

色々ふざけながら、自分の感覚的に話したので間違ってるとこあったら教えてください。

よろしくお願いします!!!

そして経過ですが長くなったので次に書きます。

 

tanagram18.hatenablog.com