<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ro">
	<id>http://wiki.dcae.pub.ro/index.php?action=history&amp;feed=atom&amp;title=Lab_7</id>
	<title>Lab 7 - Revizia istoricului</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.dcae.pub.ro/index.php?action=history&amp;feed=atom&amp;title=Lab_7"/>
	<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=Lab_7&amp;action=history"/>
	<updated>2026-10-05T12:06:23Z</updated>
	<subtitle>Istoricul versiunilor pentru această pagină din wiki</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>http://wiki.dcae.pub.ro/index.php?title=Lab_7&amp;diff=8376&amp;oldid=prev</id>
		<title>Andrei.ulmamei: Pagină nouă: = Lab 7 — Final Integration, Demonstration and Code Review =  == Objectives ==  This laboratory is the final project session.  The objective is to demonstrate that the semester p...</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=Lab_7&amp;diff=8376&amp;oldid=prev"/>
		<updated>2026-09-26T10:40:37Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: = Lab 7 — Final Integration, Demonstration and Code Review =  == Objectives ==  This laboratory is the final project session.  The objective is to demonstrate that the semester p...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pagină nouă&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Lab 7 — Final Integration, Demonstration and Code Review =&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
This laboratory is the final project session.&lt;br /&gt;
&lt;br /&gt;
The objective is to demonstrate that the semester project is complete, reproducible, technically understood by the team and ready for evaluation.&lt;br /&gt;
&lt;br /&gt;
Unlike the previous laboratories, this session is centered on:&lt;br /&gt;
&lt;br /&gt;
* final integration;&lt;br /&gt;
* project demonstration;&lt;br /&gt;
* architecture explanation;&lt;br /&gt;
* code walkthrough;&lt;br /&gt;
* technical discussion;&lt;br /&gt;
* verification of tests and documentation;&lt;br /&gt;
* evaluation of project quality;&lt;br /&gt;
* final submission.&lt;br /&gt;
&lt;br /&gt;
By the end of this laboratory, each team should be able to:&lt;br /&gt;
&lt;br /&gt;
* run the project from a clean and documented setup;&lt;br /&gt;
* demonstrate the primary application workflow;&lt;br /&gt;
* explain the architecture of the project;&lt;br /&gt;
* explain the responsibility of the main modules;&lt;br /&gt;
* justify important design decisions;&lt;br /&gt;
* explain how errors are handled;&lt;br /&gt;
* explain how the project is tested;&lt;br /&gt;
* discuss one important technical problem encountered during development;&lt;br /&gt;
* identify known limitations;&lt;br /&gt;
* show that the repository is complete and clean;&lt;br /&gt;
* answer technical questions about its own implementation.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 1. Final laboratory structure ==&lt;br /&gt;
&lt;br /&gt;
A possible structure for the two-hour session is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! Time&lt;br /&gt;
! Activity&lt;br /&gt;
|-&lt;br /&gt;
| 0–10 min&lt;br /&gt;
| Final setup and repository verification&lt;br /&gt;
|-&lt;br /&gt;
| 10–80 min&lt;br /&gt;
| Project demonstrations&lt;br /&gt;
|-&lt;br /&gt;
| 80–105 min&lt;br /&gt;
| Code walkthrough and technical discussion&lt;br /&gt;
|-&lt;br /&gt;
| 105–115 min&lt;br /&gt;
| Final repository and documentation checks&lt;br /&gt;
|-&lt;br /&gt;
| 115–120 min&lt;br /&gt;
| Submission confirmation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The exact timing depends on the number of teams.&lt;br /&gt;
&lt;br /&gt;
== 2. What should be ready before the session ==&lt;br /&gt;
&lt;br /&gt;
Before the final laboratory begins:&lt;br /&gt;
&lt;br /&gt;
* the core feature set should be frozen;&lt;br /&gt;
* no P0 defects should remain;&lt;br /&gt;
* the main workflow should work end-to-end;&lt;br /&gt;
* tests should pass;&lt;br /&gt;
* installation instructions should be complete;&lt;br /&gt;
* the README should be up to date;&lt;br /&gt;
* known limitations should be documented;&lt;br /&gt;
* the repository should not contain secrets or unnecessary generated files;&lt;br /&gt;
* the team should have a stable demonstration scenario.&lt;br /&gt;
&lt;br /&gt;
Lab 7 should not be used for major architecture changes.&lt;br /&gt;
&lt;br /&gt;
== 3. Final project state ==&lt;br /&gt;
&lt;br /&gt;
The expected state is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
implemented&lt;br /&gt;
    ↓&lt;br /&gt;
tested&lt;br /&gt;
    ↓&lt;br /&gt;
documented&lt;br /&gt;
    ↓&lt;br /&gt;
reproducible&lt;br /&gt;
    ↓&lt;br /&gt;
demonstrable&lt;br /&gt;
    ↓&lt;br /&gt;
explainable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A project that only runs on the original developer&amp;#039;s machine is not yet ready for final evaluation.&lt;br /&gt;
&lt;br /&gt;
== 4. Demonstration first, slides second ==&lt;br /&gt;
&lt;br /&gt;
The primary evidence of a working project is the software itself.&lt;br /&gt;
&lt;br /&gt;
The demonstration should focus on:&lt;br /&gt;
&lt;br /&gt;
# starting the application;&lt;br /&gt;
# providing representative input;&lt;br /&gt;
# executing the main workflow;&lt;br /&gt;
# showing the output;&lt;br /&gt;
# showing one relevant error condition;&lt;br /&gt;
# explaining the result.&lt;br /&gt;
&lt;br /&gt;
Slides may be used for context, but they should not replace a live demonstration.&lt;br /&gt;
&lt;br /&gt;
== 5. Recommended demonstration structure ==&lt;br /&gt;
&lt;br /&gt;
A concise demonstration can follow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Problem&lt;br /&gt;
  ↓&lt;br /&gt;
Input&lt;br /&gt;
  ↓&lt;br /&gt;
Execution&lt;br /&gt;
  ↓&lt;br /&gt;
Result&lt;br /&gt;
  ↓&lt;br /&gt;
Failure case&lt;br /&gt;
  ↓&lt;br /&gt;
Short technical explanation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The demonstration should show the central objective of the project clearly.&lt;br /&gt;
&lt;br /&gt;
== 6. Demonstration time ==&lt;br /&gt;
&lt;br /&gt;
The demonstration should be concise.&lt;br /&gt;
&lt;br /&gt;
A reasonable target is approximately:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
5–8 minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
depending on project complexity.&lt;br /&gt;
&lt;br /&gt;
The objective is not to show every implemented feature.&lt;br /&gt;
&lt;br /&gt;
Show the most important workflow reliably.&lt;br /&gt;
&lt;br /&gt;
== 7. Demonstration reliability ==&lt;br /&gt;
&lt;br /&gt;
Avoid a demonstration that depends on:&lt;br /&gt;
&lt;br /&gt;
* unstable public services;&lt;br /&gt;
* unavailable hardware;&lt;br /&gt;
* unknown network connectivity;&lt;br /&gt;
* private local files;&lt;br /&gt;
* credentials not available during evaluation;&lt;br /&gt;
* large downloads;&lt;br /&gt;
* manually prepared state that cannot be reproduced.&lt;br /&gt;
&lt;br /&gt;
If an external dependency is required, prepare a safe fallback demonstration strategy where possible.&lt;br /&gt;
&lt;br /&gt;
== 8. Representative input ==&lt;br /&gt;
&lt;br /&gt;
The demonstration should use input representative of the actual project.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! Project type&lt;br /&gt;
! Representative input&lt;br /&gt;
|-&lt;br /&gt;
| image processing&lt;br /&gt;
| real or realistic image&lt;br /&gt;
|-&lt;br /&gt;
| data analysis&lt;br /&gt;
| meaningful dataset&lt;br /&gt;
|-&lt;br /&gt;
| networking&lt;br /&gt;
| valid application message or packet&lt;br /&gt;
|-&lt;br /&gt;
| hardware&lt;br /&gt;
| real device or recorded representative data&lt;br /&gt;
|-&lt;br /&gt;
| monitoring&lt;br /&gt;
| realistic metric stream&lt;br /&gt;
|-&lt;br /&gt;
| file processing&lt;br /&gt;
| correctly structured input file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Avoid demonstrating only trivial toy input when the project is designed for a more realistic workload.&lt;br /&gt;
&lt;br /&gt;
== 9. Show one error condition ==&lt;br /&gt;
&lt;br /&gt;
A useful final demonstration includes one expected failure.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* invalid input;&lt;br /&gt;
* missing file;&lt;br /&gt;
* malformed configuration;&lt;br /&gt;
* unavailable device;&lt;br /&gt;
* invalid packet;&lt;br /&gt;
* unsupported image format;&lt;br /&gt;
* timeout.&lt;br /&gt;
&lt;br /&gt;
The goal is to show that the project handles predictable failure conditions deliberately.&lt;br /&gt;
&lt;br /&gt;
== 10. Architecture explanation ==&lt;br /&gt;
&lt;br /&gt;
Each team should be able to explain the architecture in approximately one or two minutes.&lt;br /&gt;
&lt;br /&gt;
A good explanation identifies:&lt;br /&gt;
&lt;br /&gt;
* inputs;&lt;br /&gt;
* main components;&lt;br /&gt;
* data flow;&lt;br /&gt;
* external dependencies;&lt;br /&gt;
* outputs.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
CLI&lt;br /&gt;
 │&lt;br /&gt;
 ▼&lt;br /&gt;
Application service&lt;br /&gt;
 │&lt;br /&gt;
 ├── parser&lt;br /&gt;
 ├── processing pipeline&lt;br /&gt;
 └── storage&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
     output file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 11. Architecture diagram ==&lt;br /&gt;
&lt;br /&gt;
A simple architecture diagram is sufficient.&lt;br /&gt;
&lt;br /&gt;
Avoid diagrams that show every function or variable.&lt;br /&gt;
&lt;br /&gt;
Focus on major components.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
main&lt;br /&gt;
 ├── config&lt;br /&gt;
 ├── service&lt;br /&gt;
 │    ├── model&lt;br /&gt;
 │    └── processor&lt;br /&gt;
 └── storage&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 12. Explain responsibilities ==&lt;br /&gt;
&lt;br /&gt;
For each main module, the team should be able to complete:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
This module is responsible for ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! Module&lt;br /&gt;
! Responsibility&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;models.py&amp;lt;/code&amp;gt;&lt;br /&gt;
| application data structures&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;services.py&amp;lt;/code&amp;gt;&lt;br /&gt;
| central application logic&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;storage.py&amp;lt;/code&amp;gt;&lt;br /&gt;
| persistent data access&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;protocol.py&amp;lt;/code&amp;gt;&lt;br /&gt;
| message encoding and decoding&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;main.py&amp;lt;/code&amp;gt;&lt;br /&gt;
| application startup and orchestration&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 13. Code walkthrough ==&lt;br /&gt;
&lt;br /&gt;
The code walkthrough should not attempt to read the entire repository.&lt;br /&gt;
&lt;br /&gt;
Choose the most important implementation path.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
main()&lt;br /&gt;
  ↓&lt;br /&gt;
load configuration&lt;br /&gt;
  ↓&lt;br /&gt;
create service&lt;br /&gt;
  ↓&lt;br /&gt;
process input&lt;br /&gt;
  ↓&lt;br /&gt;
produce result&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explain how the main workflow maps to the source code.&lt;br /&gt;
&lt;br /&gt;
== 14. What to show during code review ==&lt;br /&gt;
&lt;br /&gt;
Useful areas include:&lt;br /&gt;
&lt;br /&gt;
* application entry point;&lt;br /&gt;
* core processing logic;&lt;br /&gt;
* one important model or class;&lt;br /&gt;
* one error-handling path;&lt;br /&gt;
* one representative test;&lt;br /&gt;
* one external integration boundary.&lt;br /&gt;
&lt;br /&gt;
Do not spend presentation time showing trivial boilerplate.&lt;br /&gt;
&lt;br /&gt;
== 15. Explain one design decision ==&lt;br /&gt;
&lt;br /&gt;
Each team should prepare one important design decision.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Why was composition used instead of inheritance?&lt;br /&gt;
&lt;br /&gt;
Why was JSON selected for persistence?&lt;br /&gt;
&lt;br /&gt;
Why was a pipeline separated into stages?&lt;br /&gt;
&lt;br /&gt;
Why was dependency injection used?&lt;br /&gt;
&lt;br /&gt;
Why was the protocol parser separated from network transport?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The answer should include the reasoning and trade-offs.&lt;br /&gt;
&lt;br /&gt;
== 16. Design trade-offs ==&lt;br /&gt;
&lt;br /&gt;
Most design decisions have advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
A useful explanation is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
We selected approach A because ...&lt;br /&gt;
The main advantage is ...&lt;br /&gt;
The main disadvantage is ...&lt;br /&gt;
Approach B was considered, but ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avoid claiming that a design has no disadvantages.&lt;br /&gt;
&lt;br /&gt;
== 17. Explain one technical difficulty ==&lt;br /&gt;
&lt;br /&gt;
Each team should identify one meaningful technical difficulty encountered during the project.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* parsing an undocumented format;&lt;br /&gt;
* synchronizing hardware communication;&lt;br /&gt;
* handling malformed packets;&lt;br /&gt;
* managing asynchronous operations;&lt;br /&gt;
* correcting image-processing artifacts;&lt;br /&gt;
* making a component testable;&lt;br /&gt;
* debugging a dependency issue;&lt;br /&gt;
* designing data serialization.&lt;br /&gt;
&lt;br /&gt;
The explanation should focus on the technical reasoning used to solve the problem.&lt;br /&gt;
&lt;br /&gt;
== 18. Explain the debugging process ==&lt;br /&gt;
&lt;br /&gt;
A useful structure is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Observed behavior&lt;br /&gt;
      ↓&lt;br /&gt;
Hypothesis&lt;br /&gt;
      ↓&lt;br /&gt;
Diagnostic method&lt;br /&gt;
      ↓&lt;br /&gt;
Root cause&lt;br /&gt;
      ↓&lt;br /&gt;
Fix&lt;br /&gt;
      ↓&lt;br /&gt;
Regression test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This demonstrates engineering process, not only the final result.&lt;br /&gt;
&lt;br /&gt;
== 19. Testing explanation ==&lt;br /&gt;
&lt;br /&gt;
The team should be able to explain:&lt;br /&gt;
&lt;br /&gt;
* what is tested;&lt;br /&gt;
* why those areas are important;&lt;br /&gt;
* what is not tested;&lt;br /&gt;
* which tests are unit tests;&lt;br /&gt;
* which tests are integration tests;&lt;br /&gt;
* how external dependencies are handled.&lt;br /&gt;
&lt;br /&gt;
== 20. Show one representative test ==&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def test_average_rejects_empty_list():&lt;br /&gt;
    with pytest.raises(ValueError):&lt;br /&gt;
        average([])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def test_round_trip(tmp_path):&lt;br /&gt;
    path = tmp_path / &amp;quot;data.json&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    save_data(path, original)&lt;br /&gt;
&lt;br /&gt;
    restored = load_data(path)&lt;br /&gt;
&lt;br /&gt;
    assert restored == original&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The test should demonstrate meaningful project behavior.&lt;br /&gt;
&lt;br /&gt;
== 21. Tests should pass ==&lt;br /&gt;
&lt;br /&gt;
Before the demonstration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pytest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
should complete successfully.&lt;br /&gt;
&lt;br /&gt;
If some tests are intentionally skipped, the reason should be understood and documented.&lt;br /&gt;
&lt;br /&gt;
== 22. Quality checks ==&lt;br /&gt;
&lt;br /&gt;
Run the project&amp;#039;s normal quality checks.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ruff check .&lt;br /&gt;
pytest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If static type checking is part of the project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mypy src&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If formatting is enforced:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ruff format --check .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 23. Final clean installation test ==&lt;br /&gt;
&lt;br /&gt;
The project should have been tested in a clean environment before Lab 7.&lt;br /&gt;
&lt;br /&gt;
A typical procedure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python -m venv clean-env&lt;br /&gt;
source clean-env/bin/activate&lt;br /&gt;
&lt;br /&gt;
python -m pip install -e .&lt;br /&gt;
&lt;br /&gt;
pytest&lt;br /&gt;
python -m project_name&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If these steps fail, the project is not reproducibly packaged.&lt;br /&gt;
&lt;br /&gt;
== 24. Windows clean setup ==&lt;br /&gt;
&lt;br /&gt;
For Windows PowerShell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
python -m venv clean-env&lt;br /&gt;
clean-env\Scripts\Activate.ps1&lt;br /&gt;
&lt;br /&gt;
python -m pip install -e .&lt;br /&gt;
&lt;br /&gt;
pytest&lt;br /&gt;
python -m project_name&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Document platform-specific requirements where necessary.&lt;br /&gt;
&lt;br /&gt;
== 25. README final review ==&lt;br /&gt;
&lt;br /&gt;
The README should contain at least:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Project name&lt;br /&gt;
Description&lt;br /&gt;
Main features&lt;br /&gt;
Requirements&lt;br /&gt;
Installation&lt;br /&gt;
Configuration&lt;br /&gt;
Running&lt;br /&gt;
Example usage&lt;br /&gt;
Testing&lt;br /&gt;
Architecture overview&lt;br /&gt;
Known limitations&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another developer should be able to start the project using only this information.&lt;br /&gt;
&lt;br /&gt;
== 26. Repository structure ==&lt;br /&gt;
&lt;br /&gt;
A final project may resemble:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
project/&lt;br /&gt;
├── README.md&lt;br /&gt;
├── pyproject.toml&lt;br /&gt;
├── .gitignore&lt;br /&gt;
├── src/&lt;br /&gt;
│   └── project_name/&lt;br /&gt;
│       ├── __init__.py&lt;br /&gt;
│       ├── main.py&lt;br /&gt;
│       └── ...&lt;br /&gt;
├── tests/&lt;br /&gt;
│   └── ...&lt;br /&gt;
└── examples/&lt;br /&gt;
    └── ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not every project requires the same modules.&lt;br /&gt;
&lt;br /&gt;
== 27. Repository cleanliness ==&lt;br /&gt;
&lt;br /&gt;
The repository should generally not contain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
.venv/&lt;br /&gt;
__pycache__/&lt;br /&gt;
*.pyc&lt;br /&gt;
.pytest_cache/&lt;br /&gt;
.mypy_cache/&lt;br /&gt;
.ruff_cache/&lt;br /&gt;
.coverage&lt;br /&gt;
temporary output&lt;br /&gt;
real secrets&lt;br /&gt;
large accidental binaries&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unless a specific generated artifact is deliberately required.&lt;br /&gt;
&lt;br /&gt;
== 28. Git status ==&lt;br /&gt;
&lt;br /&gt;
Before submission:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
should not show forgotten modifications or accidentally generated files.&lt;br /&gt;
&lt;br /&gt;
== 29. Git history ==&lt;br /&gt;
&lt;br /&gt;
Inspect:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git log --oneline --graph --decorate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The history should show meaningful development rather than one final upload.&lt;br /&gt;
&lt;br /&gt;
Useful examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Add packet decoder&lt;br /&gt;
Implement device retry handling&lt;br /&gt;
Add regression tests for invalid frames&lt;br /&gt;
Refactor configuration loading&lt;br /&gt;
Document installation procedure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 30. Final commit ==&lt;br /&gt;
&lt;br /&gt;
A final commit may be something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Prepare final project release&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
but the repository should already contain meaningful previous commits.&lt;br /&gt;
&lt;br /&gt;
== 31. Tagging a release ==&lt;br /&gt;
&lt;br /&gt;
Optionally, create a final release tag.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git tag v1.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If tags are used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git push --tags&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is optional unless required by the course.&lt;br /&gt;
&lt;br /&gt;
== 32. Version consistency ==&lt;br /&gt;
&lt;br /&gt;
If the project uses a version:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[project]&lt;br /&gt;
version = &amp;quot;1.0.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ensure documentation and release tags do not contradict it.&lt;br /&gt;
&lt;br /&gt;
== 33. Known limitations ==&lt;br /&gt;
&lt;br /&gt;
Known limitations should remain visible in the final documentation.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
## Known limitations&lt;br /&gt;
&lt;br /&gt;
- Only PNG input is supported.&lt;br /&gt;
- Device reconnect requires application restart.&lt;br /&gt;
- The project has only been tested on Linux.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not remove limitations merely to make the project appear more complete.&lt;br /&gt;
&lt;br /&gt;
== 34. Final acceptance test ==&lt;br /&gt;
&lt;br /&gt;
Before presentation, execute one complete acceptance test.&lt;br /&gt;
&lt;br /&gt;
Record:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Input:&lt;br /&gt;
Command:&lt;br /&gt;
Expected output:&lt;br /&gt;
Actual output:&lt;br /&gt;
Result:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main workflow should pass.&lt;br /&gt;
&lt;br /&gt;
== 35. Demonstration backup ==&lt;br /&gt;
&lt;br /&gt;
For projects with fragile external dependencies, prepare a backup.&lt;br /&gt;
&lt;br /&gt;
Possible backups include:&lt;br /&gt;
&lt;br /&gt;
* representative recorded data;&lt;br /&gt;
* stored sample responses;&lt;br /&gt;
* local test server;&lt;br /&gt;
* simulated hardware interface;&lt;br /&gt;
* known-good sample images.&lt;br /&gt;
&lt;br /&gt;
A backup should still demonstrate the project&amp;#039;s own logic.&lt;br /&gt;
&lt;br /&gt;
== 36. Do not fake the primary functionality ==&lt;br /&gt;
&lt;br /&gt;
A backup may replace an unavailable external dependency.&lt;br /&gt;
&lt;br /&gt;
It should not replace the actual project implementation.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
acceptable:&lt;br /&gt;
recorded sensor data → real processing pipeline&lt;br /&gt;
&lt;br /&gt;
not acceptable:&lt;br /&gt;
precomputed final output shown instead of processing&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 37. Technical questions ==&lt;br /&gt;
&lt;br /&gt;
Students should be prepared for questions such as:&lt;br /&gt;
&lt;br /&gt;
* Why is this component a class?&lt;br /&gt;
* Why is this function separate?&lt;br /&gt;
* Why does this module depend on that one?&lt;br /&gt;
* What happens if this file is missing?&lt;br /&gt;
* What happens if this network request times out?&lt;br /&gt;
* How is this behavior tested?&lt;br /&gt;
* What would need to change to support another input format?&lt;br /&gt;
* Which part was most difficult?&lt;br /&gt;
* Where is configuration stored?&lt;br /&gt;
* Why was this library selected?&lt;br /&gt;
* What is one limitation of the current implementation?&lt;br /&gt;
&lt;br /&gt;
== 38. Questions about Python ==&lt;br /&gt;
&lt;br /&gt;
The project discussion may also include concepts from Labs 1–4.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
* difference between &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;is&amp;lt;/code&amp;gt;;&lt;br /&gt;
* list/reference semantics;&lt;br /&gt;
* properties;&lt;br /&gt;
* dataclasses;&lt;br /&gt;
* inheritance versus composition;&lt;br /&gt;
* modules and packages;&lt;br /&gt;
* exceptions;&lt;br /&gt;
* context managers;&lt;br /&gt;
* type hints;&lt;br /&gt;
* pytest fixtures;&lt;br /&gt;
* parametrized tests;&lt;br /&gt;
* dependency injection.&lt;br /&gt;
&lt;br /&gt;
The objective is to connect the project implementation to the Python concepts studied during the course.&lt;br /&gt;
&lt;br /&gt;
== 39. Explain code ownership ==&lt;br /&gt;
&lt;br /&gt;
Every team member should understand the main project architecture.&lt;br /&gt;
&lt;br /&gt;
A student should not answer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;I don&amp;#039;t know; another team member wrote that file.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for central project functionality.&lt;br /&gt;
&lt;br /&gt;
Specialization is reasonable, but the team should maintain shared understanding of the main system.&lt;br /&gt;
&lt;br /&gt;
== 40. Team presentation ==&lt;br /&gt;
&lt;br /&gt;
A possible team presentation structure is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! Part&lt;br /&gt;
! Suggested content&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| problem and objective&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| architecture&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| live demonstration&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| important implementation detail&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| tests and reliability&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| limitation and future improvement&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Keep the presentation technical and concise.&lt;br /&gt;
&lt;br /&gt;
== 41. Project objective ==&lt;br /&gt;
&lt;br /&gt;
The first explanation should answer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
What problem does this project solve?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A good answer should fit in one or two sentences.&lt;br /&gt;
&lt;br /&gt;
Avoid beginning with a long list of technologies.&lt;br /&gt;
&lt;br /&gt;
== 42. Technology is not the objective ==&lt;br /&gt;
&lt;br /&gt;
Poor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
We used Python, NumPy, OpenCV,&lt;br /&gt;
JSON, Git and pytest.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Better:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The application processes thermal frames&lt;br /&gt;
and detects defective pixels automatically.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Technologies support the project objective; they are not the objective themselves.&lt;br /&gt;
&lt;br /&gt;
== 43. Explain the data flow ==&lt;br /&gt;
&lt;br /&gt;
A useful technical explanation follows the data.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
camera frame&lt;br /&gt;
     ↓&lt;br /&gt;
decoder&lt;br /&gt;
     ↓&lt;br /&gt;
preprocessing&lt;br /&gt;
     ↓&lt;br /&gt;
analysis&lt;br /&gt;
     ↓&lt;br /&gt;
result&lt;br /&gt;
     ↓&lt;br /&gt;
storage/display&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This often makes the architecture easier to understand than describing files in arbitrary order.&lt;br /&gt;
&lt;br /&gt;
== 44. Explain external dependencies ==&lt;br /&gt;
&lt;br /&gt;
Identify external boundaries explicitly.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
filesystem&lt;br /&gt;
network API&lt;br /&gt;
camera&lt;br /&gt;
serial device&lt;br /&gt;
database&lt;br /&gt;
third-party library&lt;br /&gt;
operating system&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explain how failure at these boundaries is handled.&lt;br /&gt;
&lt;br /&gt;
== 45. Explain one invariant ==&lt;br /&gt;
&lt;br /&gt;
An invariant is a condition expected to remain true.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
grade is always between 1 and 10&lt;br /&gt;
packet length matches header length&lt;br /&gt;
image width is always positive&lt;br /&gt;
device ID is unique&lt;br /&gt;
configuration is validated before startup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explain where the invariant is enforced.&lt;br /&gt;
&lt;br /&gt;
== 46. Explain one exception path ==&lt;br /&gt;
&lt;br /&gt;
Students should be able to trace one error path.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
missing file&lt;br /&gt;
    ↓&lt;br /&gt;
FileNotFoundError&lt;br /&gt;
    ↓&lt;br /&gt;
application boundary catches error&lt;br /&gt;
    ↓&lt;br /&gt;
user-friendly message&lt;br /&gt;
    ↓&lt;br /&gt;
application exits with failure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 47. Explain one testability decision ==&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
network client passed as dependency&lt;br /&gt;
file path passed as parameter&lt;br /&gt;
processing separated from input()&lt;br /&gt;
hardware access isolated in device.py&lt;br /&gt;
time source injected into function&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explain how the decision makes automated testing easier.&lt;br /&gt;
&lt;br /&gt;
== 48. Explain one refactoring ==&lt;br /&gt;
&lt;br /&gt;
The team should identify one area improved after the MVP.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Before:&lt;br /&gt;
main.py contained parsing,&lt;br /&gt;
processing and output.&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
parser.py&lt;br /&gt;
processor.py&lt;br /&gt;
storage.py&lt;br /&gt;
main.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explain why the new structure is better.&lt;br /&gt;
&lt;br /&gt;
== 49. Explain one regression test ==&lt;br /&gt;
&lt;br /&gt;
A useful answer is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
We discovered that empty input caused&lt;br /&gt;
ZeroDivisionError.&lt;br /&gt;
&lt;br /&gt;
We added a test for empty input,&lt;br /&gt;
then changed the function to raise&lt;br /&gt;
a meaningful ValueError.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This demonstrates a complete defect-fixing workflow.&lt;br /&gt;
&lt;br /&gt;
== 50. Evaluation areas ==&lt;br /&gt;
&lt;br /&gt;
A project may be evaluated across several dimensions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! What is considered&lt;br /&gt;
|-&lt;br /&gt;
| functionality&lt;br /&gt;
| Does the central application work?&lt;br /&gt;
|-&lt;br /&gt;
| correctness&lt;br /&gt;
| Are results and behaviors correct?&lt;br /&gt;
|-&lt;br /&gt;
| architecture&lt;br /&gt;
| Is the project structured coherently?&lt;br /&gt;
|-&lt;br /&gt;
| Python usage&lt;br /&gt;
| Does the implementation use appropriate Python constructs?&lt;br /&gt;
|-&lt;br /&gt;
| robustness&lt;br /&gt;
| Are expected failures handled?&lt;br /&gt;
|-&lt;br /&gt;
| testing&lt;br /&gt;
| Are important behaviors tested?&lt;br /&gt;
|-&lt;br /&gt;
| code quality&lt;br /&gt;
| Is the code readable and maintainable?&lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| Can the project be installed and used?&lt;br /&gt;
|-&lt;br /&gt;
| Git workflow&lt;br /&gt;
| Does the repository show meaningful development?&lt;br /&gt;
|-&lt;br /&gt;
| technical understanding&lt;br /&gt;
| Can the team explain its implementation and decisions?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 51. Functionality is necessary but not sufficient ==&lt;br /&gt;
&lt;br /&gt;
A project that produces the correct output but contains:&lt;br /&gt;
&lt;br /&gt;
* one giant file;&lt;br /&gt;
* no tests;&lt;br /&gt;
* hard-coded machine paths;&lt;br /&gt;
* undocumented dependencies;&lt;br /&gt;
* hidden credentials;&lt;br /&gt;
* unhandled errors;&lt;br /&gt;
&lt;br /&gt;
is technically weaker than a project that also demonstrates software-engineering discipline.&lt;br /&gt;
&lt;br /&gt;
== 52. Complexity is not automatically quality ==&lt;br /&gt;
&lt;br /&gt;
Do not add complexity to appear advanced.&lt;br /&gt;
&lt;br /&gt;
A smaller clear implementation is often better than:&lt;br /&gt;
&lt;br /&gt;
* unnecessary inheritance;&lt;br /&gt;
* excessive abstraction layers;&lt;br /&gt;
* many external dependencies;&lt;br /&gt;
* unnecessary asynchronous code;&lt;br /&gt;
* complicated design patterns without a need.&lt;br /&gt;
&lt;br /&gt;
Quality is not measured by the number of classes or libraries.&lt;br /&gt;
&lt;br /&gt;
== 53. Pythonic implementation ==&lt;br /&gt;
&lt;br /&gt;
The final implementation should reflect concepts from the course.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* direct iteration instead of unnecessary index loops;&lt;br /&gt;
* dataclasses for simple data models;&lt;br /&gt;
* context managers for resources;&lt;br /&gt;
* &amp;lt;code&amp;gt;pathlib&amp;lt;/code&amp;gt; for paths;&lt;br /&gt;
* exceptions for meaningful failure conditions;&lt;br /&gt;
* modules with clear responsibilities;&lt;br /&gt;
* type hints where they improve interfaces;&lt;br /&gt;
* pytest for automated tests.&lt;br /&gt;
&lt;br /&gt;
== 54. C++ translation should no longer dominate ==&lt;br /&gt;
&lt;br /&gt;
By the final project, Python code should not look like a mechanical translation of C++.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; table-layout:fixed;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:50%;&amp;quot; | Less idiomatic&lt;br /&gt;
! style=&amp;quot;width:50%;&amp;quot; | More idiomatic&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for i in range(len(values)):&lt;br /&gt;
    print(values[i])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for value in values:&lt;br /&gt;
    print(value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The same principle applies at architecture level.&lt;br /&gt;
&lt;br /&gt;
== 55. Final code review checklist ==&lt;br /&gt;
&lt;br /&gt;
Before submission, review:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Check&lt;br /&gt;
|-&lt;br /&gt;
| naming&lt;br /&gt;
| names communicate intent&lt;br /&gt;
|-&lt;br /&gt;
| functions&lt;br /&gt;
| no obvious excessively large functions remain&lt;br /&gt;
|-&lt;br /&gt;
| classes&lt;br /&gt;
| responsibilities are coherent&lt;br /&gt;
|-&lt;br /&gt;
| modules&lt;br /&gt;
| responsibilities are clear&lt;br /&gt;
|-&lt;br /&gt;
| globals&lt;br /&gt;
| unnecessary mutable globals removed&lt;br /&gt;
|-&lt;br /&gt;
| errors&lt;br /&gt;
| expected failures handled&lt;br /&gt;
|-&lt;br /&gt;
| logging&lt;br /&gt;
| temporary debug output removed&lt;br /&gt;
|-&lt;br /&gt;
| paths&lt;br /&gt;
| machine-specific paths removed&lt;br /&gt;
|-&lt;br /&gt;
| secrets&lt;br /&gt;
| none committed&lt;br /&gt;
|-&lt;br /&gt;
| tests&lt;br /&gt;
| suite passes&lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| current and reproducible&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 56. Final testing checklist ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pytest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, where configured:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ruff check .&lt;br /&gt;
ruff format --check .&lt;br /&gt;
mypy src&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally run the main application manually.&lt;br /&gt;
&lt;br /&gt;
== 57. Final demonstration checklist ==&lt;br /&gt;
&lt;br /&gt;
Before presenting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[ ] demo input available&lt;br /&gt;
[ ] application starts&lt;br /&gt;
[ ] dependencies installed&lt;br /&gt;
[ ] required hardware available&lt;br /&gt;
[ ] credentials/configuration available&lt;br /&gt;
[ ] output location writable&lt;br /&gt;
[ ] main workflow tested&lt;br /&gt;
[ ] failure example prepared&lt;br /&gt;
[ ] backup data available if needed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 58. Final documentation checklist ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[ ] README complete&lt;br /&gt;
[ ] installation tested&lt;br /&gt;
[ ] run command documented&lt;br /&gt;
[ ] configuration documented&lt;br /&gt;
[ ] test command documented&lt;br /&gt;
[ ] architecture explained&lt;br /&gt;
[ ] known limitations listed&lt;br /&gt;
[ ] sample input included where useful&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 59. Final repository checklist ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[ ] git status clean&lt;br /&gt;
[ ] no .venv&lt;br /&gt;
[ ] no __pycache__&lt;br /&gt;
[ ] no secrets&lt;br /&gt;
[ ] no accidental large files&lt;br /&gt;
[ ] pyproject.toml correct&lt;br /&gt;
[ ] .gitignore correct&lt;br /&gt;
[ ] tests committed&lt;br /&gt;
[ ] documentation committed&lt;br /&gt;
[ ] final version committed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 60. Final submission ==&lt;br /&gt;
&lt;br /&gt;
The final submission should identify the repository and the final revision clearly.&lt;br /&gt;
&lt;br /&gt;
A submission should not depend on an uncommitted local working tree.&lt;br /&gt;
&lt;br /&gt;
The evaluated state should correspond to a specific commit.&lt;br /&gt;
&lt;br /&gt;
Optional:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git rev-parse HEAD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be used to record the exact commit identifier.&lt;br /&gt;
&lt;br /&gt;
== 61. Submission commit ==&lt;br /&gt;
&lt;br /&gt;
A possible final workflow is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&lt;br /&gt;
pytest&lt;br /&gt;
ruff check .&lt;br /&gt;
&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m &amp;quot;Prepare final release&amp;quot;&lt;br /&gt;
&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Only commit if there are actual final changes.&lt;br /&gt;
&lt;br /&gt;
== 62. Avoid last-minute uncontrolled changes ==&lt;br /&gt;
&lt;br /&gt;
Immediately before the final demonstration, avoid:&lt;br /&gt;
&lt;br /&gt;
* changing architecture;&lt;br /&gt;
* upgrading dependencies without need;&lt;br /&gt;
* replacing working libraries;&lt;br /&gt;
* rewriting central functionality;&lt;br /&gt;
* merging experimental branches.&lt;br /&gt;
&lt;br /&gt;
Last-minute changes introduce unnecessary risk.&lt;br /&gt;
&lt;br /&gt;
== 63. If a defect appears during the final session ==&lt;br /&gt;
&lt;br /&gt;
If a non-critical problem appears:&lt;br /&gt;
&lt;br /&gt;
# identify the scope;&lt;br /&gt;
# avoid destabilizing unrelated code;&lt;br /&gt;
# apply a minimal fix if safe;&lt;br /&gt;
# rerun relevant tests;&lt;br /&gt;
# document the issue if it cannot safely be fixed.&lt;br /&gt;
&lt;br /&gt;
Do not perform a large redesign under presentation pressure.&lt;br /&gt;
&lt;br /&gt;
== 64. If the demo fails ==&lt;br /&gt;
&lt;br /&gt;
A failed demo should be approached technically.&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
environment&lt;br /&gt;
configuration&lt;br /&gt;
dependencies&lt;br /&gt;
input&lt;br /&gt;
external service&lt;br /&gt;
hardware&lt;br /&gt;
recent code changes&lt;br /&gt;
logs&lt;br /&gt;
traceback&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a prepared representative backup exists, it may be used to continue the technical discussion.&lt;br /&gt;
&lt;br /&gt;
== 65. Future work ==&lt;br /&gt;
&lt;br /&gt;
The final presentation may include a short future-work section.&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* additional input formats;&lt;br /&gt;
* improved performance;&lt;br /&gt;
* GUI;&lt;br /&gt;
* hardware support;&lt;br /&gt;
* better deployment;&lt;br /&gt;
* more complete test coverage;&lt;br /&gt;
* additional algorithms.&lt;br /&gt;
&lt;br /&gt;
Future work should not be used to disguise missing required functionality.&lt;br /&gt;
&lt;br /&gt;
== 66. Lessons learned ==&lt;br /&gt;
&lt;br /&gt;
Each team should be able to identify at least one useful technical lesson.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Separating I/O from processing made testing easier.&lt;br /&gt;
&lt;br /&gt;
Hard-coded paths created portability problems.&lt;br /&gt;
&lt;br /&gt;
Regression tests prevented a previously fixed bug from returning.&lt;br /&gt;
&lt;br /&gt;
A smaller dependency set simplified installation.&lt;br /&gt;
&lt;br /&gt;
Composition made the hardware interface easier to replace in tests.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 67. Individual understanding ==&lt;br /&gt;
&lt;br /&gt;
Each student should be able to explain:&lt;br /&gt;
&lt;br /&gt;
* the project objective;&lt;br /&gt;
* the architecture;&lt;br /&gt;
* the main workflow;&lt;br /&gt;
* at least one module in detail;&lt;br /&gt;
* at least one test;&lt;br /&gt;
* at least one error path.&lt;br /&gt;
&lt;br /&gt;
The project should represent team work rather than isolated contributions that nobody else understands.&lt;br /&gt;
&lt;br /&gt;
== 68. Suggested technical discussion ==&lt;br /&gt;
&lt;br /&gt;
A final discussion may cover:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Why this architecture?&lt;br /&gt;
&lt;br /&gt;
What alternative was considered?&lt;br /&gt;
&lt;br /&gt;
What was the hardest technical issue?&lt;br /&gt;
&lt;br /&gt;
What would fail first at larger scale?&lt;br /&gt;
&lt;br /&gt;
Which dependency is most critical?&lt;br /&gt;
&lt;br /&gt;
Which component is easiest to replace?&lt;br /&gt;
&lt;br /&gt;
Which part has the strongest tests?&lt;br /&gt;
&lt;br /&gt;
Which part still has the largest limitation?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 69. Example final explanation ==&lt;br /&gt;
&lt;br /&gt;
A concise technical explanation could be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The application reads thermal frames through&lt;br /&gt;
the acquisition module.&lt;br /&gt;
&lt;br /&gt;
Frames are passed to the processing pipeline,&lt;br /&gt;
which performs correction and analysis.&lt;br /&gt;
&lt;br /&gt;
The pipeline is independent from the camera&lt;br /&gt;
interface, so tests can use stored frames.&lt;br /&gt;
&lt;br /&gt;
Results are returned to the CLI and can also&lt;br /&gt;
be saved through the storage module.&lt;br /&gt;
&lt;br /&gt;
Hardware failures are converted into&lt;br /&gt;
application-specific exceptions at the&lt;br /&gt;
device boundary.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is more useful than describing source files in arbitrary order.&lt;br /&gt;
&lt;br /&gt;
== 70. Final project maturity ==&lt;br /&gt;
&lt;br /&gt;
A mature final project should demonstrate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
correctness&lt;br /&gt;
    +&lt;br /&gt;
structure&lt;br /&gt;
    +&lt;br /&gt;
testing&lt;br /&gt;
    +&lt;br /&gt;
robustness&lt;br /&gt;
    +&lt;br /&gt;
documentation&lt;br /&gt;
    +&lt;br /&gt;
technical understanding&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No single category replaces the others.&lt;br /&gt;
&lt;br /&gt;
== 71. Exercise 1 — Final architecture explanation ==&lt;br /&gt;
&lt;br /&gt;
Prepare a diagram containing no more than approximately 5–8 major components.&lt;br /&gt;
&lt;br /&gt;
For every component, write one responsibility.&lt;br /&gt;
&lt;br /&gt;
Practice explaining the architecture in less than two minutes.&lt;br /&gt;
&lt;br /&gt;
== 72. Exercise 2 — Main workflow walkthrough ==&lt;br /&gt;
&lt;br /&gt;
Trace one real input through the project.&lt;br /&gt;
&lt;br /&gt;
Document:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Input:&lt;br /&gt;
Entry point:&lt;br /&gt;
Modules involved:&lt;br /&gt;
Important transformation:&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use this path during the code walkthrough.&lt;br /&gt;
&lt;br /&gt;
== 73. Exercise 3 — Design decision ==&lt;br /&gt;
&lt;br /&gt;
Choose one design decision and document:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Decision:&lt;br /&gt;
Alternative:&lt;br /&gt;
Reason:&lt;br /&gt;
Advantage:&lt;br /&gt;
Disadvantage:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be prepared to explain it during evaluation.&lt;br /&gt;
&lt;br /&gt;
== 74. Exercise 4 — Technical difficulty ==&lt;br /&gt;
&lt;br /&gt;
Document:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Problem:&lt;br /&gt;
Observed behavior:&lt;br /&gt;
Root cause:&lt;br /&gt;
Diagnostic method:&lt;br /&gt;
Solution:&lt;br /&gt;
Regression prevention:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use a real difficulty from the project.&lt;br /&gt;
&lt;br /&gt;
== 75. Exercise 5 — Test walkthrough ==&lt;br /&gt;
&lt;br /&gt;
Choose one meaningful test.&lt;br /&gt;
&lt;br /&gt;
Explain:&lt;br /&gt;
&lt;br /&gt;
* what behavior it verifies;&lt;br /&gt;
* why the behavior matters;&lt;br /&gt;
* whether it is a unit or integration test;&lt;br /&gt;
* what would happen if the implementation were broken.&lt;br /&gt;
&lt;br /&gt;
== 76. Exercise 6 — Error-path walkthrough ==&lt;br /&gt;
&lt;br /&gt;
Choose one predictable failure.&lt;br /&gt;
&lt;br /&gt;
Trace:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
failure&lt;br /&gt;
  ↓&lt;br /&gt;
detection&lt;br /&gt;
  ↓&lt;br /&gt;
exception/error&lt;br /&gt;
  ↓&lt;br /&gt;
handling layer&lt;br /&gt;
  ↓&lt;br /&gt;
user/log output&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 77. Exercise 7 — Clean installation ==&lt;br /&gt;
&lt;br /&gt;
Using a fresh environment:&lt;br /&gt;
&lt;br /&gt;
# install the project;&lt;br /&gt;
# run the tests;&lt;br /&gt;
# run the main workflow;&lt;br /&gt;
# compare the process with the README.&lt;br /&gt;
&lt;br /&gt;
Correct any discrepancy.&lt;br /&gt;
&lt;br /&gt;
== 78. Exercise 8 — Final repository audit ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
git log --oneline --graph --decorate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm:&lt;br /&gt;
&lt;br /&gt;
* final code is committed;&lt;br /&gt;
* tests are committed;&lt;br /&gt;
* documentation is committed;&lt;br /&gt;
* no sensitive data exists;&lt;br /&gt;
* no generated files are accidentally tracked.&lt;br /&gt;
&lt;br /&gt;
== 79. Exercise 9 — Demonstration rehearsal ==&lt;br /&gt;
&lt;br /&gt;
Perform the demonstration exactly as it will be shown.&lt;br /&gt;
&lt;br /&gt;
Measure whether it is concise enough.&lt;br /&gt;
&lt;br /&gt;
Record any manual step that could fail.&lt;br /&gt;
&lt;br /&gt;
Simplify the demonstration where possible.&lt;br /&gt;
&lt;br /&gt;
== 80. Exercise 10 — Final self-review ==&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
What is the strongest part of the project?&lt;br /&gt;
&lt;br /&gt;
What is the weakest part?&lt;br /&gt;
&lt;br /&gt;
What is the most important limitation?&lt;br /&gt;
&lt;br /&gt;
What would you improve with one more week?&lt;br /&gt;
&lt;br /&gt;
Which technical decision are you most prepared to defend?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The answers should be based on the actual implementation.&lt;br /&gt;
&lt;br /&gt;
== 81. Final evaluation checklist ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Final question&lt;br /&gt;
|-&lt;br /&gt;
| objective&lt;br /&gt;
| Is the project goal clear?&lt;br /&gt;
|-&lt;br /&gt;
| functionality&lt;br /&gt;
| Does the primary workflow work?&lt;br /&gt;
|-&lt;br /&gt;
| architecture&lt;br /&gt;
| Can the structure be explained clearly?&lt;br /&gt;
|-&lt;br /&gt;
| Python&lt;br /&gt;
| Is the implementation appropriate for Python?&lt;br /&gt;
|-&lt;br /&gt;
| robustness&lt;br /&gt;
| Are expected failures handled?&lt;br /&gt;
|-&lt;br /&gt;
| testing&lt;br /&gt;
| Are important behaviors tested?&lt;br /&gt;
|-&lt;br /&gt;
| reproducibility&lt;br /&gt;
| Can the project be installed from documentation?&lt;br /&gt;
|-&lt;br /&gt;
| repository&lt;br /&gt;
| Is the submitted state clean and complete?&lt;br /&gt;
|-&lt;br /&gt;
| documentation&lt;br /&gt;
| Is usage sufficiently explained?&lt;br /&gt;
|-&lt;br /&gt;
| understanding&lt;br /&gt;
| Can the team explain its own code and decisions?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 82. Course summary ==&lt;br /&gt;
&lt;br /&gt;
Across the seven laboratories, the progression has been:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Lab 1&lt;br /&gt;
Python syntax and idioms&lt;br /&gt;
        ↓&lt;br /&gt;
Lab 2&lt;br /&gt;
Object-oriented Python&lt;br /&gt;
        ↓&lt;br /&gt;
Lab 3&lt;br /&gt;
Modules, files, exceptions and typing&lt;br /&gt;
        ↓&lt;br /&gt;
Lab 4&lt;br /&gt;
Testing and software quality&lt;br /&gt;
        ↓&lt;br /&gt;
Lab 5&lt;br /&gt;
Project architecture and MVP&lt;br /&gt;
        ↓&lt;br /&gt;
Lab 6&lt;br /&gt;
Stabilization and release candidate&lt;br /&gt;
        ↓&lt;br /&gt;
Lab 7&lt;br /&gt;
Final integration and demonstration&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The objective of the course is therefore not only to learn Python syntax.&lt;br /&gt;
&lt;br /&gt;
It is to move from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
C/C++ programmer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
toward:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Python software developer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
who can write code that is:&lt;br /&gt;
&lt;br /&gt;
* readable;&lt;br /&gt;
* modular;&lt;br /&gt;
* testable;&lt;br /&gt;
* robust;&lt;br /&gt;
* reproducible;&lt;br /&gt;
* maintainable.&lt;br /&gt;
&lt;br /&gt;
== 83. Final principle ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The final project should not only work. Another developer should be able to understand what it does, install it, run it, test it and modify it without depending on undocumented knowledge from the original authors.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 84. Final submission checklist ==&lt;br /&gt;
&lt;br /&gt;
Before leaving the final laboratory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[ ] final repository pushed&lt;br /&gt;
[ ] final commit identified&lt;br /&gt;
[ ] tests pass&lt;br /&gt;
[ ] main workflow demonstrated&lt;br /&gt;
[ ] README complete&lt;br /&gt;
[ ] known limitations documented&lt;br /&gt;
[ ] repository clean&lt;br /&gt;
[ ] no secrets committed&lt;br /&gt;
[ ] project can be installed reproducibly&lt;br /&gt;
[ ] all team members understand the main architecture&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The project is then ready for final submission.&lt;/div&gt;</summary>
		<author><name>Andrei.ulmamei</name></author>
	</entry>
</feed>