Software Engineering에 대한 질문

seemajor의 이미지

지금 저는 디바이스 드라이버 개발 구현 이전에 필요한 프로세스를 만드는 작업을 하고 있습니다.

SE에서는 이미 나와있는 개발 프로세스가 많이 있지만 실제로 디바이스 드라이버 개발같은 포팅 과제에 대해서는 그대로 적용하기가 매끄럽지 못한 편입니다.

애플리케이션 프로그램이야 사용자의 요구사항 등을 정리해서 UML 같은 툴을 이용해서 코딩을 하기 전에 이미 구현에서 발생할 업무 Loss나 시행착오를 미연에 방지할 수 있지만 디바이스 드라이버 구현에는 UML같은 툴을 적용한다는게 업무 Load가 된다고 봅니다.

이미 하드웨어 벤더로부터 받은 칩 매뉴얼이나 레퍼런스 소스코드를 가지고 개발을 하는 것이기 때문에 저런 과정이 필요가 없겠지요.

디바이스 드라이버 개발을 하면서 발생하는 여러가지 시행착오도 기존에 개발된 know-how를 전수받아 코딩 구현 이전에 방지할 수 있다면 좋다는 생각을 합니다만 그때그때 달라지는 H/W spec과 OS에 대해서는 기존의 know-how가 그대로 전수되기는 어렵다고 봅니다.

그래서 생각한 것이 H/W spec과 OS가 달라지더라도 기존에 개발된 디바이스 드라이버 개발과정에서 얻은 Know-how를 가지고 어떻게 다음 과제에도 써먹을 수 있을까? 라는 생각을 합니다.

신입사원이 왔을 경우 내가 했던 시행착오를 그대로 똑같이 되풀이하지 않게끔 (물론 기존 과제의 H/W spec이나 OS가 다른 경우로 전제합니다.) 하려면 나의 개발 경험을 비추었을때 어떤식으로 사전에 어떤 것을 유심히 보고 준비해야 하는지 꼭 갖춰야 할 것이 뭔지 개발자 여러분들의 경험에서 우러나온 의견을 듣고 싶습니다.

프로세스 개선하는 작업이 만만치 않네요.

creativeidler의 이미지

Quote:

신입사원이 왔을 경우 내가 했던 시행착오를 그대로 똑같이 되풀이하지 않게끔 (물론 기존 과제의 H/W spec이나 OS가 다른 경우로 전제합니다.) 하려면 나의 개발 경험을 비추었을때 어떤식으로 사전에 어떤 것을 유심히 보고 준비해야 하는지 꼭 갖춰야 할 것이 뭔지 개발자 여러분들의 경험에서 우러나온 의견을 듣고 싶습니다.

이 목적을 위해 페어 프로그래밍보다 더 나은 방법은 많지 않을 것입니다.
lovewar의 이미지

저도 이런 고민을 많이 합니다.

제가 하는 일은 소스 코드를 분석하여 역공학적 도구와 테스팅 도구 그리고 품질에 관한 도구를 만드는 일을 합니다.

각 언어를 분석하는데는 그만한 언어의 깊이가 필요합니다. 그런 부분에 대한 이해를 하지 않고 접근하기가 애매합니다. 그렇다고 언어를 분석하는 시간을 따로 둘수 있는 형편이 아니기에,

현재 채택하고 있는 방법이 개략에서 상세하게 란 표현을 합니다. 그 개략으로 구현을 하고 좀더 상세하게 표현을 하는 것입니다.

여기는 장단점이 있습니다. 개략일때는 그 흐름을 판단하기 좋습니다. 하지만 상세해지면, 처음 보는 이는 이해하기 힘들다는 단점이 있습니다.

그래서 일의 방법을 UML의 use case로 일의 단위를 분리합니다. 이것으로 타인들을 이해시킵니다. 또는 초보자를 이해시킵니다. 그리고 Sequence Diagram이나 Class Daigram으로 설계의 형태를 잡아줍니다. 이것을 기반으로 코딩을 하고나서 문제점은 다시 설계문서에 반영합니다.

점진적 기법이라 볼수 있습니다. 이것을 기반으로 후에 완전하게 설계를 하고 코딩을 할수 있게끔하고 싶은데, 잘 될지는 모르겠습니다. 단지 실패를 최소화하려는 고민의 일부라 생각합니다.

Quote:

그래서 생각한 것이 H/W spec과 OS가 달라지더라도 기존에 개발된 디바이스 드라이버 개발과정에서 얻은 Know-how를 가지고 어떻게 다음 과제에도 써먹을 수 있을까? 라는 생각을 합니다.

이 기법은 MDA 로 가능할것으로 보여집니다. 하지만 세부적인 부분은 불가하지 않을까도 생각합니다. 또한 Software product Line 이란 것이 있나봅니다. 자세히는 모르지만, MDA와 유사한 행태인것 같습니다. 간단하게, 메타 모델을 만들어서 그것을 언어나 플렛폼에 종속적으로 변경하는 작업을 하는 일렬의 행동을 하는 것 같습니다.

신입사원의 문제는 일정 교육이 필요할것 같습니다. 일을 시키기 위해서는 어쩔수 없지 않을까 생각합니다.
특히, 코딩의 경우는 누가 해줄 수 있는 상황이 아니고 개인이 고민한
만큼 얻는 경험의 산물로 봅니다.

그래서, 저는 일의 특정시점(주간이든, 일의 단위별로든)에서 코드를 보아줍니다. 경험을 되살려 어느 지점에서 막힐것이다 라는 것을 인식합니다. 그리고 그부분에서 어떻게 처리하고 있는지를 인지하고, 같이 고민을 합니다.

단시간에 하면 무리가 따르기때문에, "~을 하면 좋다"라는 강요아닌 강요를 합니다.

전 방법론이 이론으로 나온것이 아니라, 경험을 정리하는 과정에서 방법론들이 나온것이 아닐까 생각합니다.

다른 분들은 어떻게 해결하고 있는지 궁금하군요.

fromdj의 이미지

제 생각에 디바이스 드라이버는 최대한 간단해야 합니다.
개발 프로세스 즉 소프트웨어 엔지니어링의 목적은 제가 보기에
복잡한 SW 측면에서 그것을 어떻게 유지가능하고 효율적으로 작업
할수 있도록 하느냐에 대한 문제라고 생각합니다.
디바이스 드라이버를 제작하는데 있어서의 노하우를 생각한다면
WDM이나 리눅스는 서로 구조는 비슷하지만 , 코딩스타일과 규칙은
완전히 다릅니다. 그렇기 때문에 만약 코드의 재사용을 높이려면
c++을 이용해 최대한 추상화를 이루는 정도에서 타협점을 찾고,
아케텍쳐 종석적인 녀석들은 별도의 라이브러리들을 구축해서
작업하는게 좋지 않을까 생각됩니다.

^^ be cool ~
http://fromdj.pe.kr

LispM의 이미지

프로세스에 리뷰를 두세요. 주어진 일의 분량(짧을 수록 좋음)을 마칠 때마다 2-3명의 엔지니어가 같이 참여해서 문제점, 해결책, 개선방향등을 공유하기만 해도 도움이 될겁니다. 물론, 더 철저한 프로세스가 있으면 좋겠지만 대기업이 아니고 중소업체라면 이방법이 제일 효과적일 겁니다.

http://lisp.or.kr http://lisp.kldp.org - 한국 리습 사용자 모임

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.