728x90
반응형

 

 

 

테스팅의 필요성과 품질에 관한 이야기를 저번에 했는데

 

테스트 품질관련 이야기를하면서 소프트웨어의 요구사항 (기능적, 비기능적) 에 대해서 다음에 포스팅 한다고 했다.

 

개인공부를 하던 중 기능적, 비기능적 뿐만아니라 도메인 요구사항도 있길래 몇글자 적어보려 한다.

 

기본적으로 소프트웨어 요구사항과 특성에는 뭐가 있을까?

 

총 5가지 이다. 사용성, 효율성, 신뢰성, 이식성 , 유지보수성 이다.

 

사용자가 소프트웨어를 얼마나 쉽게 사용할수 있는지 또 소프트웨어의 효율은 어떠한지, 특정 기능에 대해 실패 확률은 얼

 

마인지, 이 소프트웨어가 다양한 환경에서도 동작하는지, 이 소프트웨어를 얼마나 오래 쓸건지에 대해 특성을 정리해 보았

 

다.

<<소프트웨어 요구사항과 특성>>

 

1.     사용성(usability)- 사용자가 소프트웨어를 어떻게 쉽게 사용할 수 있을지가 기술되는 요구 사항

 

2.     효율성(efficiency)- 소프트웨어는 빠를수록, 메모리를 적게 사용할수록 좋다. 이에 대한 제약 사항을 정의

 

3.     신뢰성(reliability) –특정한 기능을 실행할 때 실패할 가능성

 

4.     이식성(portability)- 소프트웨어가 다양한 플랫폼에서 작동

 

5.     유지 보수성(maintainability)- 소프트웨어의 수정, 개선을 용이하게 하는 능력

 

 

소프트웨어 시스템의 요구사항은 크게 기능적(functional), 비기능적(non-functional) 또는 도메인 (domain) 요구사항으로 분류될 수 있다.

 

 

      << 기능적 요구사항(Functional requirements)>>

 

- 시스템이 제공하는 기능 또는 서비스에 대한 기술

 

- 기능적 사용자 요구사항은 시스템 동작사항에 대한 추상적 기술이지만, 기능적 시스템 요구사항은 시스템 서비스에 대한 상세한 

기술이어야한다.

 

- 특정 입력에 대해 시스템이 어떻게 반응해야 하는지에 대한 기술

 

- 특정 상황에 대해 시스템이 어떻게 동작해야 하는지에 대한 기술 ( 시스템이 하지 말아야할 것 에 대해 기술하는 경우도 있음)

 

- 소프트웨어 종류, 예상되는 사용자, 소프트웨어가 사용되는 시스템의 종류에 좌우

 

   <<비기능적 요구사항 (Non-functional requirements)>>

 

-       시스템 속성이나 시스템에 의해 제공되는 서비스나 기능에 대한 제약사항에 대해 정의 한다.

 

-       신뢰도, 반응 시간, 저장소 요구사항 등 대부분 개별적 기능이 아닌 전체적 모습에 관한 요구 ( 프로세스 요구사항이 있을 수도 있다.)

 

   <<도메인 요구사항 ( Domain requirements)>>

 

-       응용 도메인 으로부터 생기는 요구사항으로 특정 도메인의 용어나 개념이 반영되어 시스템의 특성에 영향을 준다.

 

-       새로운 기능적 요구사항 또는 기존의 요구사항에 대한 제약사항이 되거나 특별한 계산식을 정의하는 것 등이 될 수 잇다.

 

-       도메인의 요구사항이 만족되지 않으면 시스템이 쓸모 없게 된다.

 

-       문제점 : 해당 응용 도메인의 언어로 표현되기 때문에 시스템을 개발하는 소프트웨어 공학자가 이해하기 어렵다. 도메인 전문가에게는 분명한 부분이기 때문에 생략해버린 정보를 개발자가 알 수 없다.

도메인 요구사항은 글을 작성하고 있는 나도 학교에서 배운 기억이 없는것 같다.( 내가 수업시간에 졸았나?)

 

정리하자면, 기능적 요구사항은 단어의 뜻대로 사용자가 원하는 기능을 말한다. 사용자는 그 기능을 시스템을 통해 제공받기를 원하며, 시스

 

템은 사용자에게 필요한 기능을 제공해줘야 한다.

 

기능적 요구사항이 소프트웨어가 제공하는 기능이라면, 비기능적 요구 사항은 수행 가능한 환경, 품질 , 제약 사항이다.

 

 

 

 

 

 

 

 

 

 

 

 

*피드백 환영 합니다* 

728x90
반응형
728x90
반응형

 

 

 

소프트웨어가 기대한대로 동작하지 않는다면 어떻게 될까?

 

소프트웨어의 셀 수 없이 많은 특징 과 로직에 의해 방대한 양의 문제가 발생될 것이다.

 

그래서 소프트웨어개발 생명주기에도 "테스트" 단계가 들어가는 것이고,

 

또 이를 "유지 ,보수" 하는데에 많은 시간과 기술력을 투자하는 것이다.

 

소프트웨어의 개발, 유지보수, 운영시 테스팅의 역할

 

-       시스템이나 문서에 대한 엄격한 테스팅은 운영중 발생할 수 있는 문제 감소

 

-       소프트웨어 시스템의 품질을 높이는데 기여

 

-       계약 또는 법적 요구사항이나 특정한 산업 표준을 만족 시키기 위해 필요

 

이렇게 테스트 되어진 소프트웨어는 품질에대해 확신을 가질 수 있게된다.

 

"테스트 = 품질" 

 

결함이 극소수 이거나, 혹은 테스트 도중 결함을 확인하여 수정된 소프트웨어는 그만큼 품질에 확신이 들 것이다.

 

테스팅과 품질

 

-       기능적, 비기능적 소프트웨어 요구사항과 특성에 관련된 해당 소프트웨어의 품질을 , 발견된 결함(데이터)에 근거하여 측정 가능

 

-       테스팅으로 발견된 결함이 극소수이거나 없다면 소프트웨어 품질에 대해 확신을 가짐

 

-       올바르게 디자인된 테스트는 시스템의 전반적인 리스크 수준을 감소시킴

 

-       다른 프로젝트에서 발견된 결함의 근본 원인에 대한 이해를 바탕으로, 프로세스 개선, 동일 결함의 재발이 방지될 수 있어 , 차후 시스템의 품질 개선

(품질의 부연설명으로 기능적, 비기능적 소프트웨어 요구사항에 대해서는 다음에 포스팅 하려고한다.)

 

S/W 나 H/W , 올바르게 테스팅 하려면 기간을 어느정도로 측정 해야할까?

 

 

테스팅 기간

 

1. 리스크 수준을 고려하며, 비즈니스 제품 및 프로젝트 리스크, 시간과 비용 같은 프로젝트 제약사항을 고려해야한다.

 

2. 테스트된 소프트웨어나 시스템의 다음 개발로의 릴리즈 결정 또는 고객에게 넘겨주는 릴리즈 결정을 개발 프로젝트 관련자들이 내릴 수 

 

있도록 충분한 정보를 제공한다.

 

( 여기서, 릴리즈란 . 각 소프트웨어에는 우리말로 판(Version, Release)이라고 부르는 버전표시가 되는데, 이 버전이라는 것은 이 프로그램이 

 

얼마나 개선되었는가를 뜻하는 표시입니다. )

 

프로젝트 리스크의 수준을 고려하고, 제품 품질에 관해 조금만 더 신경을 쓴다면

 

기획 및 설계 단계에서 부터 목소리가 커질일은 없을 것이다.

 

여러 직무를 담당하고 있는 프로젝트 팀원끼리 좋은 커뮤니케이션을 형성 하고, 프로젝트를 진행할 수 있을 것이다.

 

 

 

 

 

 

 

 

 

*피드백은 언제나 힘이 됩니다.*

728x90
반응형
728x90
반응형

애자일 소프트웨어 개발(애자일 개발 프로세스)

(Agile software development)

 

 

애자일 방법론은 소프트웨어 개발 방법에 있어 아무런 계획이 없는 개발 방법과 

 

계획이 지나치게 많은 개발 방법들 사이에서 "타협점"을 찾고자 하는 방법론이다.

 

 

 

less doucment - oriented 즉, 문서를 통한 개발방법이 아닌

 

cord - oriented 실질적인 코딩을 통한 방법론이다

 

과거의 개발 프로세스와 다르게 앞을 예측하지 않고, 일정한 주기를 가지고

 

끊임없이 프로토 타입을 만들어 낸다.

 

그때 그때 필요한 요구를 더하고 수정하여 하나의 소프트웨어를 개발한다.

 

 

-개발배경-

 

 

"소프트웨어 개발 자체가 다른 공학적인 프로세스와 큰 차이가 있음을 인지한 것"

 

소프트웨어는 유동적이고 개방적이다. 요구사항 변경에 따른 작업량은 예측 불가하다.

 

객체지향적인 기술을 기반으로 하고 제한된 시간과 비용 안에서 정보는 불완전하고,

 

예측은 불가능하다는 전제.

 

 

그 전제아래에 합리적인 답을 내는 것이 애자일 개발 프로세스 이다. 

 

*피드백 환영입니다*

728x90
반응형
728x90
반응형

SDLC(Software Development Life Cycle)

 

 

 

 

 

"시스템 엔지니니어링, 정보 시스템 또는 소프트웨어 공학에서 정보 시스템을 계획, 개발 , 시험, 채용 하는 과정을 뜻하는 용어"

 

 

 

 

소프트웨어 개발 생명 주기는 하드웨어부터 소프트웨어 까지 넓은 범위에 적용 가능

 

 

 

대게 요구사항 분석 -> 설계 -> 개발 -> 테스트 -> 운영(유지보수) 단계로 구성되어 있다.

 

 

 

 

 

 

테스트 엔지니어는 테스트를 최종적으로 결함이 없는 제품이 나와야 좋겠지만

 

 

 

 

 

 

"이 과정에서 SDLC 에 관한 각각의 파트들을 이해하고 있다면 실 업무에서 훨씬 더 유용하게 테스팅을 진행할 수 있다."

 

 

 

 

 

 

*피드백 환영합니다*

728x90
반응형
728x90
반응형

 

 

 

강사님 구글정보 나의생각

 

docker 특강(hub.docker.com)

 

docker 란 무엇인가?

 

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

 

처음 강사님께 "여러분이 생각하시는 그 컨테이너가 맞습니다" 라고 했을때는 

 

긴가민가 했지만 google에서 검색을 해보니 그말이 진짜 맞았다.

 

말 그대로 배에 네모난 화물 수송용 박스이다. 각각의 컨테이너에는 서로 각기다른 다양한 화물을 적재할 수 있고

 

규격화 되어 있지만 컨테이너를 통해 손쉽게 옮길 수 있다.

 

서버에서 이야기하는 컨테이너 또한 다양한 프로그램, 실행환경을 컨테이너로 추상화 하고 동일한 인터페이스를 제공하여

 

프로그램의 배포 및 관리를 단순하게 하는 것이다.

 

그 어떤 프로그램이라도 컨테이너로 추상화 하여 어디든지 실행 할 수 있게 하는 것

 

그것이 도커(docker)라고 합니다.

 

구글은 모든 서비스들이 컨테이너로 동작하고 매주 20억 개 의 컨테이너를 구동한다고 합니다.

 

예전에 인터넷을 정보의 바다라고 했는데 그말이 대학생이 되어 소프트웨어학과에서 공부를하다보니 

 

이제서야 제대로 이해가 되네요.

 

Docker 는 컨테이너를 제공하는 소프트웨어 기술입니다.

 

윈도우 및 리눅스 에서 운영체제 수준의 가상화를 추상화 하고 자동화 하는 추가 계층을 제공합니다.

 

cgroups 및 커널 네임 스페이스와 같은 Linux 커널의 리소스 격리기능과 OverlayFs 및 기타와 같은 공용 가능 파일 시스템을

 

사용하여 독립적인 컨테이너를 단일 Linux 인스턴스 내에서 실행할 수 있게하여 가상컴퓨터를 시작하고 유지관리하는 오버헤드 입니다.

 

리눅스 커널의 네임 스페이스 지원은 주로 프로세스 트리, 네트워크 , 사용자 ID 및 마운트 된 파일 시스템을 포함하여 응용 프로그램의

 

운영 환경에 대한 뷰를 분리 하는 반면 커널의 cgroup 은 CPU , 메모리 , 블록 ,I/O , 네트워크 버전으로 되어 있습니다.

 

Docker는 Iibvirt, LXC(리눅스 컨테이너s) 및 systemd-nspawn을 통해 추상화 된 가상화 인터페이스를 사용하는 것 이외에도 Linux 커널이

 

제공하는 가상화 기능을 직접 사용하는 자체 방식으로 libcontainer 라이브러리를 포함합니다.

 

 

 

액션이 Docker 기본 이미지에 대해 수행되면 유니온 파일 시스템 레이어가 생성되고 문서화 되므로 각 레이어는 액션을 

 

다시 생성하는 방법을 완벽하게 설명한다.

 

이 전략을 사용하면 레이어 업데이트만 전파해야하므로 Docker의 경량이미지를 사용할 수 있다.

 

Docker는 다른 인터페이스를 사용하여 Linux 커널 가상화 기능에 액세스 할 수 있다.

 

Docker 는 높은 수준의 API 를 구현하여 프로세스를 독립적으로 실행하는 경량 컨테이너를 제공한다.

 

Docker 컨테이너는 Linux 커널 (주로 cgroup 및 네임 스페이스) 에서 제공하는 기능을 기반으로 구축되었으므로 가상 시스템과 달리

 

별동의 운영체제게 필요하거나 포함되지 않다.

 

그래서 libcontainer 라이브러리를 직접 사용하거나 libvirt, LXC (Linux Containers) 또는 systemd-nspawn을 통해 간접적으로 Linux 커널

 

의 가상화 기능에 액세스합니다.

 

그리고 Docker 컨테이너는 매우 가볍기 때문에 단일 서버 또는 가상 컴퓨터에서 여러 컨테이너를 동시에 실행할 수 있다.

 

Docker 를 사용하여 컨테이너를 만들고 관리하면 여러 응용 프로그램 , 작업자 작업 및 기타 프로세스가 단일 실제 컴퓨터 또는 여러 가상

 

컴퓨터에서 자동으로 실행될 수 있으므로 고도로 분산 된 시스템을 간단하게 만들 수 있다.

 

Docker는 작업 또는 작업 부하 큐 및 기타 분산 시스템의 생성 및 운영을 단순화 한다.

 

그리고 다음은 강의 내용입니다.

 

마이크로서비스 , 클라우드 ,등등

 

한 해가 바뀔때마다 트렌드가 바뀌고... IT가 변화한다.

 

4차 산업혁명(디지털 디스트럽션)

 

이 부분은 저번 공개SW대회에서도 들은 이야기 이다.

 

앞으로 오픈소스와 같이 더 쉽고 더 간편하게 그리고 더 많이 담을 수 있는 것들이

 

4차 산업혁명의 키워드 이자 나아갈 방향인 것 같다.

 

 

DevOps(디벨로퍼팀과 오퍼레이션팀이 같이있다) , Microservices , Containers , Cloud

 

요즘은 에자일 개발 방법론을 함

 

요즘 실무에 관해서는 에자일 방법론에 대해서 설명해 주셨다.

 

 

hub.docker.com 에 가면 도커에 있는 모든 이미지를 다운받을 수 있다.

 

 

why docker is hot - its simple , devs love it

 

왜 도커가 핫하고 지금 모든 관심이 있는지는 간단하다!

 

쉽고~ 개발자들이 좋아하니까!

 

Dev/Test of Legacy Apps

 

New App Dev

 

Code Agility, CI/CD pipeline, DevOps

 

Adoption of Open Source(새로운 기술을 접할때 굉장히 빠르게 접근함)

 

Microservices & Cloud Native Apps

 

 

 

IT 필드에서 도커가 핫한 기술임 (컨테이너 , 도커) 관심을 가지고 

공부를 해볼 것!!

 

마지막으로 IT계열로 취직을 하거나 관심이 있다면 Docker가 핫한 기술이니 관심을 가지라는 말씀으로 

 

끝을 내주셧다.

 

그래서 집에오자마자 노트북을 키고 Dokcer에대해 원리와 기본에대해서 잠시 공부를 해 보았다.

 

나아가 Docker로 어떤 프로그램을 설치할 지는 아직 정해지지 않았지만 Docker로 프로그램을 설치해서

 

써보도록 해보겠다.

 

 

728x90
반응형

+ Recent posts