2016년 9월 19일 월요일
[SW공학 동영상 27화] Java가 C보다 안전한가?
데이비드가 C 코딩 표준을 개발한 후, Java 코딩 표준도 개발하고 보니 Java가 더 안정적인 언어라는 예상과 달리 C 규칙은 100개인데 반해 Java 규칙은 170개가 넘었습니다. 단지 규칙이 더 많다는 이유로 Java가 더 불안한 언어는 아니라는 논쟁의 결론을 얻기 위해 더 심층적인 분석을 시도했습니다.
규칙에는 심각도 미터가 있는데 심각도 수치가 높을수록 보안 규칙의 중요도도 높습니다. 그런데 심각도가 높은 규칙의 수가 C와 Java에서 거의 비슷합니다. 사실 C에는 Java에 없는 종류의 취약점이 많기 때문에 이런 종류의 C 규칙이 Java에서 나타나서는 안 됩니다. 따라서 그 다음에는 심각도가 높은 규칙을 놓고 해당 규칙의 심각도가 높은 이유에 대해 다시 한번 검토했습니다. 심각도가 높은 규칙을 각 언어당 4 범주로 분류했습니다. C에서 가장 비중이 큰 범주는 메모리 변형이었고 Java에서는 내부 권한 상승이었습니다.
C와 Java의 차이점은 Java에는 애플릿과 같은 것들을 보호하기 위해 사용하는 고유의 권한 시스템이 있다는 점입니다. 익숙하거나 신뢰할 수 있는 코드가 없는 컴퓨터에서도 Java 애플릿을 실행할 수 있습니다. Java 애플릿은 Java의 내부 권한 시스템을 통해 보안을 유지합니다. C의 경우에는 내부 권한 시스템이 없습니다. 따라서 C 프로그램을 작성한 사람이 아닌 다른 사람이 해당 프로그램을 실행해도, 그 프로그램은 무엇이든 수행할 수 있습니다.
대부분의 운영체제는 외부 권한 시스템을 제공합니다. 프로그램을 실행하려 하거나 어떤 작업을 실행하려 하면 컴퓨터 팝업 창이 뜨고 암호를 입력하라고 합니다. 윈도우, 리눅스 등의 시스템에는 이러한 권한 시스템이 있지만 이들은 프로그래밍 언어가 아닙니다.
외부 권한 시스템에 대한 규칙은 C와 Java에 모두 적용됩니다. 그러나 C는 그 비중이 아주 작습니다. 이러한 규칙이 특별히 POSIX(Portable Operating System Interface)를 처리하는 C 보안 코딩 표준의 일부라는 이유만으로 이 규칙을 Java에 넣지는 않았습니다. Java의 경우, 내부 권한 시스템에 해당하는 규칙이 가장 큰 부분을 차지합니다.
두 언어 모두 권한 시스템에 대한 규칙을 갖고 있습니다. 이러한 권한 시스템을 무시하고 넘어간다 해도, 또 다른 규칙이 존재하는 두 번째 영역이 존재합니다. 하지만 두번째 영역부터는 심각도가 높은 규칙이 C에 비해 Java에서 갑자기 줄어듭니다. 즉 권한 시스템과 상호작용하는 프로그램을 실행하지 않는다면 권한 시스템 규칙에 대해서는 걱정할 필요가 없다는 뜻입니다. 걱정해야 할 심각도 규칙이 줄어든다는 뜻이지요.
최종 결론은 Java의 내부 권한 시스템을 사용하지 않는다면, 즉, Java 데스크톱 애플리케이션이나 모바일 애플리케이션 또는 애플릿을 실행한다면, 권한 규칙에 대해 걱정할 필요가 없다는 뜻입니다. 또한 심각도가 높은 규칙의 양도 C에서보다 훨씬 줄어든다는 뜻입니다.
2016년 9월 13일 화요일
정량적 SW공학 데이터관리
[ 사업내용 ]
SW공학수준 조사
SW공학수준 조사를 위한 표준측정 지표 개선
- SW기업의 SW공학기술 적용 수준을 파악하기 위해 표준 측정지표 개선을 통한 조사항목 도출
- SW공학수준에 따른 성과를 프로젝트의 성공 수준이 아니라 조직의 성과와 연계할 수 있는 지표 도출
SW공학수준 조사 대상업체 선정
- 전체 응답기업 수 : 국내 SW기업 220개 이상(전년대비 10% 증가)
SW공학수준 조사를 위한 설문조사
- SW기업의 SW공학수준 조사를 위한 설문조사 수행
SW공학수준조사 결과 분석
- 지표를 기반으로 전체/분류별 기업에 대한 설문결과 분석
- 각 지표의 의미 및 다른 지표와의 관계를 정의하고, 결과 분석 시 각 지표 및 문항과의 크로스 분석을 통해 결과분석
- 전체 산업 및 산업군별, 규모별, 인증여부별, 기업환경 등에 대하여 프로세스(Process), 인력(People), 기술(Technology) 각각의 측면에서 SW기업 수준 비교
- SW기업의 SW공학 수준이 실제 프로젝트 수행 시 미치는 연관관계 등을 파악하고, 향후 개선 방안을 도출
- 분류별 조사대상에 대한 현황, 문제점 및 핵심 개선방향 도출
관련지침개발 - 클라우드 기반 SW개발연구
클라우드 기반 SW개발연구는 중소SW기업 웹서비스 개발자들의 역량 향상을 위해, 클라우드 컴퓨팅 기술의 확산과 보급을 목적으로 개발 기술들과 예제를 소개하고 실습 교육을 통하여 클라우드 환경에서의 웹서비스 개발을 쉽게 따라할 수 있는 가이드를 제공하는 연구입니다.

2016년 9월 12일 월요일
품질이나 테스팅에 대한 전문적인 조직 출현 배경
Q. 품질이나 테스팅에 대한 전문적인 조직이 왜 생겨났는지 배경을 말씀해주셨네요. 그렇다면, 해당 인력을 어떻게 투입해야 하는지 말씀해주시죠.
해당 인력을 어느 정도 규모로 투입해야 한다는 것을 정해 놓는 것은 매우 어려운 부분입니다. 개발 프로젝트의 성격과 규모, 형태를 감안해 정해야 하기 때문이죠. 투입되는 인력의 경험이나 지식도 매우 중요한 부분 중에 하나 입니다. 개발 프로젝트에 걸려있는 전체적인 것을 점검해보면서 결정해야 하는 것이지요.
Q. 개발 프로젝트에 따라 다르게 투입하더라도 체크할 수 있는 부분들이 있을 것 같은데요?
맞습니다. 무작정 투입하면 전문 조직이 유지되기 어렵겠지요. 그렇다고 투입 규모를 일정하게 넣을 수도 없고요. 대부분 오랜 경험을 가진 전문가에 의존할 수 밖에 없는데 이것도 전적으로 따르기는 회사의 부담도 생각을 해야겠지요. 그런데, 경험 많은 전문가에 의존하는 방법이 주먹구구식 방법은 아닙니다. 소프트웨어공학에서도 제시하는 공수산정 방식의 중요한 방법 중에 하나 입니다.
방금 말씀드린 것처럼 공수산정을 위해서는 개발 프로젝트의 특성을 잘 파악하는 것도 중요하지만 회사에서 그동안 어떻게 투입했는지 경험치를 축적하는 것이 매우 중요한 포인트입니다. 먼저, 개발 프로젝트의 특성을 파악하는 것부터 하면, 표2와 같이 크게 구분할 수 있는 것부터 정리를 하고, 세부적인 항목으로 구분하면서 정리해 나가도록 해야 합니다. 이 때, 우리 회사와 비슷한 규모나 개발을 하는 다른 회사와 크게 차이가 나지 않도록 되도록 많은 정보를 수집하는 것이 좋습니다.
<표2> SI와 솔루션 개발 프로젝트의 구분
피드 구독하기:
글
(
Atom
)



