对于《编程之美》P292上关于三角形测试用例的问题,题目是这样的:

输入三角形的三条边长,判断是否能构成一个三角形(不考虑退化三角形,即面积为零的三角形),是什么样的三角形(直角、锐角、钝角、等边、等腰)。

函数声明为:byte GetTriangleType(int,int,int)。

  1. 如何用一个byte来表示各种输出情况?

  2. 如果你是一名测试工程师,应该如何写测试用例来完成功能测试呢?

我的解答

在学习二进制和按位“|”的用法之前:

1. 此时我不知道如何用一个byte表示各种输出情况。下面的程序我只是实现了功能,并没有按照给定的函数声明的格式完成……

UI:

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text.RegularExpressions; namespace TriangleTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Test_Click(object sender, EventArgs e)
{
//等腰,等边,直角,钝角,锐角。
Dictionary<String, int> result = new Dictionary<String, int>();
result.Add("等腰", );
result.Add("等边", );
result.Add("直角", );
result.Add("钝角", );
result.Add("锐角", );
var t1 = edge1.Text;
var t2 = edge2.Text;
var t3 = edge3.Text;
if (CheckInput(t1, t2, t3))
{
var e1 = double.Parse(edge1.Text);
var e2 = double.Parse(edge2.Text);
var e3 = double.Parse(edge3.Text);
double[] Numbers = new double[] { e1, e2, e3 };
double powSum = Math.Pow(e1, ) + Math.Pow(e2, ) + Math.Pow(e3, );
double max = Numbers.Max();
if (CheckTriangle(e1, e2, e3))
{
//三角形。
result["等腰"] = CheckEquicrural(e1, e2, e3) ? : ;
result["等边"] = CheckEquilateral(e1, e2, e3) ? : ;
result["直角"] = CheckRightAngle(powSum, max) ? : ;
result["钝角"] = CheckObtuseAngle(powSum, max) ? : ;
result["锐角"] = CheckAcuteAngle(powSum, max) ? : ;
string resultTip = result["等腰"] == ? "等腰" : "";
resultTip += result["等边"] == ? "等边" : "";
resultTip += result["直角"] == ? "直角" : "";
resultTip += result["钝角"] == ? "钝角" : "";
resultTip += result["锐角"] == ? "锐角" : "";
resultTip += "三角形";
MessageBox.Show(resultTip);
}
else
{
//不是三角形。
MessageBox.Show("您输入的三边构不成三角形!");
}
}
else
{
//输入非法。
MessageBox.Show("您输入的信息有问题!");
}
} private bool CheckAcuteAngle(double powSum, double max)
{
return (Math.Pow(max, ) < powSum - Math.Pow(max, )) ? true : false;
} private bool CheckObtuseAngle(double powSum, double max)
{
return (Math.Pow(max, ) > powSum - Math.Pow(max, )) ? true : false;
} private bool CheckRightAngle(double powSum, double max)
{
return (Math.Pow(max, ) == powSum - Math.Pow(max, )) ? true : false;
} private bool CheckEquicrural(double e1, double e2, double e3)
{
return (e1 == e2 && e2 == e3) ? true : false;
} private bool CheckEquilateral(double e1, double e2, double e3)
{
return (e1 == e2 || e2 == e3 || e3 == e1) ? true : false;
} private bool CheckTriangle(double edge1, double edge2, double edge3)
{
double[] edges = new double[] { edge1, edge2, edge3 };
double sum = edges[] + edges[] + edges[];
int succFlag = ;
for (int i = ; i < edges.Count(); i++)
{
if (edges[i] < sum - edges[i])
{
succFlag++;
}
}
if (succFlag == )
{
return true;
}
else
{
return false;
}
} private bool CheckInput(string edge1, string edge2, string edge3)
{
bool result = false;
Regex reg = new Regex("^[0-9]*$");
if (reg.IsMatch(edge1) && reg.IsMatch(edge2) && reg.IsMatch(edge3))
{
if (Int32.Parse(edge1) > && Int32.Parse(edge2) > && Int32.Parse(edge3) > )
{
result = true;
}
}
return result;
}
}
}

Run:

2. 对于功能测试而言:

  1)值的类型测试:注意输入值的种类(整形,浮点型,字符串类型等),检查对于非法值类型是否有控制逻辑;

  2)值的边界测试:注意输入值的范围(只能为非负数),检查超出范围时是否有控制逻辑;

  3)以结果为导向的测试:分别对非三角形,三角形中的等腰、等边、直角、钝角、锐角做出几组符合要求的测试数据,检查Test结果是否正确;

  4)值的长度测试:根据需求检查输入值达到最大值长度时,是否能够正常Test。

在学习二进制和按位“|”的用法之后:

经过学习二进制和按位或“|”的用法,我将程序做了修改,终于满足了要求(但是由于三边都是int类型是无法表示直角等腰三角形的,所以我把int改成了double类型):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text.RegularExpressions; namespace TriangleTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Test_Click(object sender, EventArgs e)
{
var t1 = edge1.Text;
var t2 = edge2.Text;
var t3 = edge3.Text;
if (CheckInput(t1, t2, t3))
{
var e1 = double.Parse(edge1.Text);
var e2 = double.Parse(edge2.Text);
var e3 = double.Parse(edge3.Text);
byte result = GetTriangleType(e1, e2, e3);
if (result == )
{
MessageBox.Show("您输入的三边构不成三角形!");
}
else
{
//十进制转换为二进制。
string tip = Convert.ToString(result, ) + "\n锐角 钝角 直角 等边 等腰(1代表是)";
MessageBox.Show(tip);
/*
1 1 1 1 1
锐角 钝角 直角 等边 等腰
*/
}
}
else
{
//输入非法。
MessageBox.Show("您输入的信息有问题!");
}
}
byte GetTriangleType(double e1, double e2, double e3)
{
//等腰00001=1,等边00010=2,直角00100=4,钝角01000=8,锐角10000=16。
byte result = ;
double[] Numbers = new double[] { e1, e2, e3 };
double powSum = Math.Pow(e1, ) + Math.Pow(e2, ) + Math.Pow(e3, );
double max = Numbers.Max();
if (CheckTriangle(e1, e2, e3))
{
//三角形。
if (CheckEquicrural(e1, e2, e3))
{
result |= ;//等腰。
}
if (CheckEquilateral(e1, e2, e3))
{
result |= ;//等边。
}
if (CheckRightAngle(powSum, max))
{
result |= ;//直角。
}
if (CheckObtuseAngle(powSum, max))
{
result |= ;//钝角。
}
if (CheckAcuteAngle(powSum, max))
{
result |= ;//锐角。
}
return result;
}
else
{
//不是三角形。
return ;
}
}
private bool CheckAcuteAngle(double powSum, double max)
{
return (Math.Pow(max, ) < powSum - Math.Pow(max, )) ? true : false;
} private bool CheckObtuseAngle(double powSum, double max)
{
return (Math.Pow(max, ) > powSum - Math.Pow(max, )) ? true : false;
} private bool CheckRightAngle(double powSum, double max)
{
return (Math.Pow(max, ) == powSum - Math.Pow(max, )) ? true : false;
} private bool CheckEquicrural(double e1, double e2, double e3)
{
return (e1 == e2 && e2 == e3) ? true : false;
} private bool CheckEquilateral(double e1, double e2, double e3)
{
return (e1 == e2 || e2 == e3 || e3 == e1) ? true : false;
} private bool CheckTriangle(double edge1, double edge2, double edge3)
{
double[] edges = new double[] { edge1, edge2, edge3 };
double sum = edges[] + edges[] + edges[];
int succFlag = ;
for (int i = ; i < edges.Count(); i++)
{
if (edges[i] < sum - edges[i])
{
succFlag++;
}
}
if (succFlag == )
{
return true;
}
else
{
return false;
}
} private bool CheckInput(string edge1, string edge2, string edge3)
{
bool result = false;
Regex reg = new Regex("^[0-9]*$");
if (reg.IsMatch(edge1) && reg.IsMatch(edge2) && reg.IsMatch(edge3))
{
if (Int32.Parse(edge1) > && Int32.Parse(edge2) > && Int32.Parse(edge3) > )
{
result = true;
}
}
return result;
}
}
}

C#中通过三边长判断三角形类型(三角形测试用例)的更多相关文章

  1. Python中请使用isinstance()判断变量类型

    一.isinstance() 在Python中可以使用type()与isinstance()这两个函数判断对象类型,而isinstance()函数的使用上比type更加方便. # coding=utf ...

  2. strstr() strpos() 获取db报错,判断报错中是否包含字符串,判断错误类型

    model中直接获取添加公司的错误.(公司名称不能重复) $enterprise_id = $this->add($enterprisedata ); $err = $this->getD ...

  3. shell中if的可判断的类型

    -d :判断制定的是否为目录-z:判断制定的变量是否存在值-f:判断制定的是否为文件-L:判断制定的是否为符号链接-r:判断制定的是否可读-w:判断制定的是否可写-x:判断存在的对象是否可以执行!:测 ...

  4. 判断String类型字符串是否为空的方法

    在项目中经常遇到要判断String类型的字段是否为空操作 我们可以用Apache提供的StringUtils这个工具类,不用自己去判断,也不用自己封装判断空的方法 它有两个版本,一个是org.apac ...

  5. js 判断浏览器类型

    前言 工作中需要用到判断浏览器类型,网上找到的内容不怎么全,故在此进行一下总结. 一.不同浏览器及版本下User-Agent信息 待续.....欢迎补充 二.根据User-Agent信息进行判断 参考 ...

  6. Java开发中经典的小实例-(输入三个数字判断三角形类型)

    import java.util.Scanner;public class threeTest {    public static void main(String[] args) {       ...

  7. 大一C语言学习笔记(11)---编程篇--写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积,要求 0 bug;

    考核内容: 写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积: 答案: #include<stdio.h ...

  8. 【C语言】判断三角形类型

    根据输入的三角形的三边判断三角形的类型,并输出其面积和类型. #include<stdio.h> #include<stdlib.h> #include<math.h&g ...

  9. PHP判断变量类型和类型转换的三种方式

    前言: PHP 在变量定义中不需要(不支持)明确的类型定义.变量类型是根据使用该变量的上下文所决定的.所以,在面对页码跳转.数值计算等严格的格式需求时,就要对变量进行类型转换. 举例如下: $foo ...

随机推荐

  1. CCF真题之字符串匹配

    201409-3 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时,表示同一 ...

  2. linux下MYSQL备份与恢复

    1.用命令实现备份 数据库备份是很重要的.如果定期做好备份,这样就可以在发生系统崩溃时恢复数据到最后一次正常的状态,把损失减小到最少.MySQLl提供了一个mysqldump命令,我们可以用它进行数据 ...

  3. 从C#的Singleton设计模式

    近来,我在学习如何在C#语言中使用设计模式中读到一些资料,其中有关Singleton设计模式引起了我的注意. 学过设计模式的开发者都知道Singleton模式.我想简要地解释一下这个设计模式是为那些尚 ...

  4. kafka监控工具kafkaOffsetMoniter的使用

    简介 KafkaOffsetMonitor是由Kafka开源社区提供的一款Web管理界面,用来实时监控Kafka的Consumer以及Partition中的Offset,可以在web界面直观的看到每个 ...

  5. server端推送消息机制

    推送技术相关请参加WIKI: https://zh.wikipedia.org/wiki/%E6%8E%A8%E9%80%81%E6%8A%80%E6%9C%AF 场景: 监控系统:后台硬件温度.电压 ...

  6. 【linux】自定义配置debian+openbox

    openbox确实是好东西阿,小巧,不开iceweasel时内存总使用量不到200M,功能又强大,不过限于我是菜鸟,openbox再强大也有限...debian装openbox是及其简单的,不过为了使 ...

  7. cvCreateImage函数说明(转载)

    cvCreateImage是openCV中的一个函数.OpenCV是Intel公司支持的开源计算机视觉库. cvCreateImage:创建首地址并分配存储空间    IplImage* cvCrea ...

  8. less文件的样式无法生效的一个原因,通过WEB浏览器访问服务器less文件地址返回404错误

    有一种情况容易导致less文件的样式无法生效,就是部分服务器(以IIS居多)会对未知后缀的文件返回404,导致无法正常读取.less文件.解决方案是在服务器中为.less文件配置MIME值为text/ ...

  9. some software that is used to speed up your system

    1.RAMDISK take some space in ram and use them as the disk. Primo Ramdisk Server Edition 5.6.0 regist ...

  10. Eclipse帮助文档配置

    Force Eclipse To Use Local Javadocs For Context-Sensitive Help 转自:http://www.gnostice.com/nl_article ...