航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。

news/2025/3/26 4:02:25/文章来源:https://www.cnblogs.com/yuanxinglan/p/18788778

假设一个中国的航空公司规定:

① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。

② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。

③ 中国国内的航班的商务仓有食物供应,但是不可以播放电影

④ 中国国内航班的经济仓只有当飞行时间大于2小时时才有食物供应,但是不可以播放电影。

请用程序实现上述功能,并用决策表法设计测试用例,再执行测试,撰写实验报告。

 

 

实验步骤:

① 编写程序

package org.example;

 

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

public class AirlineService {

    private static String food = "无食物供应";

    private static String movie = "无电影播放";

 

    public static void main(String[] args) {

        JFrame frame = new JFrame("航空服务选择");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setSize(400, 300);

        frame.setLayout(new GridLayout(7, 2));

 

        // 创建航线选择按钮组

        JPanel routePanel = new JPanel();

        routePanel.setLayout(new GridLayout(1, 3));

        routePanel.add(new JLabel("请选择航线:"));

        JRadioButton route1 = new JRadioButton("1. 欧美");

        JRadioButton route2 = new JRadioButton("2. 国外非欧美");

        JRadioButton route3 = new JRadioButton("3. 国内");

        ButtonGroup routeGroup = new ButtonGroup();

        routeGroup.add(route1);

        routeGroup.add(route2);

        routeGroup.add(route3);

        routePanel.add(route1);

        routePanel.add(route2);

        routePanel.add(route3);

 

        // 创建舱位选择按钮组

        JPanel seatPanel = new JPanel();

        seatPanel.setLayout(new GridLayout(1, 2));

        seatPanel.add(new JLabel("请选择舱位:"));

        JRadioButton seat1 = new JRadioButton("1. 商务舱");

        JRadioButton seat2 = new JRadioButton("2. 经济舱");

        ButtonGroup seatGroup = new ButtonGroup();

        seatGroup.add(seat1);

        seatGroup.add(seat2);

        seatPanel.add(seat1);

        seatPanel.add(seat2);

 

        // 创建飞行时间选择按钮组

        JPanel timePanel = new JPanel();

        timePanel.setLayout(new GridLayout(1, 2));

        timePanel.add(new JLabel("请选择飞行时间:"));

        JRadioButton time1 = new JRadioButton("1. 两小时以内");

        JRadioButton time2 = new JRadioButton("2. 超过两小时");

        ButtonGroup timeGroup = new ButtonGroup();

        timeGroup.add(time1);

        timeGroup.add(time2);

        timePanel.add(time1);

        timePanel.add(time2);

 

        JButton submitButton = new JButton("提交");

        JButton resetButton = new JButton("重置");

        JLabel foodLabel = new JLabel("食物供应:");

        JLabel movieLabel = new JLabel("电影播放:");

 

        frame.add(routePanel);

        frame.add(seatPanel);

        frame.add(timePanel);

        frame.add(submitButton);

        frame.add(resetButton);

        frame.add(foodLabel);

        frame.add(movieLabel);

 

        submitButton.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                int route = getSelectedButtonIndex(route1, route2, route3) + 1;

                int seat = getSelectedButtonIndex(seat1, seat2) + 1;

                int time = getSelectedButtonIndex(time1, time2) + 1;

 

                food = "无食物供应";

                movie = "无电影播放";

 

                if (route == 1) { // 欧美航线

                    food = "有食物供应";

                    movie = "可以播放电影";

                } else if (route == 2) { // 国外非欧美航线

                    food = "有食物供应";

                    if (seat == 1) { // 商务舱

                        movie = "可以播放电影";

                    }

                } else if (route == 3) { // 国内航线

                    if (seat == 1) { // 商务舱

                        food = "有食物供应";

                    } else if (seat == 2 && time == 2) { // 经济舱且飞行时间超过两小时

                        food = "有食物供应";

                    }

                }

 

                foodLabel.setText("食物供应:" + food);

                movieLabel.setText("电影播放:" + movie);

            }

        });

 

        resetButton.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                food = "无食物供应";

                movie = "无电影播放";

                foodLabel.setText("食物供应:" + food);

                movieLabel.setText("电影播放:" + movie);

            }

        });

 

        frame.setVisible(true);

    }

 

    private static int getSelectedButtonIndex(JRadioButton... buttons) {

        for (JRadioButton button : buttons) {

            if (button.isSelected()) {

                return buttons.indexOf(button);

            }

        }

        return -1;

    }

}

 

② 构造决策表

序号

航线

舱位

飞行时间

食物供应

电影播放

1

欧美

商务舱

两小时以内

可以

2

欧美

商务舱

超过两小时

可以

3

欧美

经济舱

两小时以内

可以

4

欧美

经济舱

超过两小时

可以

5

国外非欧美

商务舱

两小时以内

可以

6

国外非欧美

商务舱

超过两小时

可以

7

国外非欧美

经济舱

两小时以内

8

国外非欧美

经济舱

超过两小时

9

国内

商务舱

两小时以内

10

国内

商务舱

超过两小时

11

国内

经济舱

两小时以内

12

国内

经济舱

超过两小时

 

③ 根据决策表设计测试用例,得到测试用例表

序号

输入数据

预期输出

1

航线:欧美,舱位:商务舱,飞行时间:两小时以内

食物供应:有,电影播放:可以

2

航线:欧美,舱位:商务舱,飞行时间:超过两小时

食物供应:有,电影播放:可以

3

航线:欧美,舱位:经济舱,飞行时间:两小时以内

食物供应:有,电影播放:可以

4

航线:欧美,舱位:经济舱,飞行时间:超过两小时

食物供应:有,电影播放:可以

5

航线:国外非欧美,舱位:商务舱,飞行时间:两小时以内

食物供应:有,电影播放:可以

6

航线:国外非欧美,舱位:商务舱,飞行时间:超过两小时

食物供应:有,电影播放:可以

7

航线:国外非欧美,舱位:经济舱,飞行时间:两小时以内

食物供应:有,电影播放:无

8

航线:国外非欧美,舱位:经济舱,飞行时间:超过两小时

食物供应:有,电影播放:无

9

航线:国内,舱位:商务舱,飞行时间:两小时以内

食物供应:有,电影播放:无

10

航线:国内,舱位:商务舱,飞行时间:超过两小时

食物供应:有,电影播放:无

11

航线:国内,舱位:经济舱,飞行时间:两小时以内

食物供应:无,电影播放:无

12

航线:国内,舱位:经济舱,飞行时间:超过两小时

食物供应:有,电影播放:无

 

四、实验思考

① 在实际的测试中,如何设计测试用例才能达到用最少的测试用例检测出最多的缺陷;

理解需求

彻底理解软件的需求和功能,确保测试用例覆盖所有功能点。

等价类划分

使用等价类划分方法,将输入数据划分为有效和无效等价类,确保每个等价类至少有一个测试用例。

边界值分析

专注于输入的边界条件,这些通常是缺陷的高发区域。

因果图法

使用因果图法来识别输入条件和输出结果之间的因果关系,确保所有可能的输入组合都被测试。

决策表法

当存在多个条件影响一个输出时,使用决策表法来设计测试用例,确保所有条件的组合都被覆盖。

错误猜测

基于经验和直觉,猜测可能出错的地方,并为这些区域编写测试用例。

回归测试

在软件修改后,对之前发现缺陷的区域进行回归测试,确保修改没有引入新的问题。

自动化测试

尽可能自动化测试用例,以提高测试的效率和重复执行的准确性。

风险驱动测试

根据软件的功能和业务影响,识别高风险区域并优先测试。

持续集成

在软件开发过程中持续集成测试,确保新代码不会破坏现有功能。

 

② 在进行用例设计时,如何考虑软件测试用例的充分性和减少软件测试用例的冗余性;

需求分析

详细分析软件需求,确保测试用例覆盖所有需求。

避免重复

检查测试用例集,避免重复测试相同的功能或逻辑。

最小化冗余

使用等价类划分和边界值分析来最小化测试用例数量,同时保持充分性。

优先级排序

根据测试用例的重要性和风险等级进行排序,优先测试关键功能。

分层测试

结合单元测试、集成测试、系统测试和验收测试,确保每个层次都有足够的测试覆盖。

使用测试工具

利用自动化测试工具来帮助识别和消除冗余的测试用例。

定期评审

定期评审测试用例,移除不再需要的测试用例,添加新的测试用例以覆盖新的需求。

测试覆盖率分析

使用代码覆盖率工具来分析测试用例的覆盖情况,确保关键代码被充分测试。

风险评估

根据软件的风险评估结果,调整测试用例的设计,确保高风险区域得到充分测试。

持续优化

根据测试结果和反馈,持续优化测试用例,提高测试效率和效果。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904674.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.24

Android Studio 启动模拟器出现“Timed out after 300seconds waiting for emulator to come online“解决方案 问题: Timed out after 300seconds waiting for emulator to come online.**解决方法: 检查自己的Emulator是否是最新版本,如果不是检查更新到最新

使用ESP32的语音到文本转换

ESP32 + INMP441麦克风+ SD卡+ Deepgram API =语音到文本只需3秒!即时记录、存储和转录。现在就试试! 最快!使用ESP32板的语音到文本转换语音转文本技术改变了许多项目的游戏规则。从在智能家居中实现免提控制到为残疾人创建无障碍解决方案,将口语转换为文本的能力打开了无限的…

SNeP软件计算有效群体大小

001、官网: https://sourceforge.net/projects/snepnetrends/002、脚本: SNeP1.1 -ped sample_name.ped -map sample_name.map -threads 10 -ld -out ./sample_name003、结果文件:。

2025.3.28(周五)

android实验二第三部分 事情处理 1. 点击事件 (OnClickListener) 方法:setOnClickListener(View.OnClickListener listener) android:onClick(在 XML 中使用) 核心功能:处理按钮、文本、图片等控件的 单击事件。 使用场景:按钮提交、页面跳转、功能触发等。 2. 长按事件 (…

关于原生小程序canvas标签始终显示再最上层问题

官方说明: https://developers.weixin.qq.com/miniprogram/dev/component/native-component.html 解决方法:将canvas正常绘制 对canvas进行定位,远离手机屏幕显示区域 将canvas转换为img图片,将转换后的图片进行展示 如果图片清晰度不够,则将canvas成倍的绘制,将转换后的…

Particle Asset OTA 如何实现远程

问题 用粒子平台部署更新到你的舰队是很容易的。但是,当您的产品包含其他组件(如ML模型、显示器、协处理器、证书或图像和声音等媒体)时,远程管理更新就变得更具挑战性。传统的方法通常需要物理访问,这可能耗时、昂贵,而且在规模上不切实际。解决方案 粒子资产OTA使您能够轻…

【企业必读】内外网文件传输的6个常见误区,你中招了吗?

在数字化转型的浪潮中,企业内外网文件传输已成为日常运营中不可或缺的一环。然而,许多企业在进行网络隔离后的文件传输和产品选型时,常常陷入一些常见的误区。这些误区不仅可能影响工作效率,还可能带来严重的安全隐患和合规风险。本文将深入探讨这些误区,并提供实用的建议…

SpreadJS V18.0 新版本发布!数据驱动革新,效率与体验全面升级

表格控件SpreadJS推出V18.0及V8.0版本!本次更新聚焦数据管理、多语言适配、报表与透视表增强,新增多项重磅功能,赋能企业高效应对复杂业务场景。核心亮点速览👇 一、表格绑定数据源:直连数据管理器,性能与效率双突破 开发背景 企业常将 Excel 作为动态数据库使用(如分析…

使用LattePanda V1制作了一个简单的基于batocera的游戏仿真站

现在,我们正在使用我们最近开发的Batocera arcade Box使用PS1模拟器运行Roadrash。我们使用的是Batocera Linux,这是一个开源且完全免费的复古游戏发行版本,旨在将任何计算机或单板计算机变成游戏控制台。 在这里,我们在相当旧的Latte Panda V1单板计算机上启动了Batocera,…

河北省科级政策app 连接MySQL数据库

项目结构 在连接数据库的时候要把localhost改为自己电脑的IP地址 开放mysql数据库远程访问的权限 使用jdbc的方法把jar包导入项目中

【Guava工具类】StringsInts

String相关工具 Strings Guava 提供了一系列用于字符串处理的工具: 对字符串为null或空的处理nullToEmpty(@Nullable String string):如果非空,则返回给定的字符串;否则返回空字符串 public static String nullToEmpty(@Nullable String string) {//如果string为null则返回…

我开发的【巨大娘的玩耍♥】游戏正在众筹中,参与即可获得限量优惠回报

大家好,我开发的【巨大娘的玩耍♥】游戏正在众筹中,参与即可获得限量优惠回报 游戏目前正在爱发电上众筹,众筹总额达成5千元即可开发和发布正式版。众筹截止日期:2025年7月23日 支持者可获得 8折激活码、获得所有玩家可见的特殊成就、上感谢名单 等 限量 回报~ 点我查看具体…