はじめに
みなさん "マイヤーズの三角形の問題"というのをご存知でしょうか
3辺の長さをあらわす3つの整数を読みとり
出力として、不等辺三角形、二等辺三角形、正三角形を判別して表示するプログラムに対して
テストケースを書くというエクササイズです。
これはテストケースを考案するためのエクササイズとして知られています
考案したのは、グレンフォード・マイヤーズという人で名前を聞いたことがある人も多いでしょう。
彼の名前は、いろんなテスト関連の資料の中に出てきますが、
"The Art of Software Testing "の著者として有名です。
今回このエクササイズを進めてテスト実行するための対象としてgoogle formを使って作ってみたいと思います
Step 01.フォームを作成する
このフォームの目的は、A,BとCという3つの入力から
三角形のタイプ(正三角形か二等辺三角形か普通の三角形か)を計算し、
答えを表示することです。
取り急ぎこんかフォームを作成しましょう
Step 03. フォームの入力をSpread Sheetに追加する設定を入れる
最終的な答えはspreadsheetに記載されるためFormの機能を使ってSpread sheetと連携させましょう
こちらを連携させます
↑のSpreadSheetのURLの部分
https://docs.google.com/spreadsheets/d/XXXXXXX/edit#gid=1030984857
このXXXXの部分をメモっておいてください
Step02. 三角形を計算するロジックをGoogle Apps Scriptで実装し、連携させます
ここを押すとGoogle App Scriptを追加できます
このソースコードの部分に下記をコピペして貼り付けてください
/**
* myFunction: main function
*
* @return void
*
**/
function myFunction() {
//gather inputs A,B and C from the form
var inputs = new Array(3); // [A,B,C]
var form = FormApp.getActiveForm(); // this form
var formResponses = form.getResponses(); // this response
for (var i = 0; i < formResponses.length; i++) {
var itemResponses = formResponses[i].getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
inputs[j] = itemResponses[j].getResponse();
}
}
//validate
var type = "error"; // default type is "error"
// type has changed if there are all valid inputs
if (validInput(inputs[0], inputs[1], inputs[2])) {
//categorize the triangle type from inputs
type = triangleType(inputs[0], inputs[1], inputs[2]);
}
// log inputs and type
Logger.log(inputs);
Logger.log(type);
// put the anser to last row
var sheet = SpreadsheetApp.openById("Step2でメモったXXXXXX").getSheets()[0];
var lastRow = sheet.getLastRow();
sheet.getRange(lastRow, 5).setValue(type);
}
/**
* validateInput: vaidate Inputs
*
* @parameter A:integer
* @parameter B:integer
* @parameter C:integer
* @return boolean
*
**/
function validInput(A, B, C) {
// A,B and C all should be a number
if (isNaN(A) || isNaN(B) || isNaN(C)) {
return false;
}
// A,B and C all should be a integer
if (!parseInt(Number(A)) == A || !parseInt(Number(B)) == B || !parseInt(Number(C)) == C) {
return false;
}
// A,B and C all should be a positive integer
if (A < 0 || B < 0 || C < 0) {
return false;
}
// A,B and C all should be less than MAX_VALUE
if (A > Number.MAX_SAFE_INTEGER || B > Number.MAX_SAFE_INTEGER || C > Number.MAX_SAFE_INTEGER) {
return false;
}
return true;
}
/**
* triangleType: categorize the triangle from inputs
*
* @parameter A:integer
* @parameter B:integer
* @parameter C:integer
* @return string
*
**/
function triangleType(A, B, C) {
// transform to integer type
A = parseInt(Number(A));
B = parseInt(Number(B));
C = parseInt(Number(C));
// can create a triangle?
if (!(Math.abs(A - B) < C && C < A + B)) {
return "not a triangle";
}
// can be a equilateral triangle
if (A === B && B === C && C === A) {
return "equilateral triangle";
}
// can be a isosceles triangle
if (A === B || B === C || C === A) {
return "isosceles triangle";
}
// or normal
return "normal triangle";
}
Step 04. トリガーを設定する
先程のソースコードの画面で
こちらを選択 "+ Add Trigger"を押下して
のように設定して
終わり
デモ
デモはこちらです
https://forms.gle/Z6aCtEYeiW37Vzr66
最後まで読んでいただきありがとうございました!!