├── .DS_Store ├── .gitignore ├── .idea └── .gitignore ├── Readme.md ├── app ├── .DS_Store ├── app.py ├── common │ └── commonUtil.py ├── controller │ ├── __init__.py │ ├── demo.py │ ├── question1.py │ ├── question2.py │ ├── question6.py │ ├── question7.py │ ├── question8.py │ └── show.py ├── csv │ ├── .DS_Store │ ├── index.py │ ├── q1 │ │ ├── calendar-boundary.csv │ │ ├── calendar-equivalent-strong-general.csv │ │ ├── calendar-equivalent-strong-robust.csv │ │ ├── calendar-equivalent-weak-general.csv │ │ ├── calendar-equivalent-weak-robust.csv │ │ ├── triangle-boundary.csv │ │ └── triangle-equivalent.csv │ ├── q2 │ │ ├── commission-boundary-output.csv │ │ ├── commission-boundary.csv │ │ └── commission-boundary1.csv │ ├── q6 │ │ ├── printer-transition-tree-robust.csv │ │ └── printer-transition-tree.csv │ ├── q7 │ │ ├── charge-boundary.csv │ │ ├── charge-decision.csv │ │ ├── charge-equivalence.csv │ │ └── charge.csv │ └── q8 │ │ ├── sales-condition-combination-cov.csv │ │ ├── sales-condition-cov.csv │ │ ├── sales-judge-condition-cov.csv │ │ ├── sales-judge-cov.csv │ │ └── sales-statement-cov.csv ├── model │ ├── demo.py │ ├── history.py │ ├── question1.py │ ├── question2.py │ ├── question6.py │ ├── question7.py │ ├── question8.py │ └── show.py └── service │ ├── demo.py │ ├── question1.py │ ├── question2.py │ ├── question6.py │ ├── question7.py │ ├── question8.py │ └── show.py ├── images └── csd │ └── Readme.assets │ ├── image-20200702204606286.png │ ├── image-20200702204639892.png │ ├── image-20200702204710495.png │ ├── image-20200702204805166.png │ ├── image-20200702204902739.png │ ├── image-20200702204929339.png │ ├── image-20200702204958146.png │ └── image-20200702205044725.png ├── requirements.txt ├── start.py └── 作业列表.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | .idea/ 131 | 132 | .DS_Store -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Software Testing Visual Platform 2 | ![python](https://img.shields.io/badge/python-3.7-green)![GroupInfo](https://img.shields.io/badge/Group%20Size-3-orange) 3 | 4 | 5 | 6 | ## 目录 7 | 8 | [部署地址](#部署地址) 9 | 10 | [运行环境](#运行环境) 11 | 12 | [目录结构](#目录结构) 13 | 14 | [项目截图](#项目截图) 15 | 16 | ## 部署地址 17 | 18 | 前端:http://47.100.95.43:8083 19 | 20 | 后端:http://106.15.194.220:1216 21 | 22 | ## 运行环境 23 | 24 | - python版本要求: python 3.7 25 | - python库要求: requirements.txt 26 | 27 | ```shell script 28 | pip install -r requirements.txt 29 | ``` 30 | 31 | ## 目录结构 32 | 33 | ```text 34 | . 35 | ├── app # 项目主目录 36 | │   ├── app.py # app入口文件 37 | │   ├── common # 公共工具集 38 | │   │   └── commonUtil.py # Dataframe的读取及更新 39 | │   ├── controller # 控制层 40 | │   │   ├── __init__.py # api命名空间注册 41 | │   │   ├── questionX.py # questionX API接口实现 42 | │   │   └── demo.py 43 | │   ├── csv # csv 44 | │   │   ├── qX # 测试用例csv目录 45 | │   │   └── index.py # csv索引 46 | │   ├── model # 实体层 47 | │   │   ├── questionX.py # questionX 参数读取模型 48 | │   │   └── demo.py 49 | │   └── service # 业务逻辑层 50 | │      ├── questionX.py # questionX 的业务实现 51 | │   └── demo.py 52 | └── start.py # 项目启动文件 53 | ``` 54 | 55 | ## 项目截图 56 | 57 | ### 后端 58 | 59 | ![image-20200702204639892](images/csd/Readme.assets/image-20200702204639892.png) 60 | 61 | ![image-20200702204710495](images/csd/Readme.assets/image-20200702204710495.png) 62 | 63 | ![image-20200702204805166](images/csd/Readme.assets/image-20200702204805166.png) 64 | 65 | ### 前端 66 | 67 | 1. 参数测试 68 | 69 | ![image-20200702205044725](images/csd/Readme.assets/image-20200702205044725.png) 70 | 71 | 2. 预定义用例测试 72 | 73 | ![image-20200702204929339](images/csd/Readme.assets/image-20200702204929339.png) 74 | 75 | 3. 问题分析 76 | 77 | ![image-20200702204958146](images/csd/Readme.assets/image-20200702204958146.png) 78 | 79 | -------------------------------------------------------------------------------- /app/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/app/.DS_Store -------------------------------------------------------------------------------- /app/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from app.controller import api 3 | from flask_cors import CORS 4 | 5 | 6 | def create_app(): 7 | app = Flask(__name__) 8 | CORS(app, resources='/*') 9 | api.init_app(app) 10 | return app 11 | -------------------------------------------------------------------------------- /app/common/commonUtil.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import pandas as pd 3 | 4 | 5 | def df_update(df, csv_path, actual_outputs, tester_name): 6 | """ 7 | 更新,并输出到csv 8 | :param df: 源 DataFrame 9 | :param csv_path: csv 所在路径 10 | :param actual_outputs: 实际输出列表(可能有多个) 11 | :param tester_name: 测试人员名称 12 | :return: {正确个数,错误个数,准确率} 13 | """ 14 | total_case_num = len(df) 15 | output_num = len(actual_outputs) 16 | df['Correctness'] = None 17 | if output_num == 1: 18 | df['ActualOutput'] = actual_outputs[0] 19 | df['ExpectedOutput'] = df['ExpectedOutput'].astype(str) 20 | df['ActualOutput'] = df['ActualOutput'].astype(str) 21 | df.loc[df['ExpectedOutput'] != df['ActualOutput'], 'Correctness'] = False 22 | else: 23 | for i in range(0, output_num): 24 | ac_label = 'ActualOutput' + str(i + 1) 25 | ex_label = 'ExpectedOutput' + str(i + 1) 26 | df[ac_label] = actual_outputs[i] 27 | df[ac_label] = df[ac_label].astype(str) 28 | df.loc[df[ex_label] != df[ac_label], 'Correctness'] = False 29 | df['Correctness'] = df['Correctness'].fillna(True) 30 | df['Time'] = [datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')] * len(df) 31 | df['TesterName'] = [tester_name] * len(df) 32 | df.to_csv(csv_path, index=None) 33 | df = df.groupby(by=['Correctness'])['Correctness'].count() 34 | try: 35 | true_num = df[True] 36 | except Exception as e: 37 | true_num = 0 38 | return {'True': int(true_num), 'False': int(total_case_num - true_num), 39 | 'accuracy': float(true_num / total_case_num)} 40 | 41 | 42 | def df_read(csv_path, arg_start_label='TestCaseID', arg_end_label='ExpectedOutput'): 43 | """ 44 | 读取csv 45 | :param csv_path: csv 路径 46 | :param arg_start_label: 参数起始位置的前一个标签 47 | :param arg_end_label: 参数终止位置的后一个标签 48 | :return: DataFrame 参数起始索引,参数终止索引 49 | """ 50 | df = pd.read_csv(csv_path) 51 | arg_start = df.columns.values.tolist().index(arg_start_label) + 1 52 | arg_end = df.columns.values.tolist().index(arg_end_label) 53 | return df, arg_start, arg_end 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /app/controller/__init__.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import Api 2 | 3 | from app.controller.demo import api as demo_api 4 | from app.controller.question1 import api as question1_api 5 | from app.controller.question2 import api as question2_api 6 | from app.controller.question7 import api as question7_api 7 | from app.controller.question6 import api as question6_api 8 | from app.controller.question8 import api as question8_api 9 | from app.controller.show import api as show_csv_api 10 | api = Api( 11 | title='Software Testing Visual Platform', 12 | version='v1.0', 13 | description='Software Testing Visual Platform Api' 14 | ) 15 | 16 | api.add_namespace(demo_api, path='/demo') 17 | api.add_namespace(question1_api, path='/question1') 18 | api.add_namespace(question2_api, path='/question2') 19 | api.add_namespace(question6_api, path='/question6') 20 | api.add_namespace(question7_api, path='/question7') 21 | api.add_namespace(question8_api, path='/question8') 22 | api.add_namespace(show_csv_api, path='/show-csv') 23 | -------------------------------------------------------------------------------- /app/controller/demo.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import Namespace, Resource, fields 2 | from app.model.demo import model 3 | from app.service.demo import demo as demo_service 4 | 5 | api = Namespace('demo_namespace', description='Demo Namespace') 6 | model = api.model('Demo Model', model) 7 | 8 | 9 | @api.route('/') 10 | class DemoModelList(Resource): 11 | @api.doc('list_demo_models') 12 | @api.marshal_list_with(model) 13 | def get(self): 14 | """ 15 | List all demo models 16 | """ 17 | return demo_service.get_all() 18 | 19 | @api.doc('create demo model') 20 | @api.expect(model) 21 | @api.marshal_with(model, code=201) 22 | def post(self): 23 | """ 24 | create a new model 25 | """ 26 | return demo_service.create_model(api.payload), 201 27 | 28 | 29 | @api.route('/') 30 | @api.param('id', 'The model identifier') 31 | @api.response(404, 'Model not found') 32 | class Cat(Resource): 33 | @api.doc('get_model') 34 | @api.marshal_with(model) 35 | def get(self, id): 36 | """Fetch a model given its identifier""" 37 | result = demo_service.get_by_id(id) 38 | if result is None: 39 | api.abort(404) 40 | return result 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/controller/question1.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import Namespace, Resource, fields 2 | from app.model.question1 import triangle_model as q1_model 3 | from app.model.question1 import calender_model as q2_model 4 | from app.service.question1 import question1 as question1_service 5 | 6 | api = Namespace('question1', description='三角形/万年历问题') 7 | q1_model = api.model('Triangle', model=q1_model) 8 | q2_model = api.model('Calender', model=q2_model) 9 | 10 | 11 | @api.route('/triangle/') 12 | @api.param('method_type', 'boundary | equivalence') 13 | @api.response(404, 'Method not found') 14 | class Triangle(Resource): 15 | @api.doc('Triangle Problem') 16 | def get(self, method_type): 17 | """ 18 | 三角形问题 19 | """ 20 | return question1_service.triangle(method_type) 21 | 22 | 23 | @api.route('/triangle//') 24 | @api.param('method_type', 'boundary | equivalence') 25 | @api.param('code_version', 'v1 | v2') 26 | @api.response(404, 'Method not found') 27 | class Triangle(Resource): 28 | @api.doc('Triangle Problem') 29 | def get(self, method_type, code_version): 30 | """ 31 | 版本-三角形问题 32 | """ 33 | return question1_service.triangle(method_type, code_version) 34 | 35 | 36 | @api.route('/calendar/') 37 | @api.param('method_type', 38 | 'boundary | equivalence-weak-general | equivalence-strong-general | equivalence-weak-robust | equivalence-strong-robust') 39 | @api.response(404, 'Method not found') 40 | class Calendar(Resource): 41 | @api.doc('Calendar Problem') 42 | def get(self, method_type): 43 | """ 44 | 万年历问题 45 | """ 46 | return question1_service.calendar(method_type) 47 | 48 | 49 | @api.route('/triangle/') 50 | class TriangleBasic(Resource): 51 | @api.doc('Triangle Problem Basic Method') 52 | @api.expect(q1_model) 53 | def post(self): 54 | """ 55 | 三角形问题的基础实现 56 | """ 57 | return question1_service.triangle_method_test(api.payload) 58 | 59 | 60 | @api.route('/triangle/') 61 | @api.param('code_version', 'v1 | v2') 62 | class TriangleBasic(Resource): 63 | @api.doc('Triangle Problem Basic Method') 64 | @api.expect(q1_model) 65 | def post(self, code_version): 66 | """ 67 | 版本-三角形问题的基础实现 68 | """ 69 | return question1_service.triangle_method_test(api.payload, code_version) 70 | 71 | 72 | @api.route('/calendar/') 73 | class CalenderBasic(Resource): 74 | @api.doc('Calender Problem Basic Method') 75 | @api.expect(q2_model) 76 | def post(self): 77 | """ 78 | 万年历问题的基础实现 79 | """ 80 | return question1_service.calendar_method_test(api.payload) 81 | -------------------------------------------------------------------------------- /app/controller/question2.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import Namespace, Resource, fields 2 | from app.model.question2 import model 3 | from app.service.question2 import question2 as question2_service 4 | 5 | api = Namespace('question2', description='佣金问题') 6 | model = api.model('Comission', model=model) 7 | 8 | 9 | @api.route('/commission/') 10 | @api.param('method_type', 'boundary-input | boundary-output') 11 | @api.response(404, 'Method not found') 12 | class Calendar(Resource): 13 | @api.doc('Commission Problem') 14 | def get(self, method_type): 15 | """ 16 | 佣金问题 17 | """ 18 | return question2_service.commission(method_type) 19 | 20 | 21 | @api.route('/commission/') 22 | class CalenderBasic(Resource): 23 | @api.doc('Commission Problem Basic Method') 24 | @api.expect(model) 25 | def post(self): 26 | """ 27 | 佣金问题的基础实现 28 | """ 29 | return question2_service.commission_method_test(api.payload) 30 | -------------------------------------------------------------------------------- /app/controller/question6.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import Namespace, Resource, fields 2 | from app.model.question6 import model 3 | from app.service.question6 import question6 as question6_service 4 | 5 | api = Namespace('question6', description='打印机问题') 6 | model = api.model('Printer', model=model) 7 | 8 | 9 | @api.route('/printer/') 10 | @api.param('method_type', 'printer | printer-robust') 11 | @api.response(404, 'Method not found') 12 | class Calendar(Resource): 13 | @api.doc('Printer Problem') 14 | def get(self, method_type): 15 | """ 16 | 打印机问题 17 | """ 18 | return question6_service.printer(method_type) 19 | 20 | 21 | @api.route('/printer/') 22 | class CalenderBasic(Resource): 23 | @api.doc('Printer Problem Basic Method') 24 | @api.expect(model) 25 | def post(self): 26 | """ 27 | 打印机问题问题的基础实现 28 | """ 29 | return question6_service.printer_method_test(api.payload) 30 | -------------------------------------------------------------------------------- /app/controller/question7.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import Namespace, Resource, fields 2 | from app.model.question7 import model 3 | from app.service.question7 import question7 as question7_service 4 | 5 | api = Namespace('question7', description='电信收费问题') 6 | model = api.model('Commission', model=model) 7 | 8 | 9 | @api.route('/charge/') 10 | @api.param('method_type', 'boundary | equivalence | decision | final') 11 | @api.response(404, 'Method not found') 12 | class Calendar(Resource): 13 | @api.doc('Charge Problem') 14 | def get(self, method_type): 15 | """ 16 | 电信收费问题 17 | """ 18 | return question7_service.charge(method_type) 19 | 20 | 21 | @api.route('/charge/') 22 | class CalenderBasic(Resource): 23 | @api.doc('Charge Problem Basic Method') 24 | @api.expect(model) 25 | def post(self): 26 | """ 27 | 电信收费问题的基础实现 28 | """ 29 | return question7_service.charge_method_test(api.payload) 30 | 31 | 32 | @api.route('/charge/') 33 | @api.param('code_version', 'v1 | v2') 34 | class CalenderBasic(Resource): 35 | @api.doc('Charge Problem Basic Method') 36 | @api.expect(model) 37 | def post(self, code_version): 38 | """ 39 | 版本-电信收费问题的基础实现 40 | """ 41 | return question7_service.charge_method_test(api.payload, code_version) 42 | 43 | 44 | @api.route('/charge//') 45 | @api.param('method_type', 'boundary | equivalence | decision') 46 | @api.param('code_version', 'v1 | v2') 47 | @api.response(404, 'Method not found') 48 | class Calendar(Resource): 49 | @api.doc('Charge Problem') 50 | def get(self, method_type, code_version): 51 | """ 52 | 版本-电信收费问题 53 | """ 54 | return question7_service.charge(method_type, code_version) 55 | -------------------------------------------------------------------------------- /app/controller/question8.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import Namespace, Resource, fields 2 | from app.model.question8 import model 3 | from app.service.question8 import question8 as question8_service 4 | 5 | api = Namespace('question8', description='销售系统问题') 6 | model = api.model('Sales', model) 7 | 8 | @api.route('/sales/') 9 | @api.param('method_type', 'statement | judge | condition | judge-condition | condition-combination') 10 | @api.response(404, 'Method not found') 11 | class Sales(Resource): 12 | @api.doc('Sales Problem') 13 | def get(self, method_type): 14 | """ 15 | 销售系统问题 16 | """ 17 | return question8_service.sales(method_type) 18 | 19 | 20 | 21 | @api.route('/sales/') 22 | class SalesBase(Resource): 23 | @api.doc('Sales Problem Basic Method') 24 | @api.expect(model) 25 | def post(self): 26 | """ 27 | 销售系统问题的基础实现 28 | """ 29 | return question8_service.sales_method_test(api.payload) 30 | -------------------------------------------------------------------------------- /app/controller/show.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import Namespace, Resource, fields 2 | from app.model.show import model 3 | from app.service.show import ShowCSV 4 | import flask 5 | 6 | api = Namespace('show_csv', description='csv展示') 7 | model = api.model('Show', model=model) 8 | 9 | 10 | @api.route('/') 11 | class CalenderBasic(Resource): 12 | @api.doc('Display CSV Table') 13 | @api.expect(model) 14 | def post(self): 15 | """ 16 | 展示CSV表格 17 | """ 18 | return ShowCSV.get_csv(api.payload) 19 | 20 | @api.doc('Get Problem Item') 21 | def get(self): 22 | """ 23 | 获得问题项目 24 | """ 25 | return ShowCSV.get_csv_dir() 26 | -------------------------------------------------------------------------------- /app/csv/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/app/csv/.DS_Store -------------------------------------------------------------------------------- /app/csv/index.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | BASE_DIR = os.path.dirname(__file__) 4 | 5 | csv_dir = { 6 | 'calendar': ['boundary', 'equivalence-weak-general', 'equivalence-strong-general', 'equivalence-weak-robust', 7 | 'equivalent-strong-robust'], 8 | 'triangle': ['boundary', 'equivalence'], 9 | 'commission': ['boundary-input', 'boundary-output'], 10 | 'charge': ['boundary', 'equivalence', 'decision'], 11 | 'sales': ['statement', 'judge', 'condition', 'judge-condition', 'condition-combination'], 12 | 'printer': ['printer', 'printer-robust'] 13 | } 14 | 15 | calendar = { 16 | 'boundary': BASE_DIR + '/q1/calendar-boundary.csv', 17 | 'equivalence-weak-general': BASE_DIR + '/q1/calendar-equivalent-weak-general.csv', 18 | 'equivalence-strong-general': BASE_DIR + '/q1/calendar-equivalent-strong-general.csv', 19 | 'equivalence-weak-robust': BASE_DIR + '/q1/calendar-equivalent-weak-robust.csv', 20 | 'equivalence-strong-robust': BASE_DIR + '/q1/calendar-equivalent-strong-robust.csv' 21 | } 22 | 23 | triangle = { 24 | 'boundary': BASE_DIR + '/q1/triangle-boundary.csv', 25 | 'equivalence': BASE_DIR + '/q1/triangle-equivalent.csv' 26 | } 27 | 28 | commission = { 29 | 'boundary-input': BASE_DIR + '/q2/commission-boundary.csv', 30 | 'boundary-output': BASE_DIR + '/q2/commission-boundary-output.csv' 31 | } 32 | 33 | charge = { 34 | 'boundary': BASE_DIR + '/q7/charge-boundary.csv', 35 | 'equivalence': BASE_DIR + '/q7/charge-equivalence.csv', 36 | 'decision': BASE_DIR + '/q7/charge-decision.csv', 37 | 'final': BASE_DIR + '/q7/charge.csv' 38 | } 39 | 40 | sales = { 41 | 'statement': BASE_DIR + '/q8/sales-statement-cov.csv', 42 | 'judge': BASE_DIR + '/q8/sales-judge-cov.csv', 43 | 'condition': BASE_DIR + '/q8/sales-condition-cov.csv', 44 | 'judge-condition': BASE_DIR + '/q8/sales-judge-condition-cov.csv', 45 | 'condition-combination': BASE_DIR + '/q8/sales-condition-combination-cov.csv' 46 | } 47 | 48 | printer = { 49 | 'printer': BASE_DIR + '/q6/printer-transition-tree.csv', 50 | 'printer-robust': BASE_DIR + '/q6/printer-transition-tree-robust.csv' 51 | } 52 | 53 | csv_dir2 = { 54 | 'calendar': calendar, 55 | 'triangle': triangle, 56 | 'commission': commission, 57 | 'charge': charge, 58 | 'sales': sales, 59 | 'printer': printer 60 | } 61 | -------------------------------------------------------------------------------- /app/csv/q1/calendar-boundary.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Year,Month,Day,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,-1,7,15,Year Exceed,Year Exceed,True,2020-06-27 23:35:00,anonymous 3 | 1,0,7,15,Year Exceed,Year Exceed,True,2020-06-27 23:35:00,anonymous 4 | 2,1999,7,15,Year Exceed,Year Exceed,True,2020-06-27 23:35:00,anonymous 5 | 3,2000,7,15,2000-07-16,2000-07-16,True,2020-06-27 23:35:00,anonymous 6 | 4,2001,7,15,2001-07-16,2001-07-16,True,2020-06-27 23:35:00,anonymous 7 | 5,2044,2,28,2044-02-29,2044-02-29,True,2020-06-27 23:35:00,anonymous 8 | 6,2044,2,29,2044-03-01,2044-03-01,True,2020-06-27 23:35:00,anonymous 9 | 7,2050,-2,15,Month Exceed,Month Exceed,True,2020-06-27 23:35:00,anonymous 10 | 8,2050,0,15,Month Exceed,Month Exceed,True,2020-06-27 23:35:00,anonymous 11 | 9,2050,1,15,2050-01-16,2050-01-16,True,2020-06-27 23:35:00,anonymous 12 | 10,2050,2,15,2050-02-16,2050-02-16,True,2020-06-27 23:35:00,anonymous 13 | 11,2050,2,28,2050-03-01,2050-03-01,True,2020-06-27 23:35:00,anonymous 14 | 12,2050,2,29,day is out of range for month,day is out of range for month,True,2020-06-27 23:35:00,anonymous 15 | 13,2050,6,30,2050-07-01,2050-07-01,True,2020-06-27 23:35:00,anonymous 16 | 14,2050,6,31,day is out of range for month,day is out of range for month,True,2020-06-27 23:35:00,anonymous 17 | 15,2050,7,-5,Day Exceed,Day Exceed,True,2020-06-27 23:35:00,anonymous 18 | 16,2050,7,0,Day Exceed,Day Exceed,True,2020-06-27 23:35:00,anonymous 19 | 17,2050,7,1,2050-07-02,2050-07-02,True,2020-06-27 23:35:00,anonymous 20 | 18,2050,7,2,2050-07-03,2050-07-03,True,2020-06-27 23:35:00,anonymous 21 | 19,2050,7,15,2050-07-16,2050-07-16,True,2020-06-27 23:35:00,anonymous 22 | 20,2050,7,30,2050-07-31,2050-07-31,True,2020-06-27 23:35:00,anonymous 23 | 21,2050,7,31,2050-08-01,2050-08-01,True,2020-06-27 23:35:00,anonymous 24 | 22,2050,7,32,Day Exceed,Day Exceed,True,2020-06-27 23:35:00,anonymous 25 | 23,2050,11,15,2050-11-16,2050-11-16,True,2020-06-27 23:35:00,anonymous 26 | 24,2050,12,15,2050-12-16,2050-12-16,True,2020-06-27 23:35:00,anonymous 27 | 25,2050,15,15,Month Exceed,Month Exceed,True,2020-06-27 23:35:00,anonymous 28 | 26,2099,7,15,2099-07-16,2099-07-16,True,2020-06-27 23:35:00,anonymous 29 | 27,2100,7,15,2100-07-16,2100-07-16,True,2020-06-27 23:35:00,anonymous 30 | 28,2101,7,15,Year Exceed,Year Exceed,True,2020-06-27 23:35:00,anonymous 31 | 29,2000,12,31,2001-01-01,2001-01-01,True,2020-06-27 23:35:00,anonymous 32 | 30,2050,12,31,2051-01-01,2051-01-01,True,2020-06-27 23:35:00,anonymous 33 | 31,2100,12,31,2101-01-01,2101-01-01,True,2020-06-27 23:35:00,anonymous 34 | -------------------------------------------------------------------------------- /app/csv/q1/calendar-equivalent-strong-general.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Year,Month,Day,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,2008,4,1,2008-04-02,2008-04-02,True,2020-06-29 15:17:12,anonymous 3 | 1,2012,6,28,2012-06-29,2012-06-29,True,2020-06-29 15:17:12,anonymous 4 | 2,2016,9,29,2016-09-30,2016-09-30,True,2020-06-29 15:17:12,anonymous 5 | 3,2020,11,30,2020-12-01,2020-12-01,True,2020-06-29 15:17:12,anonymous 6 | 4,2008,4,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:12,anonymous 7 | 5,2012,1,5,2012-01-06,2012-01-06,True,2020-06-29 15:17:12,anonymous 8 | 6,2016,3,28,2016-03-29,2016-03-29,True,2020-06-29 15:17:12,anonymous 9 | 7,2020,5,29,2020-05-30,2020-05-30,True,2020-06-29 15:17:12,anonymous 10 | 8,2008,7,30,2008-07-31,2008-07-31,True,2020-06-29 15:17:12,anonymous 11 | 9,2012,8,31,2012-09-01,2012-09-01,True,2020-06-29 15:17:12,anonymous 12 | 10,2016,2,10,2016-02-11,2016-02-11,True,2020-06-29 15:17:12,anonymous 13 | 11,2020,2,28,2020-02-29,2020-02-29,True,2020-06-29 15:17:12,anonymous 14 | 12,2008,2,29,2008-03-01,2008-03-01,True,2020-06-29 15:17:12,anonymous 15 | 13,2012,2,30,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:12,anonymous 16 | 14,2016,2,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:12,anonymous 17 | 15,2020,12,15,2020-12-16,2020-12-16,True,2020-06-29 15:17:12,anonymous 18 | 16,2008,12,28,2008-12-29,2008-12-29,True,2020-06-29 15:17:12,anonymous 19 | 17,2012,12,29,2012-12-30,2012-12-30,True,2020-06-29 15:17:12,anonymous 20 | 18,2016,12,30,2016-12-31,2016-12-31,True,2020-06-29 15:17:12,anonymous 21 | 19,2020,12,31,2021-01-01,2021-01-01,True,2020-06-29 15:17:12,anonymous 22 | 20,2009,4,20,2009-04-21,2009-04-21,True,2020-06-29 15:17:12,anonymous 23 | 21,2010,6,28,2010-06-29,2010-06-29,True,2020-06-29 15:17:12,anonymous 24 | 22,2011,9,29,2011-09-30,2011-09-30,True,2020-06-29 15:17:12,anonymous 25 | 23,2013,11,30,2013-12-01,2013-12-01,True,2020-06-29 15:17:12,anonymous 26 | 24,2014,4,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:12,anonymous 27 | 25,2015,10,22,2015-10-23,2015-10-23,True,2020-06-29 15:17:12,anonymous 28 | 26,2017,3,28,2017-03-29,2017-03-29,True,2020-06-29 15:17:12,anonymous 29 | 27,2018,5,29,2018-05-30,2018-05-30,True,2020-06-29 15:17:12,anonymous 30 | 28,2019,7,30,2019-07-31,2019-07-31,True,2020-06-29 15:17:12,anonymous 31 | 29,2009,8,31,2009-09-01,2009-09-01,True,2020-06-29 15:17:12,anonymous 32 | 30,2010,2,23,2010-02-24,2010-02-24,True,2020-06-29 15:17:12,anonymous 33 | 31,2011,2,28,2011-03-01,2011-03-01,True,2020-06-29 15:17:12,anonymous 34 | 32,2013,2,29,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:12,anonymous 35 | 33,2014,2,30,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:12,anonymous 36 | 34,2015,2,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:12,anonymous 37 | 35,2017,12,25,2017-12-26,2017-12-26,True,2020-06-29 15:17:12,anonymous 38 | 36,2018,12,28,2018-12-29,2018-12-29,True,2020-06-29 15:17:12,anonymous 39 | 37,2019,12,29,2019-12-30,2019-12-30,True,2020-06-29 15:17:12,anonymous 40 | 38,2019,12,30,2019-12-31,2019-12-31,True,2020-06-29 15:17:12,anonymous 41 | 39,2019,12,31,2020-01-01,2020-01-01,True,2020-06-29 15:17:12,anonymous 42 | -------------------------------------------------------------------------------- /app/csv/q1/calendar-equivalent-strong-robust.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Year,Month,Day,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,2008,4,1,2008-04-02,2008-04-02,True,2020-06-29 15:17:23,anonymous 3 | 1,2012,6,28,2012-06-29,2012-06-29,True,2020-06-29 15:17:23,anonymous 4 | 2,2016,9,29,2016-09-30,2016-09-30,True,2020-06-29 15:17:23,anonymous 5 | 3,2020,11,30,2020-12-01,2020-12-01,True,2020-06-29 15:17:23,anonymous 6 | 4,2008,4,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:23,anonymous 7 | 5,2012,1,5,2012-01-06,2012-01-06,True,2020-06-29 15:17:23,anonymous 8 | 6,2016,3,28,2016-03-29,2016-03-29,True,2020-06-29 15:17:23,anonymous 9 | 7,2020,5,29,2020-05-30,2020-05-30,True,2020-06-29 15:17:23,anonymous 10 | 8,2008,7,30,2008-07-31,2008-07-31,True,2020-06-29 15:17:23,anonymous 11 | 9,2012,8,31,2012-09-01,2012-09-01,True,2020-06-29 15:17:23,anonymous 12 | 10,2016,2,10,2016-02-11,2016-02-11,True,2020-06-29 15:17:23,anonymous 13 | 11,2020,2,28,2020-02-29,2020-02-29,True,2020-06-29 15:17:23,anonymous 14 | 12,2008,2,29,2008-03-01,2008-03-01,True,2020-06-29 15:17:23,anonymous 15 | 13,2012,2,30,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:23,anonymous 16 | 14,2016,2,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:23,anonymous 17 | 15,2020,12,15,2020-12-16,2020-12-16,True,2020-06-29 15:17:23,anonymous 18 | 16,2008,12,28,2008-12-29,2008-12-29,True,2020-06-29 15:17:23,anonymous 19 | 17,2012,12,29,2012-12-30,2012-12-30,True,2020-06-29 15:17:23,anonymous 20 | 18,2016,12,30,2016-12-31,2016-12-31,True,2020-06-29 15:17:23,anonymous 21 | 19,2020,12,31,2021-01-01,2021-01-01,True,2020-06-29 15:17:23,anonymous 22 | 20,2009,4,20,2009-04-21,2009-04-21,True,2020-06-29 15:17:23,anonymous 23 | 21,2010,6,28,2010-06-29,2010-06-29,True,2020-06-29 15:17:23,anonymous 24 | 22,2011,9,29,2011-09-30,2011-09-30,True,2020-06-29 15:17:23,anonymous 25 | 23,2013,11,30,2013-12-01,2013-12-01,True,2020-06-29 15:17:23,anonymous 26 | 24,2014,4,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:23,anonymous 27 | 25,2015,10,22,2015-10-23,2015-10-23,True,2020-06-29 15:17:23,anonymous 28 | 26,2017,3,28,2017-03-29,2017-03-29,True,2020-06-29 15:17:23,anonymous 29 | 27,2018,5,29,2018-05-30,2018-05-30,True,2020-06-29 15:17:23,anonymous 30 | 28,2019,7,30,2019-07-31,2019-07-31,True,2020-06-29 15:17:23,anonymous 31 | 29,2009,8,31,2009-09-01,2009-09-01,True,2020-06-29 15:17:23,anonymous 32 | 30,2010,2,23,2010-02-24,2010-02-24,True,2020-06-29 15:17:23,anonymous 33 | 31,2011,2,28,2011-03-01,2011-03-01,True,2020-06-29 15:17:23,anonymous 34 | 32,2013,2,29,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:23,anonymous 35 | 33,2014,2,30,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:23,anonymous 36 | 34,2015,2,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:23,anonymous 37 | 35,2017,12,25,2017-12-26,2017-12-26,True,2020-06-29 15:17:23,anonymous 38 | 36,2018,12,28,2018-12-29,2018-12-29,True,2020-06-29 15:17:23,anonymous 39 | 37,2019,12,29,2019-12-30,2019-12-30,True,2020-06-29 15:17:23,anonymous 40 | 38,2019,12,30,2019-12-31,2019-12-31,True,2020-06-29 15:17:23,anonymous 41 | 39,2019,12,31,2020-01-01,2020-01-01,True,2020-06-29 15:17:23,anonymous 42 | 40,1999,4,5,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 43 | 41,1998,3,28,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 44 | 42,1999,2,29,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 45 | 43,300,12,30,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 46 | 44,1900,2,31,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 47 | 45,2101,4,5,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 48 | 46,2102,3,28,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 49 | 47,2222,2,29,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 50 | 48,2500,12,30,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 51 | 49,10000,2,31,Year Exceed,Year Exceed,True,2020-06-29 15:17:23,anonymous 52 | 50,2008,0,5,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 53 | 51,2019,-1,28,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 54 | 52,2020,-100,29,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 55 | 53,2017,-3,30,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 56 | 54,2012,-6,31,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 57 | 55,2008,13,5,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 58 | 56,2019,100,28,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 59 | 57,2020,15,29,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 60 | 58,2017,16,30,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 61 | 59,2012,1000,31,Month Exceed,Month Exceed,True,2020-06-29 15:17:23,anonymous 62 | 60,2008,4,0,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 63 | 61,2019,3,-1,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 64 | 62,2020,2,-100,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 65 | 63,2017,12,-2,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 66 | 64,2012,2,-5,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 67 | 65,2008,4,32,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 68 | 66,2019,3,33,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 69 | 67,2020,2,50,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 70 | 68,2017,12,100,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 71 | 69,2012,2,1000,Day Exceed,Day Exceed,True,2020-06-29 15:17:23,anonymous 72 | 70,1998,-2,-1,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 73 | 71,1998,-2,0,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 74 | 72,1998,-2,32,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 75 | 73,1998,0,-1,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 76 | 74,1998,0,0,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 77 | 75,1998,0,32,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 78 | 76,1998,13,-1,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 79 | 77,1998,13,0,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 80 | 78,1998,13,32,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 81 | 79,2101,-2,-1,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 82 | 80,2101,-2,0,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 83 | 81,2101,-2,32,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 84 | 82,2101,0,-1,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 85 | 83,2101,0,0,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 86 | 84,2101,0,32,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 87 | 85,2101,13,-1,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 88 | 86,2101,13,0,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 89 | 87,2101,13,32,Illegal Case,Illegal Case,True,2020-06-29 15:17:23,anonymous 90 | -------------------------------------------------------------------------------- /app/csv/q1/calendar-equivalent-weak-general.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Year,Month,Day,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,2008,4,5,2008-04-06,2008-04-06,True,2020-06-29 15:16:54,anonymous 3 | 1,2019,3,28,2019-03-29,2019-03-29,True,2020-06-29 15:16:54,anonymous 4 | 2,2020,2,29,2020-03-01,2020-03-01,True,2020-06-29 15:16:54,anonymous 5 | 3,2017,12,30,2017-12-31,2017-12-31,True,2020-06-29 15:16:54,anonymous 6 | 4,2012,2,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:16:54,anonymous 7 | -------------------------------------------------------------------------------- /app/csv/q1/calendar-equivalent-weak-robust.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Year,Month,Day,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,2008,4,5,2008-04-06,2008-04-06,True,2020-06-29 15:17:19,anonymous 3 | 1,2019,3,28,2019-03-29,2019-03-29,True,2020-06-29 15:17:19,anonymous 4 | 2,2020,2,29,2020-03-01,2020-03-01,True,2020-06-29 15:17:19,anonymous 5 | 3,2017,12,30,2017-12-31,2017-12-31,True,2020-06-29 15:17:19,anonymous 6 | 4,2012,2,31,day is out of range for month,day is out of range for month,True,2020-06-29 15:17:19,anonymous 7 | 5,1999,4,5,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 8 | 6,1998,3,28,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 9 | 7,1999,2,29,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 10 | 8,300,12,30,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 11 | 9,1900,2,31,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 12 | 10,2101,4,5,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 13 | 11,2102,3,28,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 14 | 12,2222,2,29,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 15 | 13,2500,12,30,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 16 | 14,10000,2,31,Year Exceed,Year Exceed,True,2020-06-29 15:17:19,anonymous 17 | 15,2008,0,5,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 18 | 16,2019,-1,28,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 19 | 17,2020,-100,29,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 20 | 18,2017,-3,30,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 21 | 19,2012,-6,31,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 22 | 20,2008,13,5,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 23 | 21,2019,100,28,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 24 | 22,2020,15,29,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 25 | 23,2017,16,30,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 26 | 24,2012,1000,31,Month Exceed,Month Exceed,True,2020-06-29 15:17:19,anonymous 27 | 25,2008,4,0,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 28 | 26,2019,3,-1,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 29 | 27,2020,2,-100,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 30 | 28,2017,12,-2,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 31 | 29,2012,2,-5,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 32 | 30,2008,4,32,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 33 | 31,2019,3,33,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 34 | 32,2020,2,50,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 35 | 33,2017,12,100,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 36 | 34,2012,2,1000,Day Exceed,Day Exceed,True,2020-06-29 15:17:19,anonymous 37 | -------------------------------------------------------------------------------- /app/csv/q1/triangle-boundary.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Edge1,Edge2,Edge3,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,0,100,100,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 3 | 1,1,100,100,等腰三角形,等腰三角形,True,2020-06-29 22:06:30,anonymous 4 | 2,-1,100,100,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 5 | 3,100,100,100,等边三角形,等边三角形,True,2020-06-29 22:06:30,anonymous 6 | 4,199,100,100,等腰三角形,等腰三角形,True,2020-06-29 22:06:30,anonymous 7 | 5,200,100,100,非三角形,非三角形,True,2020-06-29 22:06:30,anonymous 8 | 6,201,100,100,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 9 | 7,100,0,100,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 10 | 8,100,1,100,等腰三角形,等腰三角形,True,2020-06-29 22:06:30,anonymous 11 | 9,100,-1,100,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 12 | 10,100,199,100,等腰三角形,等腰三角形,True,2020-06-29 22:06:30,anonymous 13 | 11,100,200,100,非三角形,非三角形,True,2020-06-29 22:06:30,anonymous 14 | 12,100,201,100,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 15 | 13,100,100,0,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 16 | 14,100,100,1,等腰三角形,等腰三角形,True,2020-06-29 22:06:30,anonymous 17 | 15,100,100,-1,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 18 | 16,100,100,199,等腰三角形,等腰三角形,True,2020-06-29 22:06:30,anonymous 19 | 17,100,100,200,非三角形,非三角形,True,2020-06-29 22:06:30,anonymous 20 | 18,100,100,201,数值越界,数值越界,True,2020-06-29 22:06:30,anonymous 21 | -------------------------------------------------------------------------------- /app/csv/q1/triangle-equivalent.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Edge1,Edge2,Edge3,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,100,100,100,等边三角形,等边三角形,True,2020-06-29 20:14:31,anonymous 3 | 1,100,100,1,等腰三角形,等腰三角形,True,2020-06-29 20:14:31,anonymous 4 | 2,6,7,8,普通三角形,普通三角形,True,2020-06-29 20:14:31,anonymous 5 | 3,3,4,5,直角三角形,直角三角形,True,2020-06-29 20:14:31,anonymous 6 | 4,100,100,200,非三角形,非三角形,True,2020-06-29 20:14:31,anonymous 7 | 5,-1,100,100,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 8 | 6,201,100,100,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 9 | 7,0,100,100,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 10 | 8,100,-1,100,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 11 | 9,100,201,100,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 12 | 10,100,0,100,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 13 | 11,100,100,-1,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 14 | 12,100,100,201,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 15 | 13,100,100,0,数值越界,数值越界,True,2020-06-29 20:14:31,anonymous 16 | -------------------------------------------------------------------------------- /app/csv/q2/commission-boundary-output.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Host,Display,Peripheral,ExpectedOutput1,ActualOutput1,ExpectedOutput2,ActualOutput2,Correctness,Time,TesterName 2 | 0,0,1,1,error,error,error,error,True,2020-06-30 15:23:22,anonymous 3 | 1,1,1,1,100,100,10.0,10.0,True,2020-06-30 15:23:22,anonymous 4 | 2,2,1,1,125,125,12.5,12.5,True,2020-06-30 15:23:22,anonymous 5 | 3,5,5,5,500,500,50.0,50.0,True,2020-06-30 15:23:22,anonymous 6 | 4,9,10,10,975,975,97.5,97.5,True,2020-06-30 15:23:22,anonymous 7 | 5,10,10,10,1000,1000,100.0,100.0,True,2020-06-30 15:23:22,anonymous 8 | 6,11,10,10,1025,1025,153.75,153.75,True,2020-06-30 15:23:22,anonymous 9 | 7,14,14,14,1400,1400,210.0,210.0,True,2020-06-30 15:23:22,anonymous 10 | 9,17,18,18,1775,1775,266.25,266.25,True,2020-06-30 15:23:22,anonymous 11 | 10,18,18,18,1800,1800,270.0,270.0,True,2020-06-30 15:23:22,anonymous 12 | 11,19,18,18,1825,1825,365.0,365.0,True,2020-06-30 15:23:22,anonymous 13 | 12,70,80,90,8200,8200,1640.0,1640.0,True,2020-06-30 15:23:22,anonymous 14 | 13,71,80,90,error,error,error,error,True,2020-06-30 15:23:22,anonymous 15 | -------------------------------------------------------------------------------- /app/csv/q2/commission-boundary.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Host,Display,Peripheral,ExpectedOutput1,ActualOutput1,ExpectedOutput2,ActualOutput2,Correctness,Time,TesterName 2 | 1,0,10,10,error,error,error,error,True,2020-07-01 14:53:24,anonymous 3 | 2,1,10,10,775,775,77.5,77.5,True,2020-07-01 14:53:24,anonymous 4 | 3,2,10,10,800,800,80.0,80.0,True,2020-07-01 14:53:24,anonymous 5 | 4,34,10,10,1600,1600,240.0,240.0,True,2020-07-01 14:53:24,anonymous 6 | 5,35,10,10,1625,1625,243.75,243.75,True,2020-07-01 14:53:24,anonymous 7 | 6,71,10,10,error,error,error,error,True,2020-07-01 14:53:24,anonymous 8 | 7,10,0,10,error,error,error,error,True,2020-07-01 14:53:24,anonymous 9 | 8,10,1,10,730,730,73.0,73.0,True,2020-07-01 14:53:24,anonymous 10 | 9,10,2,10,760,760,76.0,76.0,True,2020-07-01 14:53:24,anonymous 11 | 10,10,39,10,1870,1870,374.0,374.0,True,2020-07-01 14:53:24,anonymous 12 | 11,10,40,10,1900,1900,380.0,380.0,True,2020-07-01 14:53:24,anonymous 13 | 12,10,81,45,error,error,error,error,True,2020-07-01 14:53:24,anonymous 14 | 13,10,10,0,error,error,error,error,True,2020-07-01 14:53:24,anonymous 15 | 14,10,10,1,595,595,59.5,59.5,True,2020-07-01 14:53:24,anonymous 16 | 15,10,10,2,640,640,64.0,64.0,True,2020-07-01 14:53:24,anonymous 17 | 16,10,10,40,2350,2350,470.0,470.0,True,2020-07-01 14:53:24,anonymous 18 | 17,10,10,41,2395,2395,479.0,479.0,True,2020-07-01 14:53:24,anonymous 19 | 18,10,10,91,error,error,error,error,True,2020-07-01 14:53:24,anonymous 20 | 19,10,10,10,1000,1000,100.0,100.0,True,2020-07-01 14:53:24,anonymous 21 | -------------------------------------------------------------------------------- /app/csv/q2/commission-boundary1.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Host,Display,Peripheral,ExpectedOutput1,ActualOutput1,ExpectedOutput2,ActualOutput2,Correctness,Time,TesterName 2 | 1,0,40,45,error,error,error,error,True,2020-06-30 15:21:36,anonymous 3 | 2,1,40,45,3250,3250,650.0,650.0,True,2020-06-30 15:21:36,anonymous 4 | 3,2,40,45,3275,3275,655.0,655.0,True,2020-06-30 15:21:36,anonymous 5 | 4,69,40,45,4950,4950,990.0,990.0,True,2020-06-30 15:21:36,anonymous 6 | 5,70,40,45,4975,4975,995.0,995.0,True,2020-06-30 15:21:36,anonymous 7 | 6,71,40,45,error,error,error,error,True,2020-06-30 15:21:36,anonymous 8 | 7,35,0,45,error,error,error,error,True,2020-06-30 15:21:36,anonymous 9 | 8,35,1,45,2930,2930,586.0,586.0,True,2020-06-30 15:21:36,anonymous 10 | 9,35,2,45,2960,2960,592.0,592.0,True,2020-06-30 15:21:36,anonymous 11 | 10,35,79,45,5270,5270,1054.0,1054.0,True,2020-06-30 15:21:36,anonymous 12 | 11,35,80,45,5300,5300,1060.0,1060.0,True,2020-06-30 15:21:36,anonymous 13 | 12,35,81,45,error,error,error,error,True,2020-06-30 15:21:36,anonymous 14 | 13,35,40,0,error,error,error,error,True,2020-06-30 15:21:36,anonymous 15 | 14,35,40,1,2120,2120,424.0,424.0,True,2020-06-30 15:21:36,anonymous 16 | 15,35,40,2,2165,2165,433.0,433.0,True,2020-06-30 15:21:36,anonymous 17 | 16,35,40,89,6080,6080,1216.0,1216.0,True,2020-06-30 15:21:36,anonymous 18 | 17,35,40,90,6125,6125,1225.0,1225.0,True,2020-06-30 15:21:36,anonymous 19 | 18,35,40,91,error,error,error,error,True,2020-06-30 15:21:36,anonymous 20 | 19,35,40,45,4100,4100,820.0,820.0,True,2020-06-30 15:21:36,anonymous 21 | 20,9,9,9,900,900,90.0,90.0,True,2020-06-30 15:21:36,anonymous 22 | 21,10,10,10,1000,1000,100.0,100.0,True,2020-06-30 15:21:36,anonymous 23 | 22,17,17,17,1700,1700,255.0,255.0,True,2020-06-30 15:21:36,anonymous 24 | 23,18,18,18,1800,1800,270.0,270.0,True,2020-06-30 15:21:36,anonymous 25 | -------------------------------------------------------------------------------- /app/csv/q6/printer-transition-tree-robust.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Command,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,SE,End,End,True,2020-06-29 16:40:57,anonymous 3 | 1,S2,Failure,Failure,True,2020-06-29 16:40:57,anonymous 4 | 2,S3,Failure,Failure,True,2020-06-29 16:40:57,anonymous 5 | 3,S4,Failure,Failure,True,2020-06-29 16:40:57,anonymous 6 | 4,S12,1,1,True,2020-06-29 16:40:57,anonymous 7 | 5,S11,2,2,True,2020-06-29 16:40:57,anonymous 8 | 6,S14,Failure,Failure,True,2020-06-29 16:40:57,anonymous 9 | 7,S1E,Failure,Failure,True,2020-06-29 16:40:57,anonymous 10 | 8,S131,Failure,Failure,True,2020-06-29 16:40:57,anonymous 11 | 9,S133,3,3,True,2020-06-29 16:40:57,anonymous 12 | 10,S134,2,2,True,2020-06-29 16:40:57,anonymous 13 | 11,S132,Failure,Failure,True,2020-06-29 16:40:57,anonymous 14 | 12,S13E,Failure,Failure,True,2020-06-29 16:40:57,anonymous 15 | -------------------------------------------------------------------------------- /app/csv/q6/printer-transition-tree.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,Command,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,SE,End,End,True,2020-06-29 16:41:13,anonymous 3 | 1,S12,1,1,True,2020-06-29 16:41:13,anonymous 4 | 2,S133,3,3,True,2020-06-29 16:41:13,anonymous 5 | 3,S134,2,2,True,2020-06-29 16:41:13,anonymous 6 | 4,S11,2,2,True,2020-06-29 16:41:13,anonymous 7 | -------------------------------------------------------------------------------- /app/csv/q7/charge-boundary.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,MonthTalkTime,YearUnpaidNum,UnpaidCostAcrossYear,PayMethod,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,0,0,0,Alipay,25.0,25.0,True,2020-06-30 11:11:55,anonymous 3 | 1,1,0,0,Alipay,25.1485,25.1485,True,2020-06-30 11:11:55,anonymous 4 | 2,2,0,0,Alipay,25.297,25.297,True,2020-06-30 11:11:55,anonymous 5 | 3,22320,0,0,Alipay,3272.56,3272.56,True,2020-06-30 11:11:55,anonymous 6 | 4,44639,0,0,Alipay,6519.9745,6519.9745,True,2020-06-30 11:11:55,anonymous 7 | 5,44640,0,0,Alipay,6520.12,6520.12,True,2020-06-30 11:11:55,anonymous 8 | 6,44641,0,0,Alipay,error,error,True,2020-06-30 11:11:55,anonymous 9 | 7,60,-1,0, Alipay,error,error,True,2020-06-30 11:11:55,anonymous 10 | 8,60,1,0,Alipay,33.91,33.91,True,2020-06-30 11:11:55,anonymous 11 | 9,60,2,0,Alipay,34.0,34.0,True,2020-06-30 11:11:55,anonymous 12 | 10,60,1,-1,Alipay,error,error,True,2020-06-30 11:11:55,anonymous 13 | 11,60,1,250,Alipay,46.41,46.41,True,2020-06-30 11:11:55,anonymous 14 | 12,60,1,500,Alipay,58.91,58.91,True,2020-06-30 11:11:55,anonymous 15 | 13,60,1,501,Alipay,error,error,True,2020-06-30 11:11:55,anonymous 16 | 14,61,0,0,Alipay,34.01275,34.01275,True,2020-06-30 11:11:55,anonymous 17 | 15,61,-1,0,Alipay,error,error,True,2020-06-30 11:11:55,anonymous 18 | 16,61,2,0,Alipay,34.01275,34.01275,True,2020-06-30 11:11:55,anonymous 19 | 17,61,3,0,Alipay,34.15,34.15,True,2020-06-30 11:11:55,anonymous 20 | 18,120,0,0,Alipay,42.73,42.73,True,2020-06-30 11:11:55,anonymous 21 | 19,120,0,-1,Alipay,error,error,True,2020-06-30 11:11:55,anonymous 22 | 20,120,0,250,Alipay,55.23,55.23,True,2020-06-30 11:11:55,anonymous 23 | 21,120,0,500,Alipay,67.73,67.73,True,2020-06-30 11:11:55,anonymous 24 | 22,120,0,501,Alipay,error,error,True,2020-06-30 11:11:55,anonymous 25 | 23,121,-1,0,Alipay,error,error,True,2020-06-30 11:11:55,anonymous 26 | 24,121,0,0,BankCard,42.787,42.787,True,2020-06-30 11:11:55,anonymous 27 | 25,121,3,0,BankCard,42.787,42.787,True,2020-06-30 11:11:55,anonymous 28 | 26,121,4,0,BankCard,43.15,43.15,True,2020-06-30 11:11:55,anonymous 29 | 27,180,0,0,BankCard,51.46,51.46,True,2020-06-30 11:11:55,anonymous 30 | 28,180,0,-1,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 31 | 29,180,0,250,BankCard,63.96,63.96,True,2020-06-30 11:11:55,anonymous 32 | 30,180,0,500,BankCard,76.46,76.46,True,2020-06-30 11:11:55,anonymous 33 | 31,180,0,501,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 34 | 32,181,0,0,BankCard,51.47125,51.47125,True,2020-06-30 11:11:55,anonymous 35 | 33,181,-1,0,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 36 | 34,181,3,0,BankCard,51.47125,51.47125,True,2020-06-30 11:11:55,anonymous 37 | 35,181,4,0,BankCard,52.15,52.15,True,2020-06-30 11:11:55,anonymous 38 | 36,300,0,0,BankCard,68.875,68.875,True,2020-06-30 11:11:55,anonymous 39 | 37,300,0,-1,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 40 | 38,300,0,250,BankCard,81.375,81.375,True,2020-06-30 11:11:55,anonymous 41 | 39,300,0,500,BankCard,93.875,93.875,True,2020-06-30 11:11:55,anonymous 42 | 40,300,0,501,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 43 | 41,301,0,0,BankCard,68.7955,68.7955,True,2020-06-30 11:11:55,anonymous 44 | 42,301,-1,0,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 45 | 43,301,6,0,BankCard,68.7955,68.7955,True,2020-06-30 11:11:55,anonymous 46 | 44,301,7,0,BankCard,70.15,70.15,True,2020-06-30 11:11:55,anonymous 47 | 45,301,0,-1,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 48 | 46,301,0,250,BankCard,81.2955,81.2955,True,2020-06-30 11:11:55,anonymous 49 | 47,301,0,500,BankCard,93.7955,93.7955,True,2020-06-30 11:11:55,anonymous 50 | 48,301,0,501,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 51 | 49,301,0,0,0,error,error,True,2020-06-30 11:11:55,anonymous 52 | 50,-1,0,0,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 53 | 51,1,11,0,BankCard,25.15,25.15,True,2020-06-30 11:11:55,anonymous 54 | 52,1,12,0,BankCard,error,error,True,2020-06-30 11:11:55,anonymous 55 | -------------------------------------------------------------------------------- /app/csv/q7/charge-decision.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,MonthTalkTime,YearUnpaidNum,UnpaidCostAcrossYear,PayMethod,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,30,1,0,Alipay,29.455,29.455,True,2020-06-30 11:11:47,anonymous 3 | 1,30,3,0,Alipay,29.5,29.5,True,2020-06-30 11:11:47,anonymous 4 | 2,90,5,0,Alipay,38.5,38.5,True,2020-06-30 11:11:47,anonymous 5 | 3,90,2,0,Alipay,38.2975,38.2975,True,2020-06-30 11:11:47,anonymous 6 | 4,150,3,0,Alipay,47.05,47.05,True,2020-06-30 11:11:47,anonymous 7 | 5,150,6,0,Alipay,47.5,47.5,True,2020-06-30 11:11:47,anonymous 8 | 6,240,3,0,Alipay,60.1,60.1,True,2020-06-30 11:11:47,anonymous 9 | 7,240,8,0,Alipay,61.0,61.0,True,2020-06-30 11:11:47,anonymous 10 | 8,320,6,0,Alipay,71.56,71.56,True,2020-06-30 11:11:47,anonymous 11 | 9,320,11,0,Alipay,73.0,73.0,True,2020-06-30 11:11:47,anonymous 12 | -------------------------------------------------------------------------------- /app/csv/q7/charge-equivalence.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,MonthTalkTime,YearUnpaidNum,UnpaidCostAcrossYear,PayMethod,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 0,30,0,0,Alipay,29.455,29.455,True,2020-06-30 11:11:52,anonymous 3 | 1,90,0,0,Alipay,38.2975,38.2975,True,2020-06-30 11:11:52,anonymous 4 | 2,150,0,0,Alipay,47.05,47.05,True,2020-06-30 11:11:52,anonymous 5 | 3,240,0,0,Alipay,60.1,60.1,True,2020-06-30 11:11:52,anonymous 6 | 4,320,0,0,Alipay,71.56,71.56,True,2020-06-30 11:11:52,anonymous 7 | 5,30,2,0,Alipay,29.5,29.5,True,2020-06-30 11:11:52,anonymous 8 | 6,90,3,0,Alipay,38.5,38.5,True,2020-06-30 11:11:52,anonymous 9 | 7,150,4,0,Alipay,47.5,47.5,True,2020-06-30 11:11:52,anonymous 10 | 8,240,4,0,Alipay,61.0,61.0,True,2020-06-30 11:11:52,anonymous 11 | 9,320,7,0,Alipay,73.0,73.0,True,2020-06-30 11:11:52,anonymous 12 | 10,30,0,250,Alipay,41.955,41.955,True,2020-06-30 11:11:52,anonymous 13 | 11,90,0,250,Alipay,50.7975,50.7975,True,2020-06-30 11:11:52,anonymous 14 | 12,150,0,250,Alipay,59.55,59.55,True,2020-06-30 11:11:52,anonymous 15 | 13,240,0,250,Alipay,72.6,72.6,True,2020-06-30 11:11:52,anonymous 16 | 14,320,0,250,Alipay,84.06,84.06,True,2020-06-30 11:11:52,anonymous 17 | 15,30,2,250,Alipay,42.0,42.0,True,2020-06-30 11:11:52,anonymous 18 | 16,90,3,250,Alipay,51.0,51.0,True,2020-06-30 11:11:52,anonymous 19 | 17,150,4,250,Alipay,60.0,60.0,True,2020-06-30 11:11:52,anonymous 20 | 18,240,4,250,Alipay,73.5,73.5,True,2020-06-30 11:11:52,anonymous 21 | 19,320,7,250,Alipay,85.5,85.5,True,2020-06-30 11:11:52,anonymous 22 | 20,-1,0,0,Alipay,error,error,True,2020-06-30 11:11:52,anonymous 23 | 21,30,-1,0,Alipay,error,error,True,2020-06-30 11:11:52,anonymous 24 | 22,30,0,-1,Alipay,error,error,True,2020-06-30 11:11:52,anonymous 25 | 23,44641,0,0,Alipay,error,error,True,2020-06-30 11:11:52,anonymous 26 | 24,30,12,0,Alipay,error,error,True,2020-06-30 11:11:52,anonymous 27 | 25,30,0,501,Alipay,error,error,True,2020-06-30 11:11:52,anonymous 28 | -------------------------------------------------------------------------------- /app/csv/q7/charge.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,MonthTalkTime,YearUnpaidNum,UnpaidCostAcrossYear,PayMethod,ExpectedOutput,ActualOutput,Correctness,Time,TesterName 2 | 1,-1,0,0,Alipay,error,error,True,2020-07-01 15:56:19,anonymous 3 | 2,0,0,0,Alipay,25.0,25.0,True,2020-07-01 15:56:19,anonymous 4 | 3,1,0,0,Alipay,25.1485,25.1485,True,2020-07-01 15:56:19,anonymous 5 | 4,30,1,0,Alipay,29.455,29.455,True,2020-07-01 15:56:19,anonymous 6 | 5,30,3,0,Alipay,29.5,29.5,True,2020-07-01 15:56:19,anonymous 7 | 6,30,-1,0,Alipay,error,error,True,2020-07-01 15:56:19,anonymous 8 | 7,30,0,-1,Alipay,error,error,True,2020-07-01 15:56:19,anonymous 9 | 8,60,-1,0, Alipay,error,error,True,2020-07-01 15:56:19,anonymous 10 | 9,60,1,-1,Alipay,error,error,True,2020-07-01 15:56:19,anonymous 11 | 10,60,1,250,Alipay,46.41,46.41,True,2020-07-01 15:56:19,anonymous 12 | 11,60,1,500,Alipay,58.91,58.91,True,2020-07-01 15:56:19,anonymous 13 | 12,61,-1,0,Alipay,error,error,True,2020-07-01 15:56:19,anonymous 14 | 13,61,2,0,Alipay,34.01275,34.01275,True,2020-07-01 15:56:19,anonymous 15 | 14,61,3,0,Alipay,34.15,34.15,True,2020-07-01 15:56:19,anonymous 16 | 15,90,5,0,Alipay,38.5,38.5,True,2020-07-01 15:56:19,anonymous 17 | 16,90,2,0,Alipay,38.2975,38.2975,True,2020-07-01 15:56:19,anonymous 18 | 17,120,0,0,Alipay,42.73,42.73,True,2020-07-01 15:56:19,anonymous 19 | 18,120,0,-1,Alipay,error,error,True,2020-07-01 15:56:19,anonymous 20 | 19,120,0,250,Alipay,55.23,55.23,True,2020-07-01 15:56:19,anonymous 21 | 20,121,-1,0,Alipay,error,error,True,2020-07-01 15:56:19,anonymous 22 | 21,121,0,0,BankCard,42.787,42.787,True,2020-07-01 15:56:19,anonymous 23 | 22,121,3,0,BankCard,42.787,42.787,True,2020-07-01 15:56:19,anonymous 24 | 23,121,4,0,BankCard,43.15,43.15,True,2020-07-01 15:56:19,anonymous 25 | 24,150,3,0,Alipay,47.05,47.05,True,2020-07-01 15:56:19,anonymous 26 | 25,150,6,0,Alipay,47.5,47.5,True,2020-07-01 15:56:19,anonymous 27 | 26,180,0,0,BankCard,51.46,51.46,True,2020-07-01 15:56:19,anonymous 28 | 27,180,0,-1,BankCard,error,error,True,2020-07-01 15:56:19,anonymous 29 | 28,181,0,0,BankCard,51.47125,51.47125,True,2020-07-01 15:56:19,anonymous 30 | 29,181,-1,0,BankCard,error,error,True,2020-07-01 15:56:19,anonymous 31 | 30,181,3,0,BankCard,51.47125,51.47125,True,2020-07-01 15:56:19,anonymous 32 | 31,240,3,0,Alipay,60.1,60.1,True,2020-07-01 15:56:19,anonymous 33 | 32,240,8,0,Alipay,61.0,61.0,True,2020-07-01 15:56:19,anonymous 34 | 35 | -------------------------------------------------------------------------------- /app/csv/q8/sales-condition-combination-cov.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,AnnualSales,LeaveDays,CashtoAccountRate,ExpectedOutput1,ActualOutput1,ExpectedOutput2,ActualOutput2,Correctness,Path,ConditionGruop,Condition,Time,TesterName 2 | 1,230,3,0.7,7,7,32.86,32.86,True,MACFHI,"15, 1, 7","T1, T2, T4, F5, F6, F7",2020-06-28 17:35:22,anonymous 3 | 2,230,3,0.5,no commission,no commission,no commission,no commission,True,MACGI,"15, 1, 8","T1, T2, F4, F5, F6, F7",2020-06-28 17:35:22,anonymous 4 | 3,230,11,0.7,6,6,38.33,38.33,True,MABEHI,"15, 2, 5","T1, F2, T3, F5, F6, F7",2020-06-28 17:35:22,anonymous 5 | 4,230,11,0.9,5,5,46.0,46.0,True,MABDHI,"15, 2, 6","T1, F2, F3, F5, F6, F7",2020-06-28 17:35:22,anonymous 6 | 5,180,3,0.7,6,6,30.0,30.0,True,MABEHI,"15, 3, 5","F1, T2, T3, F5, F6, F7",2020-06-28 17:35:22,anonymous 7 | 6,180,3,0.9,5,5,36.0,36.0,True,MABDHI,"15, 3, 6","F1, T2, F3, F5, F6, F7",2020-06-28 17:35:22,anonymous 8 | 7,180,11,0.7,6,6,30.0,30.0,True,MABEHI,"15, 4, 5","F1, F2, T3, F5, F6, F7",2020-06-28 17:35:22,anonymous 9 | 8,180,11,0.9,5,5,36.0,36.0,True,MABDHI,"15, 4, 6","F1, F2, F3, F5, F6, F7",2020-06-28 17:35:22,anonymous 10 | 9,-100,-3,-0.1,error,error,error,error,True,MN,9,"T5, T6, T7",2020-06-28 17:35:22,anonymous 11 | 10,-100,-3,0.1,error,error,error,error,True,MN,10,"T5, T6, F7",2020-06-28 17:35:22,anonymous 12 | 11,-100,3,0.1,error,error,error,error,True,MN,11,"T5, F6, F7",2020-06-28 17:35:22,anonymous 13 | 12,-100,3,-0.1,error,error,error,error,True,MN,12,"T5, F6, T7",2020-06-28 17:35:22,anonymous 14 | 13,100,-3,-0.1,error,error,error,error,True,MN,13,"F5, T6, T7",2020-06-28 17:35:22,anonymous 15 | 14,100,-3,-0.1,error,error,error,error,True,MN,14,"F5, T6, F7",2020-06-28 17:35:22,anonymous 16 | 15,100,3,-0.1,error,error,error,error,True,MN,16,"F5, F6, T7",2020-06-28 17:35:22,anonymous 17 | -------------------------------------------------------------------------------- /app/csv/q8/sales-condition-cov.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,AnnualSales,LeaveDays,CashtoAccountRate,ExpectedOutput1,ActualOutput1,ExpectedOutput2,ActualOutput2,Correctness,Path,Condition,Time,TesterName 2 | 1,230,3,0.7,7,7,32.86,32.86,True,MACFHI,"T1, T2, T4, F5, F6, F7",2020-06-28 17:33:34,anonymous 3 | 2,230,3,0.5,no commission,no commission,no commission,no commission,True,MACGI,"T1, T2, F4, F5, F6, F7",2020-06-28 17:33:34,anonymous 4 | 3,180,11,0.7,6,6,30.0,30.0,True,NABEHI,"F1, F2, T3, F5, F6, F7",2020-06-28 17:33:34,anonymous 5 | 4,180,11,0.9,5,5,36.0,36.0,True,MABDHI,"F1, F2, F3, F5, F6, F7",2020-06-28 17:33:34,anonymous 6 | 5,-100,-3,-0.1,error,error,error,error,True,MN,"T5, T6, T7",2020-06-28 17:33:34,anonymous 7 | -------------------------------------------------------------------------------- /app/csv/q8/sales-judge-condition-cov.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,AnnualSales,LeaveDays,CashtoAccountRate,ExpectedOutput1,ActualOutput1,ExpectedOutput2,ActualOutput2,Correctness,Path,Branch,Condition,Time,TesterName 2 | 1,230,3,0.7,7,7,32.86,32.86,True,MACFHI,"C, F","T1, T2, T4, F5, F6, F7",2020-06-28 17:34:22,anonymous 3 | 2,230,3,0.5,no commission,no commission,no commission,no commission,True,MACGI,"C, G","T1, T2, F4, F5, F6, F7",2020-06-28 17:34:22,anonymous 4 | 3,180,11,0.7,6,6,30.0,30.0,True,MABEHI,"B, E","F1, F2, T3, F5, F6, F7",2020-06-28 17:34:22,anonymous 5 | 4,180,11,0.9,5,5,36.0,36.0,True,MABDHI,"B, D","F1, F2, F3, F5, F6, F7",2020-06-28 17:34:22,anonymous 6 | 5,-100,-3,-0.1,error,error,error,error,True,MN,N,"T5, T6, T7",2020-06-28 17:34:22,anonymous 7 | -------------------------------------------------------------------------------- /app/csv/q8/sales-judge-cov.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,AnnualSales,LeaveDays,CashtoAccountRate,ExpectedOutput1,ActualOutput1,ExpectedOutput2,ActualOutput2,Correctness,Path,Time,TesterName 2 | 1,180,3,0.9,5,5,36.0,36.0,True,MABDHI,2020-06-28 17:32:41,anonymous 3 | 2,220,11,0.8,6,6,36.67,36.67,True,MABEHI,2020-06-28 17:32:41,anonymous 4 | 3,230,5,0.7,7,7,32.86,32.86,True,MACFHI,2020-06-28 17:32:41,anonymous 5 | 4,240,8,0.5,no commission,no commission,no commission,no commission,True,MACGI,2020-06-28 17:32:41,anonymous 6 | 5,-100,3,0.0,error,error,error,error,True,MN,2020-06-28 17:32:41,anonymous 7 | -------------------------------------------------------------------------------- /app/csv/q8/sales-statement-cov.csv: -------------------------------------------------------------------------------- 1 | TestCaseID,AnnualSales,LeaveDays,CashtoAccountRate,ExpectedOutput1,ActualOutput1,ExpectedOutput2,ActualOutput2,Correctness,Path,Time,TesterName 2 | 1,230,3,0.7,7,7,32.86,32.86,True,MACFHI,2020-06-28 17:32:15,anonymous 3 | 2,230,3,0.5,no commission,no commission,no commission,no commission,True,MACGI,2020-06-28 17:32:15,anonymous 4 | 3,180,3,0.7,6,6,30.0,30.0,True,MABEHI,2020-06-28 17:32:15,anonymous 5 | 4,180,7,0.9,5,5,36.0,36.0,True,MABDHI,2020-06-28 17:32:15,anonymous 6 | -------------------------------------------------------------------------------- /app/model/demo.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import fields 2 | 3 | model = { 4 | 'id': fields.String(required=True, description='Model Identifier'), 5 | 'content': fields.String(required=True, description='Model Content'), 6 | } 7 | 8 | 9 | MODELS = [ 10 | {'id': '1', 'content': 'content1'} 11 | ] 12 | 13 | -------------------------------------------------------------------------------- /app/model/history.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import fields 2 | 3 | history = { 4 | 'method_type': fields.String(required=True, description='测试方法'), 5 | 'code_version': fields.String(required=True, description='代码版本') 6 | } 7 | 8 | MODELS = [] 9 | -------------------------------------------------------------------------------- /app/model/question1.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import fields 2 | 3 | triangle_model = { 4 | 'edge1': fields.Float(required=True, description='边1'), 5 | 'edge2': fields.Float(required=True, description='边2'), 6 | 'edge3': fields.Float(required=True, description='边3') 7 | } 8 | calender_model = { 9 | 'year': fields.Integer(required=True, description='年'), 10 | 'month': fields.Integer(required=True, description='月'), 11 | 'day': fields.Integer(required=True, description='日') 12 | } 13 | MODELS = [] 14 | -------------------------------------------------------------------------------- /app/model/question2.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import fields 2 | 3 | model = { 4 | 'host': fields.Integer(required=True, description='主机数目'), 5 | 'display': fields.Integer(required=True, description='显示器数目'), 6 | 'peripheral': fields.Integer(required=True, description='外设数目') 7 | } 8 | 9 | MODELS = [] 10 | -------------------------------------------------------------------------------- /app/model/question6.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import fields 2 | 3 | model = { 4 | 'command': fields.String(required=True, description='命令串') 5 | } 6 | 7 | MODELS = [] 8 | -------------------------------------------------------------------------------- /app/model/question7.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import fields 2 | 3 | model = { 4 | 'talk_time_month': fields.Integer(required=True, description='当月通话时间'), 5 | 'unpaid_num_year': fields.Integer(required=True, description='年度累计未按时缴费的次数'), 6 | 'unpaid_cost_across_year': fields.Float(required=True, description='跨年未缴费费用'), 7 | 'pay_method': fields.String(required=True, description='支付方式') 8 | } 9 | 10 | MODELS = [] 11 | -------------------------------------------------------------------------------- /app/model/question8.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import fields 2 | 3 | model = { 4 | 'annual_sales': fields.Float(required=True, description='年销售额(万元)'), 5 | 'leave_days': fields.Integer(required=True, description='请假天数(天)'), 6 | 'rate_cash_to_account': fields.Float(required=True, description='现金到帐率(0.x)'), 7 | } 8 | 9 | MODELS = [] 10 | -------------------------------------------------------------------------------- /app/model/show.py: -------------------------------------------------------------------------------- 1 | from flask_restplus import fields 2 | 3 | model = { 4 | 'problem': fields.String(required=True, description='问题名称'), 5 | 'method_type': fields.String(required=True, description='方法类型'), 6 | } 7 | 8 | MODELS = [] 9 | -------------------------------------------------------------------------------- /app/service/demo.py: -------------------------------------------------------------------------------- 1 | from app.model.demo import MODELS 2 | 3 | 4 | class demo: 5 | def __init__(self): 6 | pass 7 | 8 | @staticmethod 9 | def get_all(): 10 | return MODELS 11 | 12 | @staticmethod 13 | def get_by_id(id): 14 | for model in MODELS: 15 | if model['id'] == id: 16 | return model 17 | 18 | @staticmethod 19 | def create_model(model): 20 | MODELS.append(model) 21 | return MODELS 22 | -------------------------------------------------------------------------------- /app/service/question1.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | from app.csv.index import calendar as calender_index 3 | from app.csv.index import triangle as triangle_index 4 | from app.common.commonUtil import df_update, df_read 5 | 6 | 7 | def calendar_atom(arg_list): 8 | v_list_new = [str(x) for x in arg_list] 9 | year, month, day = arg_list[0], arg_list[1], arg_list[2] 10 | if (year < 2000 or year > 2100) and (month < 1 or month > 12) and (day < 1 or day > 31): 11 | return 'Illegal Case' 12 | if year < 2000 or year > 2100: 13 | return 'Year Exceed' 14 | if month < 1 or month > 12: 15 | return 'Month Exceed' 16 | if day < 1 or day > 31: 17 | return 'Day Exceed' 18 | try: 19 | _date = datetime.datetime.strptime('-'.join(v_list_new), '%Y-%m-%d').date() 20 | except Exception as e: 21 | return str(e) 22 | return str(_date + datetime.timedelta(days=1)) 23 | 24 | 25 | def triangle_atom_v1(arg_list): 26 | a, b, c = arg_list[0], arg_list[1], arg_list[2] 27 | if a > 200 or b > 200 or c > 200: 28 | return '数值越界' 29 | if a <= 0 or b <= 0 or c <= 0: 30 | return '数值越界' 31 | if a + b > c and a + c > b and b + c > a: 32 | if a == b or a == c or b == c: 33 | if a == b and b == c: 34 | return '等边三角形' 35 | elif a * a + b * b == c * c or b * b + c * c == a * a or a * a + c * c == b * b: 36 | return '等腰直角三角形' 37 | else: 38 | return '直角三角形' 39 | elif a * a + b * b == c * c or b * b + c * c == a * a or a * a + c * c == b * b: 40 | return '直角三角形' 41 | else: 42 | return '普通三角形' 43 | else: 44 | return '非三角形' 45 | 46 | 47 | def triangle_atom_v2(arg_list): 48 | a, b, c = arg_list[0], arg_list[1], arg_list[2] 49 | if a > 200 or b > 200 or c > 200: 50 | return '数值越界' 51 | if a <= 0 or b <= 0 or c <= 0: 52 | return '数值越界' 53 | if a + b > c and a + c > b and b + c > a: 54 | if a == b or a == c or b == c: 55 | if a == b and b == c: 56 | return '等边三角形' 57 | elif a * a + b * b == c * c or b * b + c * c == a * a or a * a + c * c == b * b: 58 | return '等腰直角三角形' 59 | else: 60 | return '等腰三角形' 61 | if a * a + b * b == c * c or b * b + c * c == a * a or a * a + c * c == b * b: 62 | return '直角三角形' 63 | else: 64 | return '普通三角形' 65 | else: 66 | return '非三角形' 67 | 68 | 69 | triangle_code_v = { 70 | 'v1': triangle_atom_v1, 71 | 'v2': triangle_atom_v2 72 | } 73 | 74 | 75 | class question1: 76 | def __init__(self): 77 | pass 78 | 79 | @staticmethod 80 | def triangle(method_type, code_version='v2'): 81 | csv_path = triangle_index[method_type] 82 | df, arg_start, arg_end = df_read(csv_path=csv_path) 83 | output1 = [] 84 | for i in range(0, len(df)): 85 | arg_list = df.iloc[i, arg_start:arg_end].values.tolist() 86 | output1.append(triangle_code_v[code_version](arg_list)) 87 | return df_update(df=df, csv_path=csv_path, actual_outputs=[output1], tester_name='anonymous') 88 | 89 | @staticmethod 90 | def calendar(method_type): 91 | csv_path = calender_index[method_type] 92 | df, arg_start, arg_end = df_read(csv_path) 93 | output1 = [] 94 | for i in range(0, len(df)): 95 | arg_list = df.iloc[i, arg_start:arg_end].values.tolist() 96 | output1.append(calendar_atom(arg_list)) 97 | return df_update(df=df, csv_path=csv_path, actual_outputs=[output1], tester_name='anonymous') 98 | 99 | @staticmethod 100 | def triangle_method_test(request, code_version='v2'): 101 | arg_list = [request['edge1'], request['edge2'], request['edge3']] 102 | return triangle_code_v[code_version](arg_list) 103 | 104 | @staticmethod 105 | def calendar_method_test(request): 106 | arg_list = [request['year'], request['month'], request['day']] 107 | return calendar_atom(arg_list) 108 | -------------------------------------------------------------------------------- /app/service/question2.py: -------------------------------------------------------------------------------- 1 | from app.csv.index import commission as commission_index 2 | from app.common.commonUtil import df_update, df_read 3 | 4 | 5 | def commission_atom(arg_list): 6 | host_price, display_price, peripheral_price = 25, 30, 45 7 | host_num, display_num, peripheral_num = arg_list[0], arg_list[1], arg_list[2] 8 | if host_num <= 0 or display_num <= 0 or peripheral_num <= 0 or host_num > 70 or display_num > 80 or peripheral_num > 90: 9 | return 'error', 'error' 10 | commission = host_num * host_price + display_num * display_price + peripheral_num * peripheral_price 11 | if commission <= 1000: 12 | return commission, float('%.2f' % (commission * 0.1)) 13 | elif commission <= 1800: 14 | return commission, float('%.2f' % (commission * 0.15)) 15 | else: 16 | return commission, float('%.2f' % (commission * 0.2)) 17 | 18 | 19 | class question2: 20 | def __init__(self): 21 | pass 22 | 23 | @staticmethod 24 | def commission(method_type): 25 | csv_path = commission_index[method_type] 26 | df, arg_start, arg_end = df_read(csv_path, arg_end_label='ExpectedOutput1') 27 | output1 = [] 28 | output2 = [] 29 | for i in range(0, len(df)): 30 | arg_list = df.iloc[i, arg_start:arg_end].values.tolist() 31 | output_1, output_2 = commission_atom(arg_list) 32 | output1.append(output_1) 33 | output2.append(output_2) 34 | return df_update(df=df, csv_path=csv_path, actual_outputs=[output1, output2], tester_name='anonymous') 35 | 36 | @staticmethod 37 | def commission_method_test(request): 38 | arg_list = [request['host'], request['display'], request['peripheral']] 39 | sales, commission = commission_atom(arg_list) 40 | return {'sales': sales, 'commission': commission} 41 | -------------------------------------------------------------------------------- /app/service/question6.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from app.common.commonUtil import df_update, df_read 3 | from app.csv.index import printer as printer_index 4 | 5 | ''' 6 | @program: question6.py 7 | 8 | @description: 9 | 10 | @author: doubleZ 11 | 12 | ''' 13 | from state_machine import State, Event, acts_as_state_machine, after, before, InvalidStateTransition 14 | 15 | state_dir = { 16 | 'Empty': 1, 17 | 'Printing': 2, 18 | 'Alarming': 3, 19 | 'End': 'End', 20 | 'Failure': 'Failure' 21 | } 22 | 23 | 24 | @acts_as_state_machine 25 | class Printer: 26 | initial = State(initial=True) 27 | empty = State() 28 | printing = State() 29 | alarming = State() 30 | end = State() 31 | failure = State() 32 | 33 | # initial event 34 | initialize = Event(from_states=initial, to_state=empty) 35 | 36 | # delete event 37 | empty_delete = Event(from_states=empty, to_state=end) 38 | other_delete = Event(from_states=(printing, alarming), to_state=failure) 39 | 40 | # ask for print event 41 | general_ask_for_print = Event(from_states=(empty, printing), to_state=printing) 42 | alarm_ask_for_print = Event(from_states=alarming, to_state=failure) 43 | 44 | # print end event 45 | general_print_end = Event(from_states=(empty, alarming), to_state=failure) 46 | printing_print_end = Event(from_states=printing, to_state=empty) 47 | 48 | # check printer event 49 | empty_check_printer = Event(from_states=empty, to_state=failure) 50 | general_check_printer = Event(from_states=(printing, alarming), to_state=alarming) 51 | 52 | # check printer end event 53 | alarm_check_printer_end = Event(from_states=alarming, to_state=printing) 54 | general_check_printer_end = Event(from_states=(empty, printing), to_state=failure) 55 | 56 | 57 | def transition(printer, event): 58 | try: 59 | event() 60 | except InvalidStateTransition as err: 61 | print("Failure") 62 | 63 | 64 | def printer_atom(arg_list): 65 | command = arg_list[0] 66 | 67 | printer = Printer() 68 | 69 | for cmd in command: 70 | if cmd == 'S': 71 | transition(printer, printer.initialize) 72 | elif cmd == '1': 73 | if printer.current_state == printer.alarming: 74 | transition(printer, printer.alarm_ask_for_print) 75 | else: 76 | transition(printer, printer.general_ask_for_print) 77 | elif cmd == '2': 78 | if printer.current_state == printer.printing: 79 | transition(printer, printer.printing_print_end) 80 | else: 81 | transition(printer, printer.general_print_end) 82 | elif cmd == '3': 83 | if printer.current_state == printer.empty: 84 | transition(printer, printer.empty_check_printer) 85 | else: 86 | transition(printer, printer.general_check_printer) 87 | elif cmd == '4': 88 | if printer.current_state == printer.alarming: 89 | transition(printer, printer.alarm_check_printer_end) 90 | else: 91 | transition(printer, printer.general_check_printer_end) 92 | elif cmd == 'E': 93 | if printer.current_state == printer.empty: 94 | transition(printer, printer.empty_delete) 95 | else: 96 | transition(printer, printer.other_delete) 97 | final_state = printer.current_state 98 | return final_state 99 | 100 | 101 | class question6: 102 | def __init__(self): 103 | pass 104 | 105 | @staticmethod 106 | def printer(method_type): 107 | csv_path = printer_index[method_type] 108 | df, arg_start, arg_end = df_read(csv_path=csv_path) 109 | output1 = [] 110 | for i in range(0, len(df)): 111 | arg_list = df.iloc[i, arg_start:arg_end].values.tolist() 112 | output1.append(state_dir[printer_atom(arg_list).capitalize()]) 113 | return df_update(df=df, csv_path=csv_path, actual_outputs=[output1], tester_name='anonymous') 114 | 115 | @staticmethod 116 | def printer_method_test(request): 117 | arg_list = request['command'] 118 | state = printer_atom([arg_list]).capitalize() 119 | return {'state': state_dir[state], 'description': state} 120 | 121 | 122 | # print(printer_atom(['S133'])) 123 | -------------------------------------------------------------------------------- /app/service/question7.py: -------------------------------------------------------------------------------- 1 | from app.csv.index import charge as charge_index 2 | from app.common.commonUtil import df_update, df_read 3 | 4 | 5 | def charge_atom_v1(arg_list): 6 | pay_method_list = ['Alipay', 'BankCard'] 7 | monthly_fee, cost_per_min = 25, 0.15 8 | talk_time_month, unpaid_num_year, unpaid_cost_across_year, pay_method = \ 9 | arg_list[0], arg_list[1], arg_list[2], arg_list[3] 10 | cost = monthly_fee 11 | if talk_time_month < 0 or talk_time_month > 44640 or unpaid_num_year < 0 or unpaid_num_year > 11 or pay_method not in pay_method_list or unpaid_cost_across_year < 0 or unpaid_cost_across_year > 500: 12 | return 'error' 13 | if talk_time_month <= 60 and unpaid_num_year <= 1: 14 | cost += talk_time_month * cost_per_min * 0.01 15 | elif talk_time_month <= 120 and unpaid_num_year <= 2: 16 | cost += talk_time_month * cost_per_min * 0.015 17 | elif talk_time_month <= 180 and unpaid_num_year <= 3: 18 | cost += talk_time_month * cost_per_min * 0.02 19 | elif talk_time_month <= 300 and unpaid_num_year <= 3: 20 | cost += talk_time_month * cost_per_min * 0.025 21 | elif talk_time_month > 300 and unpaid_num_year <= 6: 22 | cost += talk_time_month * cost_per_min * 0.03 23 | else: 24 | cost += talk_time_month * cost_per_min 25 | cost += unpaid_cost_across_year * 0.05 26 | return cost 27 | 28 | 29 | def charge_atom_v2(arg_list): 30 | pay_method_list = ['Alipay', 'BankCard'] 31 | monthly_fee, cost_per_min = 25, 0.15 32 | talk_time_month, unpaid_num_year, unpaid_cost_across_year, pay_method = \ 33 | arg_list[0], arg_list[1], arg_list[2], arg_list[3] 34 | cost = monthly_fee 35 | if talk_time_month < 0 or talk_time_month > 44640 or unpaid_num_year < 0 or unpaid_num_year > 11 or pay_method not in pay_method_list or unpaid_cost_across_year < 0 or unpaid_cost_across_year > 500: 36 | return 'error' 37 | if talk_time_month <= 60 and unpaid_num_year <= 1: 38 | cost += talk_time_month * cost_per_min * (1 - 0.01) 39 | elif 60 < talk_time_month <= 120 and unpaid_num_year <= 2: 40 | cost += talk_time_month * cost_per_min * (1 - 0.015) 41 | elif 120 < talk_time_month <= 180 and unpaid_num_year <= 3: 42 | cost += talk_time_month * cost_per_min * (1 - 0.02) 43 | elif 180 < talk_time_month <= 300 and unpaid_num_year <= 3: 44 | cost += talk_time_month * cost_per_min * (1 - 0.025) 45 | elif talk_time_month > 300 and unpaid_num_year <= 6: 46 | cost += talk_time_month * cost_per_min * (1 - 0.03) 47 | else: 48 | cost += talk_time_month * cost_per_min 49 | cost += unpaid_cost_across_year * 0.05 50 | return float('%.5f' % cost) 51 | 52 | 53 | code_v = { 54 | 'v1': charge_atom_v1, 55 | 'v2': charge_atom_v2 56 | } 57 | 58 | 59 | class question7: 60 | def __init__(self): 61 | pass 62 | 63 | @staticmethod 64 | def charge(method_type, code_version='v2'): 65 | csv_path = charge_index[method_type] 66 | df, arg_start, arg_end = df_read(csv_path) 67 | output1 = [] 68 | for i in range(0, len(df)): 69 | arg_list = df.iloc[i, arg_start:arg_end].values.tolist() 70 | output1.append(code_v[code_version](arg_list)) 71 | return df_update(df=df, csv_path=csv_path, actual_outputs=[output1], tester_name='anonymous') 72 | 73 | @staticmethod 74 | def charge_method_test(request, code_version='v2'): 75 | arg_list = [request['talk_time_month'], request['unpaid_num_year'], request['unpaid_cost_across_year'], 76 | request['pay_method']] 77 | return code_v[code_version](arg_list) 78 | -------------------------------------------------------------------------------- /app/service/question8.py: -------------------------------------------------------------------------------- 1 | from app.csv.index import sales as sales_index 2 | from app.common.commonUtil import df_update, df_read 3 | 4 | 5 | def sales_atom(arg_list): 6 | annual_sales, leave_days, rate_cash_to_account = arg_list[0], arg_list[1], arg_list[2] 7 | zero = float('%.2f' % 0) 8 | if annual_sales < 0 or leave_days < 0 or rate_cash_to_account > 1 or rate_cash_to_account < 0: 9 | return 'error', 'error' 10 | if annual_sales > 200 and leave_days <= 10: 11 | if rate_cash_to_account >= 0.6: 12 | commission_rate = 7 13 | else: 14 | commission_rate = 0 15 | else: 16 | if rate_cash_to_account <= 0.85: 17 | commission_rate = 6 18 | else: 19 | commission_rate = 5 20 | if commission_rate == 0: 21 | return 'no commission', 'no commission' 22 | else: 23 | result = annual_sales / commission_rate 24 | return commission_rate, float('%.2f' % result) 25 | 26 | 27 | class question8: 28 | def __init__(self): 29 | pass 30 | 31 | @staticmethod 32 | def sales(method_type): 33 | csv_path = sales_index[method_type] 34 | df, arg_start, arg_end = df_read(csv_path, arg_end_label='ExpectedOutput1') 35 | output1 = [] 36 | output2 = [] 37 | for i in range(0, len(df)): 38 | arg_list = df.iloc[i, arg_start:arg_end].values.tolist() 39 | output_1, output_2 = sales_atom(arg_list) 40 | output1.append(output_1) 41 | output2.append(output_2) 42 | return df_update(df=df, csv_path=csv_path, actual_outputs=[output1, output2], tester_name='anonymous') 43 | 44 | @staticmethod 45 | def sales_method_test(request): 46 | arg_list = [request['annual_sales'], request['leave_days'], request['rate_cash_to_account']] 47 | commission_rate, commission = sales_atom(arg_list) 48 | return {'commission_rate': commission_rate, 'commission': commission} 49 | -------------------------------------------------------------------------------- /app/service/show.py: -------------------------------------------------------------------------------- 1 | from app.csv.index import csv_dir2 2 | from app.csv.index import csv_dir 3 | import pandas as pd 4 | import json 5 | from collections import OrderedDict 6 | 7 | 8 | class ShowCSV: 9 | @staticmethod 10 | def get_csv(request): 11 | problem, method_type = request['problem'], request['method_type'] 12 | df = pd.read_csv(csv_dir2[problem][method_type]) 13 | temp_json = df.to_json(orient='records') 14 | temp_dict = json.loads(temp_json, object_pairs_hook=OrderedDict) 15 | return temp_dict 16 | 17 | @staticmethod 18 | def get_csv_dir(): 19 | return csv_dir 20 | -------------------------------------------------------------------------------- /images/csd/Readme.assets/image-20200702204606286.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/images/csd/Readme.assets/image-20200702204606286.png -------------------------------------------------------------------------------- /images/csd/Readme.assets/image-20200702204639892.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/images/csd/Readme.assets/image-20200702204639892.png -------------------------------------------------------------------------------- /images/csd/Readme.assets/image-20200702204710495.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/images/csd/Readme.assets/image-20200702204710495.png -------------------------------------------------------------------------------- /images/csd/Readme.assets/image-20200702204805166.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/images/csd/Readme.assets/image-20200702204805166.png -------------------------------------------------------------------------------- /images/csd/Readme.assets/image-20200702204902739.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/images/csd/Readme.assets/image-20200702204902739.png -------------------------------------------------------------------------------- /images/csd/Readme.assets/image-20200702204929339.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/images/csd/Readme.assets/image-20200702204929339.png -------------------------------------------------------------------------------- /images/csd/Readme.assets/image-20200702204958146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/images/csd/Readme.assets/image-20200702204958146.png -------------------------------------------------------------------------------- /images/csd/Readme.assets/image-20200702205044725.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/doubleZ0108/Software-Testing-Visual-Platform/dd041a55dddcdd4087db14d5469a50bd96b7c3fc/images/csd/Readme.assets/image-20200702205044725.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | state_machine 2 | aniso8601==8.0.0 3 | attrs==19.3.0 4 | certifi==2020.4.5.1 5 | cffi==1.14.0 6 | chardet==3.0.4 7 | click==7.1.2 8 | cryptography==2.9.2 9 | flasgger==0.9.4 10 | Flask==1.1.2 11 | flask-restplus==0.13.0 12 | idna==2.9 13 | importlib-metadata==1.6.0 14 | itsdangerous==1.1.0 15 | Jinja2==2.11.2 16 | jsonschema==3.2.0 17 | lxml==4.5.1 18 | MarkupSafe==1.1.1 19 | mistune==0.8.4 20 | mkl-fft==1.0.15 21 | mkl-random==1.1.1 22 | mkl-service==2.3.0 23 | numpy==1.18.1 24 | pandas==1.0.3 25 | pandas-datareader==0.8.1 26 | pycparser==2.20 27 | pyOpenSSL==19.1.0 28 | pyrsistent==0.16.0 29 | PySocks==1.7.1 30 | python-dateutil==2.8.1 31 | pytz==2020.1 32 | PyYAML==5.3.1 33 | requests==2.23.0 34 | six==1.15.0 35 | urllib3==1.25.8 36 | Werkzeug==1.0.1 37 | zipp==3.1.0 38 | state-machine=0.2.10 39 | -------------------------------------------------------------------------------- /start.py: -------------------------------------------------------------------------------- 1 | # coding:utf8 2 | from app.app import create_app 3 | app = create_app() 4 | 5 | if __name__ == '__main__': 6 | app.run(debug=True) 7 | # app.run(port=1216) 8 | -------------------------------------------------------------------------------- /作业列表.md: -------------------------------------------------------------------------------- 1 | 7)电信收费问题 2 | 3 | 每月的电话总费用=基本月租费+折扣后的实际的通话费,如果没有折扣则按实际通话费计算,基本月租费为25元,每分钟通话费为0.15元。 4 | 5 | 实际通话费是否有折扣与**当月的通话时间(分钟)和本年度至本月的累计未按时缴费的次数有关**。跨年度未交费与折扣无关,但**跨年未交部分每月需要交付总额5%的滞纳金**。 6 | 7 | 当月的通话分钟数和折扣比例及本年度未按时缴费次数之间有直接的对应关系,如果本年度的未按时缴费的次数超过本月通话时间所对应的容许值则免于折扣,并按实际的通话费计算。 8 | 9 | 电话费的收取,采用在线支付,支付方式为:支付宝或银行卡(开发简单的模拟子系统),支付后打印支付成功或不成功清单。 10 | 11 | - 基本月租费:25元 12 | - 通话费用:0.15元/分钟 13 | 14 | 1. 当月通话时间:`talk_time_month` 15 | 2. 年度累计未按时缴费的次数:`unpaid_num_year` 16 | 3. 支付方式:`pay_method` 17 | 4. 跨年未缴费费用:`unpaid_cost_across_year` 18 | 19 | | 本月通话的分钟数 | 通话时间段的最大容许不按时缴费次数 | 通话时间段的折扣率 | 20 | | :----------------: | :--------------------------------: | :----------------: | 21 | | 0< 通话时间≤60 | 1 | 1.0% | 22 | | 60< 通话时间≤120 | 2 | 1.5% | 23 | | 120< 通话时间≤180 | 3 | 2.0% | 24 | | 180< 通话时间≤300 | 3 | 2.5% | 25 | | 300< 通话时间 | 6 | 3.0% | 26 | 27 | 分别用边界值、等价类和决策表设计测试用例,并综合分析得出合理的测试用例集。 28 | 29 | 30 | 31 | 32 | 33 | 一销售系统,如果销售员的年销售额大于200万RMB且请假天数不超过10天的情况下,现金到帐大于等于60%,则佣金(提成)系数为7,即佣金值为销售额除以佣金系数;现金到帐小于60%,佣金不予计算。所有其他情况且现金到帐小于等于85%,则按佣金系数均为6计算佣金,现金到账大于85%,佣金系数按5处理。 34 | 35 | 根据题意设计流程图并设计测试用例实现白盒测试(White Box Test)的1)语句覆盖,2)判断覆盖,3)条件覆盖,4)判断—条件覆盖,5)条件组合覆盖(测试用例及覆盖表示要清晰)。 36 | 37 | 38 | 39 | ```c++ 40 | 0 void ModuleX (int x, int y, int Wid, char *Str){ 41 | 1 unsigned Zcode, Bcode; 42 | 2 int i, j, k, Rec, Color; 43 | 3 long Len; 44 | 4 char Buf[72]; 45 | 5 while(*Str){ 46 | 6 if ((*Str & 0x80) && (*(Str+1) &0x80)){ 47 | 7 Zcode = (*Str-0xa1) & 0x07f; 48 | 8 Bcode = (*(Str+1)-0xa1) & 0x07f; 49 | 9 Rec = Zcode*94+Bcode; 50 | 10 Len = Rec*72L; 51 | 11 fseek(fp, Len, SEEK_SET); 52 | 12 fread (Buf, 1, 72, fp); 53 | 13 for (i = 0; i < 24; i++) 54 | 14 for (j = 0; j < 3; j++) 55 | 15 for (k = 0; k < 8; k++) 56 | 16 if (Buf[i*3+j] >> (7-k) & 1){ 57 | 17 Color = y+j*8+k-46; 58 | 18 PutPoint(x+i, y+j*8+k, Color); 59 | 16-1 } 60 | 19 x = x + 24 + Wid; 61 | 20 Str += 2; 62 | 6-1 } 63 | 5-1 } 64 | 21 return; 65 | } 66 | ``` 67 | --------------------------------------------------------------------------------