Tech talk on code quality

30
Code quality.

Transcript of Tech talk on code quality

Page 1: Tech talk on code quality

Code quality.

Page 2: Tech talk on code quality

Why code quality?

Page 3: Tech talk on code quality
Page 4: Tech talk on code quality

Development team• Velocity

Product

• Bugs count• Time to fix• Performance• Security

Software Engineer

• Personal comfort• Motivation

Why it matters?

Page 5: Tech talk on code quality

Average mood

Page 6: Tech talk on code quality

understandabilityis what we need.

Page 7: Tech talk on code quality

What we can do?

• Write better new code

• Improve existing code

Page 8: Tech talk on code quality

print(“Hello World!”)cut.

do not increase.

Page 9: Tech talk on code quality

Program size

• Function size

• Class size

• File size

• Package size

cut.do not increase.

Page 10: Tech talk on code quality

Code style

style #1

var result = [];

for (var i = 0; i < l; i += 1) {

if (i % 2) {

result.push(data[i]);

}

}

style #2

data.filter(filters.modal)

Page 11: Tech talk on code quality

Unclear responsibility

function hakuna_matata(a, b, next) {

if (!b) {

return a;

}

if (!a && !next) {

return b;

}

return “Hakuna matata!”;

}

Page 12: Tech talk on code quality

Architectural issues

Page 13: Tech talk on code quality

Why it happens?qualification, dude.

Page 14: Tech talk on code quality

We don’t do what is needed!

Page 15: Tech talk on code quality

What was estimated

Page 16: Tech talk on code quality

What we wanna built

Page 17: Tech talk on code quality

What we have done

Page 18: Tech talk on code quality

Manage your time.

Page 19: Tech talk on code quality

Improve existing code.80 - 20

Pareto principle.

Page 20: Tech talk on code quality

Measure!

Page 21: Tech talk on code quality

Lines of code - LOC

for (i = 0; i < 100; i++) printf("hello"); /* How many lines of code is this? */

Logical lines of code - LLOC

/* Now how many lines of code is this? */

for (i = 0; i < 100; i++)

{

printf("hello");

}

Number of lines of code

Page 22: Tech talk on code quality

Simple code

function sayHello() {

print(“Hello”)

}

Difficult code

function say(message) {

if (!message) {

return false;

}

if (message == “Hello”) {

print(“Hello World!”);

return;

}

message && print(message);

}

Cyclomatic complexity

Page 23: Tech talk on code quality

Difficult code

function say(message) {

if (!message) {

return false;

}

if (message == “Hello”) {

print(“Hello World!”)

return;

}

print(message)

}

✓ 3 tests passed

100% coverage

say() == false

say(“Hello”) == “Hello World!”

say(“Text”) && output == “Text”

Code coverage

Page 24: Tech talk on code quality

Other metrics• Cohesion• Coupling• Connascence• DSQI• Maintainability index• Comment density• Halstead complexity• Number of classes• Number of parameters• Number of dependencies• Execution time• Load time…

Page 25: Tech talk on code quality

SonarQube

Plato

Code analysis platforms

Page 26: Tech talk on code quality

node install complexity-report

LLOC Complexity Density

5440 703 13 %

5864 1448 25 %

11739 2132 18 %

965 275 28 %

Metrics example

Page 27: Tech talk on code quality

Metrics example #2

Page 28: Tech talk on code quality

git log --name-only -- *.js | grep .js | sort | uniq -c | sort -n

git diff --stat `git rev-list HEAD | tail -n 1` HEAD | grep .js | awk '{ print $3 " "$4 " "

$1}' | sort -n

Version control system

Page 29: Tech talk on code quality

Let’s make our life better!that’s all.

Page 30: Tech talk on code quality

Average mood