11주차 소프트웨어 공학: 구현 및 테스트

01. 프로그래밍 언어의 역사

  1. 포트란 (FORTRAN)

    • FORmula TRANslation
    • IBM이 우주항공 분야에서 사용하기 위해 만든 초창기 고급 언어
  2. 베이직 (BASIC)

    • Beginner's All-purpose Symbolic Instruction Code
    • 교육용으로 만든 쉬운 문법의 언어
  3. C언어

    • 현재 가장 널리 쓰이는 명령형 언어
    • 거의 모든 환경에서 사용 가능
  4. C++

    • C 언어에 객체지향 개념 추가
  5. C#

    • 마이크로소프트가 닷넷 프레임워크 일부로 만든 객체지향 프로그래밍 언어
  6. 자바 (Java)

    • 선 마이크로시스템즈의 제임스 고슬링이 개발
    • JVM을 사용하여 플랫폼 독립적

02. 표준 코딩 규칙의 필요성

  1. 표준 코딩 규칙의 장점

    • 높은 가독성
    • 간결하고 명확한 코딩
    • 개발 시간 단축 및 유지보수 향상
  2. 코딩 규칙 예시

    • 나쁜 예와 좋은 예를 통해 규칙 준수 필요성 설명

03. 주요 표준 코딩 규칙

  1. 명칭 규칙

    • 명칭은 31자 이내
    • 변수명과 함수명은 별도로 구별
    • 특수 문자는 언더바(_)만 사용
    • 명칭 규칙: 매크로명과 상수명은 대문자, 변수명과 함수명은 소문자로 시작
    • 포인터 변수명은 앞에 'p'를 붙임
  2. 소스 형식 규칙

    • 소스 파일은 200줄 이내, 한 줄은 80자 이내
    • 함수의 크기는 70줄 이내
    • 여는 중괄호는 문장 끝, 닫는 중괄호는 문장 시작에 위치
  3. 주석 규칙

    • 주석 내용: 최초 작성자, 작성일, 목적, 개정 이력, 저작권
    • 메서드 정의 앞에 목적, 매개변수, 반환 값, 변경 이력을 주석으로 작성
  4. 변수 선언 및 자료형 규칙

    • 용도가 같은 변수는 한 줄에 작성
    • 배열 선언 시 요소 수 명시하거나 초기화
    • 배열 초기화 시 중괄호 적절히 사용
    • 지역 변수는 선언 시 초기화
    • 부호 없는 자료형은 끝에 'u'를 붙임
  5. 상수 규칙

    • 상수는 10진수, 16진수로 표현
    • 숫자 리터럴은 const 변수를 사용
  6. 수식 규칙

    • 단항 연산자는 피연산자와 붙여 씀
    • 이항 연산자는 전후에 공백을 넣음
    • 삼항 연산자는 맨 앞의 수식을 괄호로 묶음
  7. 문장 규칙

    • switch 문에서 case 문을 빠져나오기 위해 break 문 사용
    • goto 문 사용 자제
    • for 문을 제어하는 수식에 실수 값 사용 불허
    • if~else 문의 끝은 else 문으로 종료

04. 테스트

  1. 테스트 이해

    • 소프트웨어 테스트는 울타리를 치는 것과 같음 (사후약방문 방지)
    • 테스트는 결함이 있음을 보여줄 뿐, 결함이 없음을 증명할 수는 없음
  2. 테스트 분류

    • 확인 테스트: 개발자의 시각에서 테스트
    • 검증 테스트: 사용자의 요구 사항대로 만들었는지 테스트
  3. 사용 목적에 따른 테스트

    • 성능, 강건성, 스트레스, 부하, 보안, 안정성, 신뢰성, 사용성 테스트 등
  4. 프로그램 실행 여부에 따른 테스트

    • 정적 테스트: 프로그램 실행 없이 코드를 검토하며 오류를 찾는 방법
    • 동적 테스트: 프로그램을 실행하면서 오류를 찾는 방법

05. 소프트웨어 개발 단계에 따른 테스트

  1. 단위 테스트

    • 프로그램의 기본 단위인 모듈을 테스트
    • 단위 테스트 시 테스트 드라이버와 스텁 사용
  2. 통합 테스트

    • 단위 테스트가 끝난 모듈을 통합하여 발생할 수 있는 오류를 찾는 테스트
    • Big-bang 테스트, 하향식(top-down) 기법, 상향식(bottom-up) 기법
  3. 시스템 테스트

    • 시스템 전체가 정상적으로 작동하는지를 체크
    • 주로 부하 상황에서 수행
  4. 인수 테스트

    • 시스템이 예상대로 동작하는지 확인하고 요구 사항에 맞는지 확신하기 위해 사용자 주도로 진행
    • 알파 테스트, 베타 테스트
  5. 회귀 테스트

    • 원시 코드의 결함을 수정한 후 제대로 수정되었는지 확인하는 테스트
    • 관련된 모듈까지 문제가 없는지 테스트

추가 항목들

  1. 구현 기반 테스트 (화이트박스 테스트)

    • 입력 데이터를 가지고 실행 상태를 추적하여 오류를 찾아내는 동적 테스트
    • 프로그램 내부 구조를 테스트 설계의 기반으로 사용
    • 테스트 데이터 적합성 기준 선정, 테스트 데이터 생성, 테스트 실행 절차 포함​​.
  2. 명세 기반 테스트 (블랙박스 테스트)

    • 입력 값에 대한 예상 출력 값을 정해놓고 결과가 나오는지를 체크
    • 문법 기법, 동등 분할 기법, 경계 값 분석 기법, 원인-결과 그래프 기법 사용​.
  3. 테스트 케이스 작성

    • 테스트 기법 결정 후 테스트 케이스 도출
    • 원시 데이터를 작성하여 테스트 실행 및 결과 문서화​​.
  4. 오류 추적 및 수정

    • 테스트 결과를 분석하고, 오류 수정 계획을 세우고, 디버깅 도구를 이용해 수정
    • 수정된 내용을 검토한 후 결과 보고서 작성​