{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Fourth Project: Contribution of Your Choice" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## The Task" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "In this project, you will develop and implement a tool of your choice.\n", "Your project should focus on techniques **not** covered by the previous projects, notably:\n", "\n", "* [Asserting Expectations](Assertions.ipynb)\n", "* [Tracking Failure Origins](Slicer.ipynb)\n", "* [Isolating Failure-Inducing Changes](ChangeDebugger.ipynb)\n", "* [Statistical Debugging](StatisticalDebugger.ipynb)\n", "* [Mining Function Specifications](DynamicInvariants.ipynb)\n", "* [Generalizing Failure Circumstances](DDSetDebugger.ipynb)\n", "* [Where the Bugs are](ChangeCounter.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Task Suggestions\n", "\n", "To get an idea on what the expectations are, here are some suggestions for concrete project ideas.\n", "You can pick one of these ideas or suggest one of your own.\n", "\n", "### Enforcing Flows\n", "\n", "Set up a system that asserts that specific data flows should (or should not) take place (“There should be no data flow from password to output”). Combines [assertions](Assertions.ipynb) and [slices](Slicer.ipynb).\n", "\n", "### Statistical Dependencies\n", "\n", "Associate the presence (or absence) of data flows/dependencies with failures (“This program fails when there is a flow between A and B”). Combines [slices](Slicer.ipynb) and [statistical debugging](StatisticalDebugger.ipynb).\n", "\n", "### Statistical Invariant Properties\n", "\n", "\n", "Using the invariant templates (say, X < Y) from [dynamic invariants](DynamicInvariants.ipynb), find out which properties correlate with failure, as in [statistical debugging](StatisticalDebugger.ipynb): “middle() fails when x < z < y”.\n", "\n", "### Exploring Flows\n", "\n", "Add commands to the [interactive debugger](Debugger.ipynb) such that one can track where a particular value came from, using [slicer](Slicer.ipynb): “enter 'origin x’; get ‘from y in Line 35’)\n", "\n", "### Mining Co-Changes\n", "\n", "Pick some git project. Which files are most frequently changed together? Visualize. Uses [mining changes](ChangeCounter.ipynb): “Sitemap.html and 404.html are always changed together”." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Project Proposal" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Before you start, we ask you to hand in a _project proposal_. You can either build it on top of the suggestions mentioned above or pursue your own project idea." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "A project proposal should be a concise one-paragraph description of your idea. It should briefly **address the problem** at hand and how you want to **approach** it. Furthermore, it should indicate whether or not you plan to do your project alone or together with a partner. \n", "\n", "To be able to work on your own project idea, you need to hand in the proposal by **Wednesday, February 10, 23:59**. We will then notify you, whether your project idea is approved, is approved with changes, or is rejected. If we approve it with changes, you need to agree to the changes we proposed. If we cannot achieve an agreement on the included features, you can still continue with one of the aforementioned project ideas." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Working in Pairs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "For this project, you can work alone or form a team of two persons. If you form a team, please consider these additional rules:\n", "\n", "* The above suggestions list the expectations for a single-person project; your pair project thus should be **sufficiently sophisticated** for two persons. A team can use the above suggestions as starting points, though. The project proposal of a team must detail why it cannot be done by one person.\n", "\n", "* If you want to work in teams, you are required to build teams in the CMS until **Tuesday, February 23, 23:59**. You can either create or join a team on your personal page in the CMS.\n", "\n", "* Once the team building phase is over, you cannot change your team any longer.\n", "If you want to work alone, there is no need to create a team in the CMS. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Your Submission\n", "\n", "The time frame for this project is **4 weeks**, and the deadline is **March 12, 23:59**. \n", "\n", "The submission should be in form of a Jupyter notebook and you are expected to hand in the submission as a .zip archive.\n", "\n", "The notebook must include (but not limited to) \n", "\n", "* the personal information,\n", "* the project proposal with a list of features, \n", "* an \"Implementation\" section; and\n", "* a \"Demo\" section.\n", "\n", "The \"Implementation\" section must contain not only the implementation (part of it can be placed in auxiliary python modules), but also explanations and reasoning (in markdown cells) behind the decisions that lead to the solution. The \"Demo\" section should demonstrate how to interact with the tool, its features, and the use cases.\n", "\n", "Projects that lack explanations cannot get more than **15 points**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Grading\n", "\n", "For this project, you can get a total of 30 Points. We will assess your submission with respect to\n", "\n", "* originality of the idea;\n", "* concept;\n", "* functionality;\n", "* usability; and\n", "* presentation.\n", "\n", "Please double check that your submission satisfies the submission format, as listed above." ] } ], "metadata": { "ipub": { "bibliography": "fuzzingbook.bib" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.2" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true }, "toc-autonumbering": false }, "nbformat": 4, "nbformat_minor": 4 }