expensereport

所属分类:编程语言基础
开发工具:Assembly
文件大小:0KB
下载次数:0
上传日期:2023-07-18 20:33:15
上 传 者sh-1993
说明:  ExpenseReport遗留代码重构kata,使用50多种编程语言(Ada到Zig),
(The ExpenseReport legacy code refactoring kata in >50 programming languages (Ada to Zig),)

文件列表:
expensereport-trunk/ (0, 2023-09-07)
expensereport-trunk/CONTRIBUTORS (236, 2023-09-07)
expensereport-trunk/LICENSE (13981, 2023-09-07)
expensereport-trunk/by-sa.svg (16462, 2023-09-07)
expensereport-trunk/expensereport-ada/ (0, 2023-09-07)
expensereport-trunk/expensereport-ada/Makefile (170, 2023-09-07)
expensereport-trunk/expensereport-ada/expensereport.adb (2164, 2023-09-07)
expensereport-trunk/expensereport-asm-68k-masm/ (0, 2023-09-07)
expensereport-trunk/expensereport-asm-68k-masm/ExpenseReport.s (4877, 2023-09-07)
expensereport-trunk/expensereport-asm-aarch64-linux-gasm/ (0, 2023-09-07)
expensereport-trunk/expensereport-asm-aarch64-linux-gasm/ExpenseReport.S (5066, 2023-09-07)
expensereport-trunk/expensereport-asm-aarch64-linux-gasm/Makefile (302, 2023-09-07)
expensereport-trunk/expensereport-asm-amd64-linux-gasm/ (0, 2023-09-07)
expensereport-trunk/expensereport-asm-amd64-linux-gasm/ExpenseReport.S (5588, 2023-09-07)
expensereport-trunk/expensereport-asm-amd64-linux-gasm/Makefile (203, 2023-09-07)
expensereport-trunk/expensereport-bash/ (0, 2023-09-07)
expensereport-trunk/expensereport-bash/ExpenseReport.sh (1036, 2023-09-07)
expensereport-trunk/expensereport-basic-amiga/ (0, 2023-09-07)
expensereport-trunk/expensereport-basic-amiga/ExpenseReport.bas (1199, 2023-09-07)
expensereport-trunk/expensereport-basic-bywater/ (0, 2023-09-07)
expensereport-trunk/expensereport-basic-bywater/ExpenseReport.bas (947, 2023-09-07)
expensereport-trunk/expensereport-basic-bywater/Makefile (44, 2023-09-07)
expensereport-trunk/expensereport-basic-c64/ (0, 2023-09-07)
expensereport-trunk/expensereport-basic-c64/ExpenseReport.bas (892, 2023-09-07)
expensereport-trunk/expensereport-basic-locomotive/ (0, 2023-09-07)
expensereport-trunk/expensereport-basic-locomotive/ExpenseReport.bas (940, 2023-09-07)
expensereport-trunk/expensereport-basic-yabasic/ (0, 2023-09-07)
expensereport-trunk/expensereport-basic-yabasic/ExpenseReport.bas (1001, 2023-09-07)
expensereport-trunk/expensereport-basic-yabasic/Makefile (44, 2023-09-07)
expensereport-trunk/expensereport-c/ (0, 2023-09-07)
expensereport-trunk/expensereport-c/ExpenseReport.c (1178, 2023-09-07)
expensereport-trunk/expensereport-c/ExpenseReport.h (265, 2023-09-07)
expensereport-trunk/expensereport-c/Makefile (138, 2023-09-07)
... ...

# ExpenseReport ![License: CC-BY-SA](https://github.com/christianhujer/expensereport/blob/master/by-sa.svg) The ExpenseReport legacy code refactoring kata in various languages. This is an example of a piece of legacy code with lots of code smells. The goal is to support the following new feature as best as you can: * Add Lunch with an expense limit of 2000. ## Process 1. Read the code to understand what it does and how it works. 2. Read the code and check for design and code smells. Make a list of all code and design smells that you find. 3. Analyze what you would have to change to implement the new requirement without refactoring the code. 4. Write a characterization test. Expand your list of code and design smells. Add those smells that you missed earlier and discovered now because they made your life writing a test miserable. 5. Refactor the code. 6. Refactor the test. 7. Test-drive the new feature. ## Supported Languages The ExpenseReport example currently exists in the following languages: - [Ada](https://github.com/christianhujer/expensereport/blob/master/expensereport-ada/) - [Assembler](https://github.com/christianhujer/expensereport/blob/master/expensereport-asm-68k-masm/) (Motorola 68020, Amiga OS, MaxonASM) - [Assembler](https://github.com/christianhujer/expensereport/blob/master/expensereport-asm-aarch64-linux-gasm/) (AArch64, Linux, GNU Assembler) - [Assembler](https://github.com/christianhujer/expensereport/blob/master/expensereport-asm-amd64-linux-gasm/) (AMD64/Intel x86-64, Linux, GNU Assembler) - [bash](https://github.com/christianhujer/expensereport/blob/master/expensereport-bash/) - [BASIC](https://github.com/christianhujer/expensereport/blob/master/expensereport-basic-amiga/) (Amiga BASIC, Commodore Amiga) Quite amazing! First BASIC without line numbers! - [BASIC](https://github.com/christianhujer/expensereport/blob/master/expensereport-basic-bywater/) (Bywater BASIC, Linux) (very similar to Commodore BASIC) - [BASIC](https://github.com/christianhujer/expensereport/blob/master/expensereport-basic-c64/) (Commodore BASIC, Commodore 64) - [BASIC](https://github.com/christianhujer/expensereport/blob/master/expensereport-basic-locomotive/) (Locomotive BASIC, Amstrad CPC) - [BASIC](https://github.com/christianhujer/expensereport/blob/master/expensereport-basic-yabasic/) (Yabasic) - [C](https://github.com/christianhujer/expensereport/blob/master/expensereport-c/) - [C#](https://github.com/christianhujer/expensereport/blob/master/expensereport-csharp/) - [C++](https://github.com/christianhujer/expensereport/blob/master/expensereport-cxx/) - [Clojure](https://github.com/christianhujer/expensereport/blob/master/expensereport-clojure/) This one was particularly painful to intentionally write poorly, I almost cried. - [COBOL](https://github.com/christianhujer/expensereport/blob/master/expensereport-cobol/) - [D](https://github.com/christianhujer/expensereport/blob/master/expensereport-d/) - [Dart](https://github.com/christianhujer/expensereport/blob/master/expensereport-dart/) - [Elixir](https://github.com/christianhujer/expensereport/blob/master/expensereport-elixir/) - [F#](https://github.com/christianhujer/expensereport/blob/master/expensereport-fsharp/) - [Fortran](https://github.com/christianhujer/expensereport/blob/master/expensereport-fortran/) - [Go](https://github.com/christianhujer/expensereport/blob/master/expensereport-go/) - [Groovy](https://github.com/christianhujer/expensereport/blob/master/expensereport-groovy-script/) - [Haskell](https://github.com/christianhujer/expensereport/blob/master/expensereport-haskell/) - [Java](https://github.com/christianhujer/expensereport/blob/master/expensereport-java/) - [JavaScript](https://github.com/christianhujer/expensereport/blob/master/expensereport-javascript/) - [Julia](https://github.com/christianhujer/expensereport/blob/master/expensereport-julia/) - [Kotlin](https://github.com/christianhujer/expensereport/blob/master/expensereport-kotlin/) - [Lisp](https://github.com/christianhujer/expensereport/blob/master/expensereport-lisp/) (Common Lisp) - [Lua](https://github.com/christianhujer/expensereport/blob/master/expensereport-lua/) - [Nim](https://github.com/christianhujer/expensereport/blob/master/expense-report-nim/) - [Objective-C](https://github.com/christianhujer/expensereport/blob/master/expensereport-objc/) - [Pascal](https://github.com/christianhujer/expensereport/blob/master/expensereport-pascal/) - [Perl](https://github.com/christianhujer/expensereport/blob/master/expensereport-perl/) - [PHP](https://github.com/christianhujer/expensereport/blob/master/expensereport-php/) - [PostScript](https://github.com/christianhujer/expensereport/blob/master/expensereport-postscript/) - [Prolog](https://github.com/christianhujer/expensereport/blob/master/expensereport-prolog/) - [Python](https://github.com/christianhujer/expensereport/blob/master/expensereport-python/) - [Raku](https://github.com/christianhujer/expensereport/blob/master/expensereport-raku/) (Perl6) - [Rexx](https://github.com/christianhujer/expensereport/blob/master/expensereport-rexx/) (tested with Regina Rexx and ARexx) - [Ruby](https://github.com/christianhujer/expensereport/blob/master/expensereport-ruby/) - [Rust](https://github.com/christianhujer/expensereport/blob/master/expensereport-rust/) - [Scala](https://github.com/christianhujer/expensereport/blob/master/expensereport-scala/) - [Scheme](https://github.com/christianhujer/expensereport/blob/master/expensereport-scheme/) - [Smalltalk](https://github.com/christianhujer/expensereport/blob/master/expensereport-smalltalk/) - [SQL](https://github.com/christianhujer/expensereport/blob/master/expensereport-sql/) (Using SQLite3) - [Swift](https://github.com/christianhujer/expensereport/blob/master/expensereport-swift/) - [TcL](https://github.com/christianhujer/expensereport/blob/master/expensereport-tcl/) - [TypeScript](https://github.com/christianhujer/expensereport/blob/master/expensereport-typescript/) - [Visual BASIC](https://github.com/christianhujer/expensereport/blob/master/expensereport-vb/) - [XML/XSLT](https://github.com/christianhujer/expensereport/blob/master/expensereport-xslt/) - [Zig](https://github.com/christianhujer/expensereport/blob/master/expensereport-zig/) - [zsh](https://github.com/christianhujer/expensereport/blob/master/expensereport-zsh/) ## Planned languages (in no particular order and with no guarantee) - ABAP - Amiga E - AMOS BASIC - APL - More Assembler implementations (arm, aarch64, i686, powerpc, powerpc64, mpis, mips64, sparc, sparc64, risc-v, etc, usually on Linux) - Carbon - CLIPS - Cluster - Concurnas - Curry - Dark - Eiffel - Elm - Erlang - Flix - Forth - Gleam - Gosu - Hack - Hare - Java Byte Code / JVM Assembler - Lobster - Logo - Mercury - Modula-2 (once the linker starts working again) - Mojo - Oberon - OCaml - Pony - PureScript - R - Reason - REBOL - Scratch - SNOBOL - Solidity (maybe) - Strongtalk - TeX - Unison - WebAssembly ## Languages explicitly not planned - Brainfuck - False - Malbolge - Whitespace ## Undecided Languages There are many more programming languages than in the list above. Find a more complete list on [Wikipedia](https://github.com/christianhujer/expensereport/blob/master/https://en.wikipedia.org/wiki/List_of_programming_languages). ## Other plans - Make sure that all languages are providing the identical challenge. To be practical, this will require the removal of the timestamp side-effect. - Provide the time-stamp side-effect on a separate branch. - Provide a test setup (without test) on a separate branch so that folks can choose whether they want to include the setup work in the kata or not. - Provide a level 2 challenge for creating an HTML report besides the Plain Text report. ## Solutions To see solutions, switch to the [solutions branch](https://github.com/christianhujer/expensereport/blob/master/https://github.com/christianhujer/expensereport/tree/solutions#solutions). **Warning** The solutions branch will be rebased! ## Credits and License I first encountered the ExpenseReport example during a bootcamp at Equal Experts. I also have seen the ExpenseReport example being used by Robert "Uncle Bob" C. Martin. However, he seems to not be the original author (https://twitter.com/unclebobmartin/status/1537063143326855176?s=20&t=lh_vVb9jUQmY6PYG50974w) I have tried to research its origins but so far I have failed. If you know who has first come up with this example, please get in touch with me. As I was asked for the license conditions, I have decided to put this under CC-BY-SA, with the following considerations: - Please credit me, last but not least to retain the opportunity for people to experience this exercise in as many programming languages as they are interested in. - Share it under the same license. - Using this as training material should be allowed, even if the trainer is charging money for their time. Disclaimer: As stated above, I did not come up with the original version. The original author is unknown to me. The CC-BY-SA license thus can only cover my contribution: Recreating the Java version from memory, creating the versions in other programming languages than Java, and keeping them consistent.

近期下载者

相关文件


收藏者