ISSTA 08
Python
๋ณต์ฌ
0. ์๊ฐ
์ฃผ๋ก โ๊ฐ๋
์ฑโ์ ์ฌ๋๋ง๋ค ๋ค๋ฅด๊ฒ ๋๋ผ๋ ์ฃผ๊ด์ ์ธ ์์๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ํ๋ก๊ทธ๋จ์ ๊ฐ๋
์ฑ์ ์ ์ง๋ณด์์ ๊ด๋ จ์ด ์์ผ๋ฉฐ, ๋ฐ๋ผ์ ์ ๋ฐ์ ์ธ ์ํํธ์จ์ด ํ์ง์ ์์ด ์ค์ํ ์์์ด๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฌํ ๋ฐฐ๊ฒฝ์์, ๋ณธ ๋
ผ๋ฌธ์์๋ ์ฝ๋ ๊ฐ๋
์ฑ์ ๊ฐ๋
์ ์ ๋ฆฝํ๊ณ ์ํํธ์จ์ด ํ์ง๊ณผ ๊ฐ๋
์ฑ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์กฐ์ฌํฉ๋๋ค. ๋์๊ฐ ์ฌ๋์๊ฒ ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ, ๋ณธ ๋
ผ๋ฌธ์ ์ฝ๋์์ ๋ํ๋๋ ํน์ง๊ณผ ์ฌ๋์ด ์๊ฐํ๋ ๊ฐ๋
์ฑ ์ฌ์ด์ ์ฐ๊ด์ฑ์ ๋์ถํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๊ธฐ์ค์ ์ ์ํ์์ต๋๋ค.
1. ๋ฐฐ๊ฒฝ์ง์
Software Readability vs. Software Complexity
๊ฐ๋
์ฑ์ด๋ผ๊ณ ํํ๋๋ software readability์ ๋ณต์ก๋๋ผ๊ณ ํํ๋๋ software complexity๋ ์๋ก ๋ค๋ฅธ ๊ฐ๋
์์ ์๊ณ ์์ด์ผ ํฉ๋๋ค. ๋ณต์ก๋, ์ฆ software complexity๋ ์ฑ๋ฅ์ ๋ํ๋ด๋ ์ฒ๋๋ก, ๋ณธ ๋
ผ๋ฌธ์์ ๋ณต์ก๋๋ ํ๋ก๊ทธ๋จ์์ ํ์์ ์ธ ์์๋ผ๊ณ ์ฃผ์ฅํฉ๋๋ค. ์ํํธ์จ์ด ๋ณต์ก๋ ๋ฉํธ๋ฆญ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค/๋ฉ์๋์ ํฌ๊ธฐ ๋ฐ ์ํธ ์์ฉ์ ๋ฒ์๋ฅผ ๊ณ ๋ คํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.
๋ฐ๋ฉด์ ๊ฐ๋
์ฑ(software readability)์ ๊ฒฝ์ฐ์๋ ์์นํ ๋ ์ ์๋ ์์์
๋๋ค. ์ฃผ๋ก ์ฃผ์, ๋ณ์๋ช
, ์ธ๋ดํธ ๋ฑ์ ์์๋ค์ ๊ฐ๋
์ฑ์ ์์๋ก ์ฌ์ฉํ๋๋ฐ, ํ๋ก๊ทธ๋จ์ด ๊ตฌ๋๋๋๋ฐ ์์ด์ ์ด ์์๋ค์ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์ง ์๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ์ถ์์ ์ด๋ฉฐ ์ฃผ๊ด์ ์
๋๋ค.
ํ ๊ฐ์ง ์ง๊ณ ๋์ด๊ฐ ๋ถ๋ถ์ ๊ฐ๋
์ฑ๊ณผ ๋ณต์ก๋๋ ์ฐ๊ด๋์ด์์ง ์๋ค๋ ์ ์
๋๋ค. ๋ฎ์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ฝ๋๊ฐ ๋์ ๊ฐ๋
์ฑ์ ๋ปํ์ง๋ ์์ผ๋ฉฐ, ๋ฐ๋๋ก ๋์ ๊ฐ๋
์ฑ์ ๊ฐ์ง๊ณ ์๋ ์ฝ๋๊ฐ ๋ฎ์ ๋ณต์ก๋๋ฅผ ๋ปํ์ง๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฐ๊ตฌ์ง๋ค์ ๊ฐ๋
์ฑ์ ๋ํด์ ์ฐ๊ตฌํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์๋ค๊ณ ํ๋จํ์ฌ ์๋ก์ด ๊ฐ๋
์ฑ ๋ฉํธ๋ฆญ์ ๊ฐ๋ฐํ๊ฒ ๋์์ต๋๋ค.
2. ๋ ผ๋ฌธ ๋ด์ฉ
Human Readability Annotation
๋ณธ ๋
ผ๋ฌธ์์๋ ๊ฐ์ฅ ๋จผ์ ๊ฐ๋
์ฑ์ ๋ํ ๊ธฐ์ค์ ์ธ์ ์ต๋๋ค. ๋ณธ ์ฐ๊ตฌํ์ ์ฃผ๊ด์ ์ธ ์์๋ฅผ ๊ฐ๊ด์ ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด์ Snippet Selection Policy, ๊ทธ๋ฆฌ๊ณ Readability Scoring์ผ๋ก ๋๋์ด ๊ฐ๋
์ฑ ํ๊ฐ๋ฅผ ์งํํ์์ต๋๋ค.
Snippet Selection Policy
์ฐ๊ตฌํ์ ๊ฐ๋
์ฑ์ ๋ํ ํ๊ฐ๋ฅผ ์งํํ๊ธฐ ์ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด๋ค์ ์ถฉ์กฑํ๊ณ ์ถ์์ต๋๋ค.
โข
์ ๋นํ ์งง์ ๊ธธ์ด: snippet์ ์ ๋ณด ํ์
์ด ๋ ์ ๋์ ๋ฒ์ ์์์ ์ต๋ํ ์งง์์ผ ํ๋ค. (context๋ณด๋ค๋ local feature๋ฅผ ์ค์)
โข
๋
ผ๋ฆฌ์ ์ผ๊ด์ฑ: ์ต๋ํ ๋ง์ ์ ๋ณด ์ ๋ฌํ๊ธฐ ์ํด, statement์ ์ธ์ ํ ์ฃผ์๋ ๋ชจ๋ ํฌํจ
โข
์ฝ๋๊ฐ ์๋ฏธ๊ฐ ์๋์ง: ์ฃผ์์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๊ฑฐ๋ dependency๋ง ๋์ด๋์ด์๋ ์ฝ๋ ๋จ์๋ ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ์ ์ธ
์ด๋ฌํ ์กฐ๊ฑด ์๋ ๋ค์๊ณผ ๊ฐ์ด snippet์ด๋ผ๋ ๊ฐ๋
์ ์ ์ํฉ๋๋ค. 3๊ฐ๋ฅผ ์ ์ ํ ์ด์ ๋ ๊ฒฝํ์ ์ผ๋ก ์ ํํ ๊ฒ์ด๋ผ๊ณ ํ๋ฉฐ, 3๊ฐ์ snippet์ด local feature, ๊ทธ๋ฆฌ๊ณ feature-based ๋ถ์์ ์ ํฉํ๋ค๊ณ ํ๋จํ์์ต๋๋ค.
Snippet : 3๊ฐ์ ์ฐ์์ ์ธ simple statements๋ก ์ด๋ฃจ์ด์ง ํ๋์ ๋ฌถ์
๋จ, Java program์ผ๋ก ํ์ ํ๋ฉฐ, simple statements๋ field declarations, assignments, function calls, breaks, continues, throws, return ์ค ํ๋
์ ์ ์์ ๋๋ถ์ด ๋ช ๊ฐ์ง ์กฐ๊ฑด๋ค์ด ์๋๋ฐ, ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โข
snippet์ statement๋ค ์ฌ์ด line๋ค๋ ํฌํจํฉ๋๋ค. (ex. ์ฃผ์, ํจ์ ํค๋, ๋น ์ค, ๋ณตํฉ๋ฌธ์ ํค๋ ๋ฑ)
โข
snippet์ scope๋ฅผ ๋ฒ์ด๋์ง ์์ต๋๋ค. (ex. ํจ์/๋ณตํฉ๋ฌธ ์์์ ์์ํ์ฌ ๋ฐ์์ ๋๋๋ ๊ฒฝ์ฐ)
์ด ๋ฐฉ๋ฒ์ผ๋ก snippet์ ๋ถ๋ฅํ ๊ฒฐ๊ณผ, ํ๊ฒ ๋ด 90%์ statement๊ฐ snippet์ ํฌํจ๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค. ๊ฐ snippet๋น ํ๊ท ์ ์ผ๋ก 7.7๊ฐ์ statement๋ก ์ด๋ฃจ์ด์ ธ ์์์ ํ์ธํ์ผ๋ฉฐ, snippet์ ํฌํจ๋์ง ์์ 10%๋ 2๊ฐ ์ดํ์ statement๋ฅผ ๊ฐ์ง๊ณ ์๋ ํจ์์์ต๋๋ค. ๋ํ ๋ณธ ์ฐ๊ตฌ์์๋ Java๋ก ํ์ ํ์ฌ ์งํํ์์ง๋ง, C์ C++๋ฑ ๋ค๋ฅธ ์ธ์ด๋ก๋ ํ์ฅํ๊ธฐ ์ฉ์ดํ ๊ฒ์ด๋ผ๊ณ ์ฐ๊ตฌํ์ ์ฃผ์ฅํฉ๋๋ค.
Readability Scoring
๋ณธ ์ฐ๊ตฌ์ ํ๊ฐ์งํ๋ ๋ด์ฌ์์ ๊ฐ๋
์ฑ ํ๊ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค. ์์์ ์ค๋ช
ํ snippet์ ๊ธฐ๋ฐ์ผ๋ก Snippet Sniper๋ผ๋ ํด์ ๊ฐ๋ฐํ์์ผ๋ฉฐ, 120๋ช
์ ํ๊ฐ์๊ฐ 100๊ฐ์ snippet์ ํ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์งํ์ ํ์์ต๋๋ค. ํ๊ฐ๋ฅผ ์งํํ ๋ ๋ฐ๋ก ๊ธฐ์ค์ ์๋ดํ์ง ์์์ผ๋ฉฐ, ๊ฐ์ธ์ ์ผ๋ก ํ๊ฐ๋ฅผ ์งํํ์๋ค๊ณ ํฉ๋๋ค.
ํ๊ฐ์๋ค์ ๋ชจ๋ ์ปดํจํฐ๊ณตํ๊ณผ์ ํ์๋ค์ด์์ผ๋ฉฐ, snippet์ 5๊ฐ์ open source ํ๋ก์ ํธ์์ ์์ฑ๋์์ต๋๋ค. (๊ฐ ํ๋ก์ ํธ์ ๋ํ ์ด์ผ๊ธฐ๋ Figure 8์ ๊ธฐ์ ) ๊ฐ ํ๋ก์ ํธ๋ ๋ค์ํ ์ฝ๋์ ์์ค์ ๊ณ ๋ คํ์๋ค๊ณ ํฉ๋๋ค.
100๊ฐ์ snippet์ ๋ํ ํ๊ฐ๋ Pearson product-moment correlation coefficient๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ฐ์๊ฐ X snippet์ Y snippet๋ณด๋ค ๋๊ฒ ํ๊ฐํ ๊ฒฝ์ฐ, X๋ฅผ ๋ ์ข์ snippet์ด๋ผ๊ณ ํ๋จํ๋ ๋ฐฉ๋ฒ์
๋๋ค. Pearson correlation์ 1์ผ๋ ์๋ฒฝํ๊ฒ ์๊ด ๋ถ์์ด ์์ผ๋ฉฐ, 0์ผ๋ ์๊ด ๋ถ์์ด ์ ํ ์๋ค๊ณ ํ๋จํฉ๋๋ค.
๋ณธ ์ฐ๊ตฌ์์๋ Pearson correlation์ ํ์ฅํ์ฌ correlation์ ํ๊ท ๊ฐ์ ๋์ถํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ธ์ ์์ฑํ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ 0.56์ correlation์ ๋์ถํด๋์ผ๋ฉฐ, ์ด๋ ํต๊ณ์ ์ผ๋ก ์ ๋นํ ์๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์์ ๋ปํฉ๋๋ค. ํ๊ท ์ด์ธ์๋ ์ค๊ฐ๊ฐ ๋ฐ ์ต๋น๊ฐ์ผ๋ก๋ ์ํํด๋ณด์์ง๋ง ๋๋ถ๋ถ ๋น์ทํ ๊ฐ์ด ๋์์ ๋ค๋ฅธ ์์๋ค๊ณผ ๋น๊ตํ๊ธฐ ํธํ ํ๊ท ์ ๋น๊ต ์งํ๋ก ์ ํํ์์ต๋๋ค.
์ด survey๋ฅผ ํตํด ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๊ณตํต์ ์ผ๋ก ๊ฐ๋
์ฑ์ ํ๊ฐํ๋ ์์๊ฐ ์์์ ์ ์ ์์์ผ๋ฉฐ, ์ด ๊ณตํต์ ์ธ ์์๋ฅผ ์ฐพ์๋ด๋๋ฐ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์์ ์ ์ ์์ต๋๋ค.
Readability Model
๋ณธ ์ฐ๊ตฌํ์ ์์ Pearson correlation์ ํตํด ๋์ถํ ๋ชจ๋ธ์ ํตํด readability model์ ๋ง๋ค์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ฌ๋๋ค์ด ๊ฐ๋
์ฑ์ ํ๋จํ๋ ๋ฐ์๋ ์ด๋์ ๋ ์๊ด๊ด๊ณ๊ฐ ์๋ค๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฐ๊ณผ๋ ์ด๋์ ๋์ ๊ฒฝํฅ์ฑ์ด์ง, ๊ฐ๊ด์ ์ธ ํ๋จ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ธฐ๊ณ์ ์ผ๋ก ํ๋จํ ์ ์๋ ๋ชจ๋ธ์ ์์ฑํ์์ต๋๋ค.
Model Generation
์ฐ๊ตฌํ์ ๋ชจ๋ธ์ ์์ฑํ๋๋ฐ ์์ด์ snippet์์ ๊ฐ๋
์ฑ์ ์ํฅ์ ์ค ์ ์๋ ๋ช ๊ฐ์ง ํน์ง์ ์ถ์ถํด๋์ต๋๋ค. ์ด๋ ๊ตฌ์กฐ, ์ฝ๋์ density, ๋
ผ๋ฆฌ์ ๋ณต์ก์ฑ ๋ฑ๊ณผ ๊ด๋ จ๋ ์์ธ์ผ๋ก ์ ์ ํ์์ผ๋ฉฐ, ์์ snippet์ ์ ํ ๋์ฒ๋ผ ์ฝ๋ ๋ธ๋ก์ ํฌ๊ธฐ์๋ ๋ฌด๊ดํ ํน์ง๋ค์ ์ถ์ถํ์์ต๋๋ค. ์๋ Figure 4๋ ์ฝ๋ ๊ฐ๋
์ฑ์ ํ๋จํ ๋ ์ฌ์ฉํ๋ ํน์ง๋ค์
๋๋ค.
๊ฐ ํน์ง์ ์๋ฐ ์์ค ์ฝ๋์ ์์ ํฌ๊ธฐ ๋ธ๋ก์ ์ ์ฉ๋ ์ ์์ผ๋ฉฐ, ๊ฐ ๊ฐ๋ฅ์ ์ค ๋น ํ๊ท ๊ฐ ํน์ ์ ์ฒด์ ์ต๋๊ฐ์ ๋ํ๋
๋๋ค. ์ด ๋ชจ๋ ์์๋ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์ฝ๋ snippet์ ํ๊ฐํ ์ ์๋ ๋ฒกํฐ๊ฐ์ผ๋ก ๋ณํ์ด ๋ฉ๋๋ค.
์ฌ๋์ด ์ฝ๋์ ๊ฐ๋
์ฑ์ ํ๋จํ ๋ ์ฌ๋ฌ ๊ฐ์ง ์์๋ฅผ ๋ณตํฉ์ ์ผ๋ก ํ๋จํ๊ธฐ ๋๋ฌธ์, ์ฐ๊ตฌํ์ ์ธ์คํด์ค(instance)๊ธฐ๋ฐ์ผ๋ก ํ๋จํ๋ classifier๋ฅผ ์ ์ ํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ธ์คํด์ค๋ snippet์์ ์ถ์ถ๋ ๋ฒกํฐ์
๋๋ค. classifier๋ฅผ trainingํ ๋๋ survey๋ฅผ ํตํด ์ป์ โ์ ๋ตโ์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ธ์ โ๋ ๊ฐ๋
์ฑ์ด ๋์โ, ๊ทธ๋ฆฌ๊ณ โ๊ฐ๋
์ฑ์ด ๋ฎ์โ ์ฝ๋๋ก ๋๋์ด ๊ตฌ๋ถ์ ํ๊ฒ ๋ฉ๋๋ค. test set์ ์ ๊ณตํ ๋๋ Figure 3์์ 3.15 ๋ฏธ๋ง์ ์ ์๋ฅผ ๋ฐ์ snippet์ โ๊ฐ๋
์ฑ์ด ๋ฎ์โ ์ฝ๋ snippet์ผ๋ก ์ ๊ณตํ์ต๋๋ค.
๊ทธ ์ดํ์๋ test set์๋ ์๋ ์์๋ค์ ๋ํด ๋ถ๋ฅ๋ฅผ ์งํํ๊ณ , Weka machine learning toolbox๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๋ฐ์ดํฐ ์์ ๋นํด ๋ณต์กํ ๋ชจ๋ธ์ ๊ตฌ์ฑํด์ผํ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํผํ
์ ์ํ์ด ์์ด, ์ด๋ 10-fold cross validation์ ์ฌ์ฉํ์์ต๋๋ค. ์ด๋ ์ ์ฒด ๋ฐ์ดํฐ์
์ 10๊ฐ๋ก ๋ถํ ํ์ฌ ๊ฐ๊ฐ์ subset์ด ๊ฒ์ฆ set์ผ๋ก ์ฌ์ฉ๋ ์ ์๊ฒ ํ์ฌ ํธํฅ์ ์ค์ด๋ ๊ฒ์ฆ ๊ณผ์ ์
๋๋ค.
Model Performance
์ด๋ฌํ ์ข
๋ฅ์ ์คํ์์๋ recall๊ณผ precision์ ํ๊ฐ ์งํ๋ก ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ฐ๊ตฌํ์ recall๊ณผ precision์ ์กฐํํ๊ท ์ธ f-score๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ฐ๋ฅผ ์งํํ์ต๋๋ค.
์ด๋ฅผ ํ๊ฐํ๊ธฐ ์ํด ์ด 10๊ฐ์ classifier๋ฅผ ๋์์ผ๋ก ์คํ์ ์งํํ์์ต๋๋ค. ๊ทธ ์ค ๋ค์ค๋ ์ด์ด perceptron, Bayesian classifier, ๊ทธ๋ฆฌ๊ณ Voting Feature Interval approach๊ฐ ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ(์ ํ๋ 75%~80%)์ ๋ถ์ฌ์ฃผ์์ต๋๋ค. ์ธ classifier ๋ชจ๋ ๋น์ทํ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์์ผ๋, Bayesian classifier๊ฐ ๊ฐ์ฅ ๋นจ๋๊ธฐ ๋๋ฌธ์ ์ถํ์๋ ๋ณธ classifier๋ฅผ ํตํด ๋ถ์์ ์งํํ์ต๋๋ค.
์ Figure 5์ Figure 6์ฒ๋ผ, ์ฐ๊ตฌํ์ด ๋ง๋ ๋ชจ๋ธ์ด ๋ ์ข์ ์๊ด๊ด๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ personal preference๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ๋ ํต์ผ์ฑ์ด ์ข๋ค๋ ๊ฒ์ผ๋ก ์ฐ๊ตฌํ์ ํด์ํ๊ณ ์์ต๋๋ค.
๋ํ ์ฐ๊ตฌํ์ ๊ฐ๊ฐ feature์ ๋ํด์ ์ด๋ค ์์๊ฐ ๊ฐ์ฅ ๋ง์ ์ํฅ์ ์ฃผ๋์ง ๋ํ ๋ถ์ํ์์ต๋๋ค. ์๋ฅผ ๋ค์ด โaverage line lengthโ์ โaverage number of identifiers per lineโ์ ๊ฐ๋
์ฑ์ ์์ด ๋งค์ฐ ์ค์ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ฐ๋๋ก โaverage identifier lengthโ๋ ๊ทธ ์์ฒด๋ก ๋งค์ฐ ์์ธก ๊ฐ๋ฅํ ์์๋ ์๋๋ฉฐ, ๊ตฌ์กฐ, ๋ฃจํ ๋๋ ๋น๊ต ์ฐ์ฐ์์ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
Correlating Readability with Software Quality
๋ง์ง๋ง์ผ๋ก ๋ณธ ์ฐ๊ตฌ์์ ์ ๋ฆฝํ metric์ด ์ค์ software quality์๋ ๊ด๋ จ์ด ์๋์ง์ ๋ํด์ ํ๊ตฌํ์์ต๋๋ค. ์ด๋ฅผ ํ์ธํด๋ณด๊ธฐ ์ํด 1) ๋ฒ๊ทธ๋ฅผ ์ฐพ์์ฃผ๋ ๋๊ตฌ์ธ FindBugs์ ์๊ด๊ด๊ณ๊ฐ ์๋์ง ๋ถ์ํ๊ณ , 2) ๋ํ ์คํ ์์ค ํ๋ก์ ํธ ๋ฒ์ ์ฌ์ด์ ์ฝ๋ ๋ณ๊ฒฝ๊ณผ ๊ฐ๋
์ฑ ์ฌ์ด์ ์๊ด๊ด๊ณ๊ฐ ์๋์ง ๋ถ์ํ์ต๋๋ค. ์ด ๊ณผ์ ์ ํตํด ๊ฐ๋
์ฑ์ ๋ํ ํธ๋ ๋๋ฅผ ํ๊ตฌํฉ๋๋ค.
Readability Correlations
์ฒซ ๋ฒ์งธ ์คํ์ผ๋ก, Findbugs์ ๊ฐ๋
์ฑ ์ฌ์ด์ ์๊ด๊ด๊ณ๋ฅผ ์์๋ด๊ธฐ ์ํด ๊ด๋ จ๋ ๋ฐ์ดํฐ์
์ ์ถ๊ฐ์ ์ผ๋ก ์์ฑํ์์ต๋๋ค. Findbugs๋ฅผ ํตํด ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋ ํจ์๋ค์ โ๊ฐ๋
์ฑ์ด ๋ฎ์โ ๋ฐ์ดํฐ๋ก ์ถ๊ฐํ์ฌ ๋ชจ๋ธ ์ค์ ์ ํ์์ต๋๋ค.
๋ ๋ฒ์งธ ์คํ์ผ๋ก๋ ์ฝ๋ ์
๋ฐ์ดํธ๊ฐ ๊ฐ๋
์ฑ๊ณผ ์ฐ๊ด์ด ์๋์ง์ ๋ํด์ ํ๊ตฌํ์์ต๋๋ค. ์
๋ฐ์ดํธ๊ฐ ์๋ ์ฝ๋์ ๋ํด์ ๋ ์ข์ ํ์ง์ ์ฝ๋๊ฐ ์๋ค๋ ๊ฒ์ ๊ฐ์ ํ๊ณ , 2๊ฐ์ ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ ๋น๊ตํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ณง ํจ์น๊ฐ ์ด๋ฃจ์ด์ง ์ฝ๋์์ ์ถ์ธกํ๋ ๋ชจ๋ธ์ ์์ฑํ๊ณ ์ ํ์์ต๋๋ค. ํน์ดํ ์ ์ ๊ฐ๋
์ฑ์ ์ค์ ์ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ณต๋ฐฑ๋ ๋ณ๊ฒฝ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์์ต๋๋ค.
Figure 9๋ ๋ ์คํ์ ๊ฒฐ๊ณผ๋ฅผ ์์ฝํ ๊ฒ์
๋๋ค. ๋จผ์ FindBugs์์ ์๊ด๊ด๊ณ ํ๊ท ๊ฐ์ 0.61์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฒ์ ์
๋ฐ์ดํธ์ ๋ํ ์๊ด๊ด๊ณ ํ๊ท ๊ฐ์ 0.63์
๋๋ค. ํ ๊ฐ์ง ์ ์ํ ์ ์ ๋ณธ ์ฐ๊ตฌ์ ๋ชฉํ๋ FindBugs ๋ฐ ๋ฒ์ ์
๋ฐ์ดํธ์ ๋ํด ๋์ ์๊ด๊ด๊ณ๋ฅผ ๊ฐ๊ฒ ๋๋ ๊ฒ์ด ์๋๋ผ ์ผ๋ฐ์ ์ธ ์ ์ฉ์ฑ์ ๊ฐ์ง๊ณ ์๊ณ , ์ํํธ์จ์ด ํ์ง๊ณผ ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ ์ฃผ์ฅํฉ๋๋ค.
Figure 10์ ๋ณธ ๋ชจ๋ธ์ ์ ํ๋์ ๋ํด์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์๋ (๋ฒ๊ทธ๊ฐ ์๋, ํน์ ์ด์ ๋ฒ์ ์ ์ฝ๋) ์ฝ๋์ ๋ํด์ ๋ถ๋ฅ๋ฅผ ์งํํ์ ๋, ๊ทธ ์ฝ๋์ ๋ํด์ ํ๊ท ์ ์ผ๋ก 150% ์ด์์ ํ๋ฅ ๋ก ์์ข์ ์ฝ๋๋ก ๋ถ๋ฅํ ๊ฒ์ด๋ผ๋ ๊ฒฐ๋ก ์ ์ป์ ์ ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ฐ๊ตฌํ์ด ๊ฐ๋ฐํ ๋ชจ๋ธ์ ๋จ์ํ ๊ฐ๋
์ฑ์ ๋ํ ํ๊ฐ๋ฅผ ๋ด๋ฆด ๋ฟ๋ง์๋๋ผ, ์ํํธ์จ์ด์ ํ์ง์ ๋ํ ๊ฒ ๋ํ ์์ฌํ๊ณ ์์์ ์ ์ ์๋ค.
Software Lifecycle
๋ง์ง๋ง์ผ๋ก ์ฐ๊ตฌํ์ ์ธ๋ถ ์์ธ์ ๋ํ ๊ฐ๋
์ฑ ๋ฉํธ๋ฆญ์ ๊ด๊ณ๋ฅผ ์กฐ์ฌํ๊ธฐ ์ํด Software Lifecyle์ ๊ฑฐ์น ๋ณํ๋ฅผ ์กฐ์ฌํ์๋ค.
Figure 11์ ๋ณด๋ฉด Software Lifecycle์ ์์ด์ ๊ฐ๋
์ฑ์ด ์ด๋ป๊ฒ ๋ณํํ๋์ง ๋ณผ ์ ์๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ํฌ๊ฒ ์ฑ์ฅํ์ง๋ ์๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, ์ด๋ ์ค๊ฐ์ ์๋ก์ด API๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ณผ์ ์์ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง ๊ฒ์ผ๋ก ํด์ํ๊ณ ์๋ค.
๋ฐ๋ผ์ Figure 12์ ๊ฒฐ๊ณผ์ฒ๋ผ ํ๋ก์ ํธ์ ์ฑ์๋์ ๊ฐ๋
์ฑ์ ๋ถ์ํ๋ ๋๋ค๋ฅธ ์คํ์ ์งํํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ์ฑ์ํ ํ๋ก์ ํธ๊ฐ ๋ ์ฝ๊ธฐ ์ฌ์ด ๊ฒฝํฅ์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค. ์ด ๋ ์คํ์ ํตํด ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ฐ์ด ์ง๋ ์๋ก ์ฝ๋์ ์ผ๋ถ๋ถ๋ง ๋ณด์๋๊ณ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋
์ฑ์ ๋ฎ์์ง๋ค. ๊ทธ๋ฌ๋ ๊ทธ์ ๋ณ๊ฐ๋ก ํ๋ก์ ํธ์ ์ฑ์๋๊ฐ ๋์์ง๋ค๋ฉด ๊ฐ๋
์ฑ์ ๋์์ง๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
Discussions & Future Work
Discussions
์ฐ๊ตฌ๋ฅผ ํ๋ฉด์ ์์๋ธ ๋ถ๋ถ๋ค
โข
Identifier length๋ ๊ฐ๋
์ฑ์ ์ ํ ์ํฅ์ ์ฃผ์ง ์์
โข
์ฃผ์์ ์๊ฐ๋ณด๋ค ๊ฐ๋
์ฑ์ ํฌ๊ฒ ๋๋ฆฌ์ง ์์ (๋ํดํ ๋ ๋์์ ์ฃผ๋ ์ ๋)
โข
Identifier์ ์ ๋ฐ ๊ธ์์๋ ์์ฃผ ํฐ ์ํฅ์ ์ค (์ฝ๋๊ฐ ๊ธธ์ด์ง์๋ก ์ฝ๊ธฐ ํ๋ฌ)
Future Work
โข
personal preference์ ๋ํ ์ฒ๋ฆฌ
โข
ํ๋จ ๊ธฐ์ค; ํ๊ท /์ต๋๊ฐ ์ธ์ simple statement์ ๊ฐ์ ๋ฑ ์ถ๊ฐํด๋ ์๋ฏธ์์ ๋ฏ
โฆ
ํด๋น ์ฐ๊ตฌ์์๋ ์ต๋ํ ๊ฐ๋จํ๊ฒ ํ๋จ์์๋ฅผ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด ์ฑํ X
3. ๊ฒฐ๋ก
๋ณธ ๋
ผ๋ฌธ์ ํ๋ก๊ทธ๋จ์ ๊ฐ๋
์ฑ์ ๋ํด์ ์ ๋ฆฌํ๊ณ , ๋์๊ฐ ๊ฐ๋
์ฑ๊ณผ ํ๋ก๊ทธ๋จ์ ํ์ง์ด ์ฐ๊ด์ด ์๋์ง์ ๋ํด ์ฐ๊ตฌํ์์ต๋๋ค. ์ค์ ๋ก ์ํํธ์จ์ด ํ์ง๊ณผ ์ฐ๊ด์ด ์์์ ์ฆ๋ช
ํ ๋ถ๋ถ์ ์์ด ์๋ฏธ๊ฐ ์๋ ์ฐ๊ตฌ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
4. References
๋
ผ๋ฌธ์์ ์ฌ์ฉํ dataset: https://web.eecs.umich.edu/~weimerw/data/readability/
programming complexity: https://en.wikipedia.org/wiki/Programming_complexity
programming readability: https://en.wikipedia.org/wiki/Readability