CS 강의 - 소프트웨어 설계 정리

alsk9624·2024년 7월 26일
0

TIL

목록 보기
15/21

소프트웨어 설계

자료형?
: 자료의 유형

  • 파이썬 자료형 종류
    - 정수 (integer): ….-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5………
    - 실수 (float): 10000000, -68417.1253, 3.14159265….., ……..
    - 논리형 (boolean): True, False
    - 문자열 (string): “hello AI7기 여러분 모두 파이팅이예요!”
    - 리스트 (list): list = [1, 2, 3, 4, 5, 5, 5, 5], list = [’A’, ‘B’, ‘C’, “C”, “C” ]
    - 튜플 (tuple): tuple = (1, 2, 3, 3, 3), tuple = (’a’, ‘b’, ‘c’, ‘c’, ‘c’)
    - 튜플은 리스트와는 달리 값 변경이 안됨!
    - 딕셔너리 (dictionary): dict = { “key1”: 2024, “key2”: “안녕?”, “key3”: “안녕?” }
    값의 중복은 상관없지만 키는 중복되면 안됨!
    - 세트 (set): set = { “중복은”, “안되는”, “세트” }
    중복을 허용하지 않는 단호한 세트!!

자료구조

1. 선형구조: 자료들 간의 관계가 1:1로 나열되어 있는 것
- 배열과 리스트 차이
		

		- 배열: 메모리상에서 오른쪽에 잇는 데이터 가져와 < 가져옴
		- 리스트: 메모리상에서 오른쪽에 잇는 데이터 가져와 <못 가져옴

		- 메모리 위치가 순차적 - 배열
		- 논리적인 구조가 연결되어 있는 것 - 리스트

		- 스택: 선입후출(나중에 들어온 게 먼저 나간다)

- 큐: 선입선출..


2. 비선형 구조
: 자료들 간에 관계가 1:N로 나열되어 있는 것을 의미

 - 그래프
 - 트리
 
  • 이진트리

    • 이진트리: 각 부모노드의 자식노드가 최대 2개인 트리
    • 포화이진트리: 이진트리에서 모든 부모가 2개의 자식노드를 갖는 이진트리
    • 완전이진트리: 이진트리에서 거의 모든 노드가 채워져 있으며 가능한한 제일 왼쪽부터 채워져 있는 이진트리
    • 편향이진트리: 한쪽으로만 자식을 갖는 트리

프로그래밍

- 컴파일러: 고급v프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램.

가장 큰 특징으로는 소스코드 전체를 분석하고 그 다음 기계어로 번역 후 실행 (씨언어, 자바는 컴파일러로 의해 기계어로 번역되고 실행됨)
- 인터프리터: 컴파일러와 마찬가지로 고급 프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램.. 컴파일러와 가장 큰 차이점은 한줄씩 소스코드를 번역하고 실행한다는 점(파이썬, 자바스크립트와 같은 언어들이 언터프리터에 의해 번역 및 실행됨)

  • 메모리는 4가지의 영역으로 구분됨

    	-코드영역
    	-데이터영역
    	-힙영역(heap)
    	-스택영역(stack)

객체지향

: 객체(instance) 란 현실세계에 있는 어떤 대상을 추상화한 것을 의미.
동물도 가능.
: 내가 표현해나가고자 하는 것(생각과 감정도 가능)을 객체로 표현 가능

  • 클래스
    :객체를 생성하기 위해 어떤 속성과 방법의 집합을 추상화하여 표현한 것.
    클래스 안에는 함수, 변수 존재함
    ex) 수강생 class 안에는
    함수: til, 공부 열심히 하기, 튜터한테 물어보기, 등
    변수: 점수

!! 클래스 = 내가 만들고자 하는 객체에 대한 설계도

  • 상속: 내가 부모 클래스를 갖는 것을 이야기함

ex) 동물 클래스 안에는?
1. 밥먹기 함수
2. 숨쉬기 함수
-> * 세부적으로 새 클래스/말 클래스 : 새랑 말은 숨쉬기랑 밥먹기를 할수 있기 때문에 동물 클래스 안에 있는 함수들을 중복구현 할 필요 없음
+새 클래스 안에 날기/ 말 클래스 안에는 뛰기 넣기

말 class가 동물 class를 상속 받으면 동물 class 안에 있는 것을 모두 사용할 수있음.
단 부모는 자식 클래스를 사용할 수 없음!! 
  • 오버라이딩(덮어쓴다)
    상속받은 클래스에서 어떤 기능을 재정의하는 것

ex) 동물 class 걷기 함수/닭 클래스 걷기 함수
걷는 건 같지만 네 발 달린 동물이 걷는 모습이랑 닭이 걷는 모습이 다름

  • 동물 클래스로 걷기 - 네발로 걷기
    닭 클래스로 걷기 - 두 발로 걷기
    <이름은 같은데 각 클래스 안에서 기능을 다시 재정의한 것>
  • 오버로딩
    함수의 이름은 같으나 매개변수를 다르게 설정하여 사용목적에 따라 다르게 불러오는 것을 의미

소프트웨어 개발 방법론

  1. 폭포수 방법론
    하향식 방법
    계획>설계>개발>시험>유지보수
    순차적으로 진행, 소프트웨어 개발생명 주기가 굉장히 김
    매우 큰 규모의 프로젝트에 적합하다.

📌폭포수 방법론 장점

수직적으로 진행되기에 각 과정에 대한 이해가 용이 
프로세스가 같고 순서가 정해져있기 때문에 팀의 규모에 상관없이 따르기 쉬움
개발 주기가 이미 정해져 있어서 팀이 새로운 프로젝트를 안정적으로 시작할 수 있음
프로젝트 요구사항이 확정돼 있기 때문에, 프로젝트를 실행하기가 수월하며 개발 목표를 자주 변경하지 않아도 됨.

📌폭포수 방법론 단점

수직적으로 진행되기 때문에 개발 도중에 요구사항이 변경되었을 경우,
추가적인 비용과 시간이 들게 됨
이미 진행된 작업에 대해서는 변경 및 수정이 어렵다
개발 속도가 느리고 유연성이 떨어짐
테스팅 단계에 이르러서 이슈가 발견되곤 함
  1. 애자일 방법론
    반복적이고 점진적으로 개발
    계획>설계>개발>시험>유지보수를 순차적으로 진행
    소프트웨어 개발생명주기가 굉장히 짧아서 여러번 반복하며 점진적으로 개발
    이해관계자의 피드백을 빠르게 반영할 수 있지만 개발 계획을 세우기 어려울 수 있음.
    절차와 도구보다 고객과의 소통에 초점을 맞춤

📌애자일 방법론 장점

이해관계자의 피드백을 빠르게 반영할 수 있음
개발 방법이 빠르고도 유연함
여러 소규모 팀들이 개발 과정성의 여러 과제를 각각 할당받아 처리할 수 있음

📌애자일 방법론 단점

개발 계획을 세우기 어려울 수 있음
고객의 수많은 변경사항을 검토해야 하는 번거로움이 발생할 수 있음
팀원들이 다양한 시간대의 지역에 흩어져 있음에도 잘 조직되지 않거나 자립성이 없는 경우, 애자일 방법론을 선택하면 문제가 발생할 수 있음

- 디자인 패턴

: 소프트웨어를 설계 및 구현할 때 어떠한 공통된 구조를 띄는 형태

ex) 아파트하면 생각하는 형태, 초등학교하면 생각나는 이미지(패턴) 이런 것들이 디자인 패턴임

  • MTV 패턴
    백엔드랑 프론트엔드 이 형태로 구현할 것~
    python 기반의 웹 구현을 위한 프레임워크인 장고가 mtv 디자인 패턴을 지향함.
    m은 model을 의미하고 db에 데이터를 적재하고 테이블 정의를 담당
    t는 template을 의미하며 사용자에게 보여지는 화면 의미
    v는 view를 의미하며 요청에 따라 필요한 로직을 수행하는 역할 담당

- 형상관리

소프트웨어의 변경사항을 추적하고 통제하기 위한 작업

- v&v 검증과 확인

 소프트웨어 완성도 및 신뢰도 검증 및 확인하는 작업

우리의 의도대로 동작하는지/충분한 성능을 나타내는지/보안이슈는 없는지 확인 및 검증하는 작업

  • 검증(verification)
    개발자 중심에서 제품이 요구사항에 만족하게 구현되었는지에 대해 검증하는 작업
    ex) 10개까지 고를 수 있게 만드세요-> 만들면 검증에서 통과

  • 확인 (validation)
    사용자 중심에서 제품이 사용감에 맞게 구현되었는지 대해 확인하는 작업
    ex) 나는 햄버거 20개 고르고 싶은데 왜 안 됨?-> 확인에서 통과되지 못함

test

test 단위
단위-통합-시스템-인수 테스트 순차적으로 실행

  • unit test (단위시험)
    가장 작은 단위의 테스트로 모듈 중 가장 작은 기능 테스트
  • 통합 시험(intergration test)
    함수간, 클래스 간 모듈간 등 어떤 기능이 합쳐져서 잘 동작하는지 test
  • 시스템시험(system test)
    실제 적용하려는 하드웨어나 어떤 시스템에 개발한 소프트웨어를 탑재한 뒤 테스트
  • acceptance test(인수 시험)
    출시 및 배포전 최종 test
    * 상황에 따라 다름 추가될수도, 바뀔 수도 있다~

test 종류
1. 정적 테스트
:소프트웨어를 구동하지 않고 test 하는 방법
동료 검토/코드리뷰/기술검토
2. 동적 테스트
: 소프트웨어를 구동하며 test를 하는 방법

  • 블랙박스테스트
    소프트웨어의 작동원리를 모르는 상태에서 진행하는 테스트
    결과물들이 요구사항과 일치하는지 알아보기 위한 test
  • 화이트박스테스트
    소프트웨어의 작동 원리를 보며 진행되는 test
    소프트웨어가 의도된대로 동작하는지 알아보기 위한 test
profile
앞길에 럭키★비키만 있길 ,,,🍀🫧

0개의 댓글