nextdate函数
- 格式:doc
- 大小:30.00 KB
- 文档页数:3
Next_day()函数的⽤法⼀、定义NEXT_DAY(date,char)date参数为⽇期型,char:为1~7或Monday/Mon~Sunday/指定时间的下⼀个星期⼏(由char指定)所在的⽇期,char也可⽤1~7替代,1表⽰星期⽇,2代表星期⼀。
还可以是星期⼀、星期⼆。
星期⽇,即 monday,thusday.....(看是什么字符集的)格式:NEXT_DAY(DATE,WEEKDAY) 即 NEXT_DAY(⽇期,星期⼏)NEXT_DAT函数返回输⼊⽇期开始,紧随其后的指定星期对应的⽇期,weekday可以⽤全称,也可以⽤缩写(如'monday','tuesday','wed')例:next_day(to_date('1999.11.24','yyyy.mm.dd'),'friday') 返回 1999年11⽉26⽇例:next_day(to_date('1999.11.24','yyyy.mm.dd'),'wed') 返回 1999年11⽉01⽇注:1999年11⽉24⽇是星期三,第⼆个参数是星期五,是两天后。
第⼆个例⼦由于⽇期正好是星期三,只能⽤下⼀个星期三⽇期。
⼆、⽤法1、select next_day(sysdate,1) from dual;或者select NEXT_DAY (sysdate, 'MONDAY ') FROM DUAL;求当前系统时间的下⼀星期⼀的时间,若报错现实“周中的⽇⽆效”,是因为字符集的问题,说明你的oracle的字符集是简体中⽂的,即:simplified chinese的可以设置字符集alter session set NLS_DATE_LANGUAGE = American; 将当前对话改为英⽂。
N e x t D a t e函数黑盒测试设计测试用例(总4页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--实验一 NextDate函数一、实验目的使用合适的黑盒测试的测试用例设计方法为NextDate函数设计测试用例。
二、实验准备掌握软件测试的内容,熟悉了解常用的黑盒测试的测试用例设计方法,明确不同方法的区别,上网查找其他软件测试的方法。
三、实验性质本实验为设计性实验。
四、实验内容根据实验的目的和我所掌握的黑盒测试的测试用例设计方法,最后我选择用决策表测试法完成了对NextDate函数测试用例的设计。
设计如下:(1)month、day、year的有效等价类:M1:{month:month有30天}M2:{month:month有31天,12月除外}M3:{month:month是12月}M4:{month:month是2月}D1:{day:1≤da y≤27}D2:{day:day=28}D3:{day:day=29}D4:{day:day=30}D5:{day:day=31}Y1:{year:year是闰年} Y2:{year:year不是闰年}(2)根据各种有效的输入情况,程序中可能采取的操作有以下六种:a1:不可能 a2:day加1 a3:day复位a4:month加1 a5:month复位 a6:year加1(3)NextDate函数的决策表表4-1 NextDate函数的决策表(4)简化后的NextDate函数的决策表表4-2简化后的NextDate函数的决策表(5)根据简化后的决策表设计的测试用例表4-3测试用例表。
实验四 Nextdate 函数的黑盒测试一、实验目的:掌握黑盒测试中的决策表测试法,并对被测程序设计测试用例。
二、实验环境操作系统:Windows XP + SP2 /win7三、实验内容1、编写一个NextDate函数。
2、掌握黑盒测试中的决策表测试法的基本步骤。
3、使用决策表法设计测试用例,对编写的函数实施测试,总结分析测试结果。
四、实验步骤1、编写一个NextDate函数,代码如下:#include <stdio.h>int chk(int y,int m,int d){if (d<1||d>31) {return 0;}else if (m<1||m>12) {return 0;}else if (y<1912||y>2500) {return 0;} return 1;}int isy(int y){return (y%4==0&&y%100||y%400);}int ilm(int m ){return (m==4||m==6||m==9||m==11);}int ihm(int m){return (m==1||m==3||m==5||m==7||m==8||m==10||m==12);}int main(int argc, char* argv[]){int year,month,day;printf("Year=");scanf("%d",&year);printf("Month=");scanf("%d",&month);printf("Day=");scanf("%d",&day);if (chk(year,month,day)) {if ((day==28&&month==2&&!isy(year))||(day==29&&month==2&&isy(year))) { day=1;month=3;}e lse if (day==30&&ilm(month)||day==31&&ihm(month)) {day=1;month++;}else day++;if (month>12) {month=1;++year;}printf("Next date:%d-%d-%d\n",year,month,day);}else printf("日期不合法");return 0;2、}根据黑盒测试的决策表法设计测试用例。
hive的next_day用法Hive是一个基于Hadoop的数据仓库工具,它提供了一种类SQL的查询语言,使得用户可以方便地进行数据分析和处理。
在Hive中,next_day函数是一个非常有用的函数,它可以用来计算某个日期的下一个星期几的日期。
本文将详细介绍next_day函数的用法和实例。
一、next_day函数的语法next_day函数的语法如下:next_day(date, day_of_week)其中,date是一个日期类型的表达式,day_of_week是一个字符串类型的表达式,表示星期几。
day_of_week可以是以下字符串之一:- "MONDAY"- "TUESDAY"- "WEDNESDAY"- "THURSDAY"- "FRIDAY"- "SATURDAY"- "SUNDAY"next_day函数返回一个日期类型的值,表示date所在星期的day_of_week的日期。
如果date本身就是day_of_week,则返回date。
二、next_day函数的实例下面是一些使用next_day函数的实例。
1. 计算下一个星期一的日期假设今天是2022年8月10日,我们想要计算下一个星期一的日期,可以使用如下语句:SELECT next_day('2022-08-10', 'MONDAY');执行结果为:2022-08-15这是因为2022年8月15日是下一个星期一的日期。
2. 计算下一个星期五的日期假设今天是2022年8月10日,我们想要计算下一个星期五的日期,可以使用如下语句:SELECT next_day('2022-08-10', 'FRIDAY');执行结果为:2022-08-12这是因为2022年8月12日是下一个星期五的日期。
NextData函数一、问题描述程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12、1≤day≤31、1900≤year ≤2050。
),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。
例如,输入为2005年11月29日,则该程序的输出为2005年11月30日。
请用黑盒测试方法设计测试用例。
二、程序界面计算下一天的程序代码见附录。
三、设计测试用例1. 用边界值测试方法设计测试用例用健壮性测试法设计测试用例,按照下列步骤进行:(1)分析各变量的取值健壮性测试时,各变量分别取:略小于最小值、最小值、略高于最小值、正常值、略低于最大值、最大值和略大于最大值。
month:-1,1,2,6,11,12,13;day:-1,1,2,15,30,31,32year:1899,1900,1901,1975,2049,2050,2051;(2)测试用例数有n个变量的程序,其边界值分析会产生6n+1个测试用例。
这里有3个变量,因此会产生19个测试用例。
(3)设计测试用例,见表1-1。
NextDate函数的复杂性来源于两个方面:一是输入域的复杂性(即输入变量之间逻辑关系的复杂性),二是确定闰年的规则。
但是在进行健壮性测试时,没有考虑输入变量之间的逻辑关系,也没有考虑和闰年相关的问题,因此在设计测试用例时存在遗漏问题,比如和判断闰年相关的日期:2008.2.29、1999.2.28等。
表1-1NextDate函数测试用例2. 用基于判定表的方法设计测试用例(1)分析各种输入情况,列出为输入变量month、day、year划分的有效等价类。
month变量的有效等价类:M1 = { month = 4,6,9,11 }M2 = { month = 1,3,5,7,8,10 }M3 = { month = 12 }M4 = { month = 2 }day变量的有效等价类:D1={日期:1≤日期≤27}D2={日期:日期=28}D3={日期:日期=29}D4={日期:日期=30}D5={日期:日期=31}year变量的有效等价类:Y1 = { year是闰年}Y2 = { year不是闰年}(2)分析程序规格说明,结合以上等价类划分的情况给出问题规定的可能采取的操作(即列出所有的动作桩)。
Java⿊盒测试之nextDate函数测试⽬录⼀、实验⽬的⼆、实验内容三、实验要求四、实验过程五、缺陷分析⼀、实验⽬的(1)掌握应⽤⿊盒测试技术进⾏测试⽤例设计。
(2)掌握对测试⽤例进⾏优化设计⽅法。
⼆、实验内容⽇期问题测试以下程序:该程序有三个输⼊变量month、day、year(month、day和year均为整数值,并且满⾜:1≤month≤12、1≤day≤31和1900≤year≤2050),分别作为输⼊⽇期的⽉份、⽇、年份,通过程序可以输出该输⼊⽇期在⽇历上隔⼀天的⽇期。
例如,输⼊为2004 年11⽉30⽇,则该程序的输出为2004年12⽉1⽇。
(1)划分等价类,按照等价类划分法设计测试⽤例;(2)编写nextDate函数;(3)掌握Junit4的⽤法,使⽤Junit4测试nextDate函数。
JUnit4是JUnit框架有史以来的最⼤改进,其主要⽬标便是利⽤Java5的Annotation特性简化测试⽤例的编写。
掌握Junit4定义的⼀些常见Annotations:org.junit.Testorg.junit.Beforeorg.junit.Afterorg.junit.BeforeClassorg.junit.AfterClassorg.junit.Ignoreorg.junit.runner.RunWithorg.junit.runners.Suite.SuiteClassesorg.junit.runners.Parameterized.Parameters三、实验要求(1)根据题⽬要求编写测试⽤例;(2)准备nextDate函数,使⽤Junit4测试执⾏测试;(3)撰写实验报告。
四、实验过程(1)根据题⽬要求编写测试⽤例1)划分等价类并编号输⼊数据有效等价类⽆效等价类年(1) 1900到2050内的闰年整数(10) year<1900(2) 1900到2050内的平年整数(11) year>2050(12) 其他输⼊⽉(3) 1,3,5,7,8,10,12内的整数(13) month<1(4) 4,6,9,11内的整数(14) 12<month(5) 2(15) 其他输⼊⽇(6) 1~28(16) day<1(7) 29(17) year为闰年 month=2时,29<day(8) 30(18) year为⾮闰年 month=2时,28<day(9) 31(19) month=1,3,5,7,8,10,12时,31<day(20) month=4,6,9,11时,30<day(21) day>31(22) 其他输⼊2)为有效等价类设计测试⽤例序号测试数据期望结果覆盖范围12016 2 29下⼀天是2016年3⽉1⽇!(1)(5)(7)22017 1 28下⼀天是2017年1⽉29⽇!(2)(3)(6)32017 1 31下⼀天是2017年2⽉1⽇!(2)(3)(9)42017 4 30下⼀天是2017年5⽉1⽇!(2)(4)(8)52017 12 31下⼀天是2018年1⽉1⽇!(2)(3)(9)3)为每⼀个⽆效等价类⾄少设计⼀个测试⽤例序号输⼊数据期望结果覆盖范围61899 3 1年的值不在指定范围之内(10)72051 3 1年的值不在指定范围之内(11)8205% 3 1⽆效的输⼊⽇期!(12)91901 -1 1⽉的值不在指定范围之内(13)101901 13 1⽉的值不在指定范围之内(14)111901 1% 1⽆效的输⼊⽇期!(15)121901 1 -1⽇的值不在指定范围之内(16)132016 2 30⽇的值不在指定范围之内(17)142017 2 29⽇的值不在指定范围之内(18)152017 3 32⽇的值不在指定范围之内(19)162017 4 31⽇的值不在指定范围之内(20)172017 4 32⽇的值不在指定范围之内(21)182017 4 3%⽆效的输⼊⽇期!(22)(2)编写nextDate函数,使⽤Junit4测试执⾏测试被测代码package io.shentuzhigang.demo.blackbox;import java.util.regex.Pattern;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-05-06 15:43*/public class Date {private static final Pattern pattern = pile("^[-\\+]?[\\d]*$");public static String nextDate(String s_year, String s_month, String s_day) { //检测是否存在⽆效字符if (!(isInteger(s_year) && isInteger(s_month) && isInteger(s_day))) {return "⽆效的输⼊⽇期!";}//将字符串转为intint year = Integer.parseInt(s_year);int month = Integer.parseInt(s_month);int day = Integer.parseInt((s_day));boolean flag = false;if (year < 1900 || year > 2050) {return ("年的值不在指定范围之内");} else if (month > 12 || month < 1) {return ("⽉的值不在指定范围之内");} else if (day > 31 || day < 1) {return ("⽇的值不在指定范围之内");}switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:if (day == 31) {day = 1;month = month + 1;} else {day = day + 1;}break;case 4:case 6:case 9:case 11:if (day == 30) {day = 1;month = month + 1;} else if (day == 31) {flag = true;} else {day = day + 1;}break;case 12:if (day == 31) {day = 1;month = 1;year = year + 1;} else {day = day + 1;}break;case 2: {if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) { // 闰年if (day == 29) {day = 1;month = 3;} else if (day < 29) {day = day + 1;} else {flag = true;// day超过29}} else {//⾮闰年if (day == 28) {day = 1;month = 3;} else if (day < 28) {day = day + 1;} else {flag = true;}}}break;default:}if (year > 2050) {return ("年的值不在指定范围之内");} else if (flag) {return ("⽇的值不在指定范围之内");} else {return ("下⼀天是" + year + "年" + month + "⽉" + day + "⽇!"); }}/*** 判断输⼊字符串是否是整数型** @param str* @return*/public static boolean isInteger(String str) {return pattern.matcher(str).matches();}}测试代码package io.shentuzhigang.demo.blackbox;import org.junit.Assert;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;import java.util.Arrays;import java.util.Collection;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-05-06 15:43*/@RunWith(Parameterized.class)public class DateTests {private String input1;private String input2;private String input3;private String expected;@Parameterspublic static Collection<?> prepareData(){String [][] object = {// 有效等价类{"2016","2","29","下⼀天是2016年3⽉1⽇!"},{"2017","1","28","下⼀天是2017年1⽉29⽇!"},{"2017","1","31","下⼀天是2017年2⽉1⽇!"},{"2017","4","30","下⼀天是2017年5⽉1⽇!"},// ⽆效等价类{"1899","3","1","年的值不在指定范围之内"},{"2051","3","1","年的值不在指定范围之内"},{"205%","3","1","⽆效的输⼊⽇期!"},{"1901","-1","1","⽉的值不在指定范围之内"},{"1901","13","1","⽉的值不在指定范围之内"},{"1901","1%","1","⽆效的输⼊⽇期!"},{"1901","1","-1","⽇的值不在指定范围之内"},{"2016","2","30","⽇的值不在指定范围之内"},{"2017","2","29","⽇的值不在指定范围之内"},{"2017","3","32","⽇的值不在指定范围之内"},{"2017","4","31","⽇的值不在指定范围之内"},{"2017","4","32","⽇的值不在指定范围之内"},{"2017","4","3%","⽆效的输⼊⽇期!"}};return Arrays.asList(object);}public DateTests(String input1,String input2,String input3,String expected){this.input1 = input1;this.input2 = input2;this.input3 = input3;this.expected = expected;}@Testpublic void testDate(){String result = Date.nextDate(input1,input2,input3);Assert.assertEquals(expected,result);}}测试结果五、缺陷分析1.⽤例?发⽣故障的原因是程序先判断day为29就变为3⽉1⽇,⽽不先判断是否为闰年,于是⽤例?的输出结果为2007-3-1⽽不是⽆效输⼊⽇期。