소스을 정리할려면 어떻게 하면 좋습니까?

OpenSnake의 이미지

최초 프로젝트을 들어갈때에는 최대한 깔끔하게 구성을 합니다.
하지만 추후에 쏟아지는 요구사항이라던지... 수정사항같은것을 추가하다보면
분명 내가 만든거지만 나도 이해못하는 소스가 되어버리더군요.
될수있는한 주석을 달아서 이 함수가 어떤함수인지 설명문을 적어놓는데요.
도움이 되긴하지만 이렇게 해도 나중에 헷갈리기 마련이더군요.

저의 느낌은 딱이거입니다. "소스는 2D인데 프로그램은 3D 이다"
(3D을 2D로 적을라고 하니 헷갈리는 느낌?)

프로그램은 이곳저곳에서 이벤트 발생하면서 실행되는데
소스는 순차적으로 작성할수밖에 없는 A4용지일뿐이니..(객체던 뭐던간에 작성은 순차적일수밖에 없잖아요)

저의 느낌을 맞게 표현했나모르겠네요..

함수에서 또다시 함수로 물려가는 경우에 이걸 어떻게 나중에 이해하게 할지...;
다들 소스 어떻게 정리하십니까?

winner의 이미지

Call graph를 그려주는 몇가지 tool이 있지만 동적분석이 필요한 부분에서는 한계가 있을 수 밖에 없습니다. 결국 설계라는 것이 자주 변하는 곳을 잘 변하지 않는 부분으로 둘러싸는(없으면 만들어서라도) 것인데 그런 설계가 동적분석을 요구하게 만들기도 하지요.

저는 늘 source가 제대로 2D로 배치할 수만 있어도 좋겠다는 생각을 합니다. 사실 compiler든 interpreter든 1차원 text를 받아들여서 해석을 해나가죠. 물론 생성되는 말씀하셨듯이 중간 code는 2차원 이상이지만요.

OpenSnake의 이미지

어떻게든 소스로 해결해보고 싶거든요.
그래프을 따로 작성은 해봤지만 소스작성했다가 그래프작성했다가 왔다갔다하기에는 너무 무리가 있어보이더라구요.

"저는 늘 source가 제대로 2D로 배치할 수만 있어도 좋겠다는 생각을 합니다."

맞아요.. 소스을 그래프처럼 볼수있다면 좋을거같은데요.....

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

winner의 이미지

교육용 언어들이 그렇죠.
저는 source는 그냥 두고 meta file 형태가 좋을 것 같다고 봐요.
HTML과 CSS 관계처럼 말이죠.

다만 이 meta file을 자동생성하는게 좋은지 사람이 작업하는게 좋은지가 고민거리죠.

snowall의 이미지

그런 언어가 있습니다. 랩뷰LabView라고...

디버깅하려고 하면 골때립니다...-_-;

랩뷰의 경우에는 2D뷰어와 소스코드 뷰어를 둘 다 지원하면 어떨까 싶을 정도입니다.
--------------------------
피할 수 있을때 즐겨라!
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

lateau의 이미지

> 하지만 추후에 쏟아지는 요구사항이라던지... 수정사항같은것을 추가하다보면
> 분명 내가 만든거지만 나도 이해못하는 소스가 되어버리더군요.

소프트웨어공학 일반론이긴 합니다만...
과도한 수정사항이 발생하는 것은 애초부터 요구사항 분석에 결함이 있었던 것이 아닐까라는 생각이 듭니다.

어디까지나 일반론이기 때문에 실제 진행중이신 프로젝트에 대해서 전반적으로 점검해보는 것도 좋을 듯 싶습니다.

> 될수있는한 주석을 달아서 이 함수가 어떤함수인지 설명문을 적어놓는데요.
> 도움이 되긴하지만 이렇게 해도 나중에 헷갈리기 마련이더군요.

또 일반론입니다. 소스에 주석을 달았다고 해서 반드시 그 주석을 봐야할 필요는 없습니다.
함수를 설계하기 전에 pseudocode를 쓴다거나 또는 그 함수의 사용법에 대한 예제 코드를 작성해서 메모해두는 것도 꽤 도움이 됩니다.
이게 코드 분석보다 더 효율적이고 빠를 때가 있습니다.

소스만으로 승부를 보겠다는 것은 어떻게 보면 가장 원초적이고 올바른 대응을 할 수 있다는 것으로도 생각되지만, 어떻게 보면 쓸데없이 시간을 낭비할 수 있는 양날의 칼이 아닐까 싶네요.

위의 분이 말씀하신 UML이나 Graph를 도입하는 것도 짧은 시간에 프로젝트의 변동이나 수정사항을 파악할 수 있는 중요한 자료를 확보한다는 의미에서 추천드리고 싶네요.

--
I think to myself...what a emerging world.

--
I think to myself...what a emerging world.

bootmeta의 이미지

programming (coding)은 기본적으로 time 영역을 space 영역으로 변환하는 작업이다.

vivisection의 이미지

저도 제가만든 소스 나중에 보면 이게 대체 뭔지... 그래요
저같은경우는 소스파일 최대한 분할하고 main.h 에 포함시킬 헤더들
포함함수랑 역활 다 주석으로 써놉니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.