소프트웨어 공학 특강
실습2 예제 코드
코드 1 : 8글자 소문자 단어를 전화번호로 변환
코드 2 : 출력 결과 보완
코드 3 : branch/OOP 수정, 기존의 기능을 클래스화
코드 4 : branch/OOP를 trunk에 merge
SRS 문서
항목 구성 예제
1월 14일 시스템 설계를 거쳐서 나온 결과물
실습2 예제 코드
코드 1 : 8글자 소문자 단어를 전화번호로 변환
더보기
// main.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
#include <conio.h>
int main(void)
{
int i;
char str[8];
for (i = 0; i < 8; i++)
{
str[i] = _getch();
printf("%c", str[i]);
}
printf("\n");
for (i = 0; i < 8; i++)
{
switch (str[i])
{
case 'a':
case 'b':
case 'c':
printf("2");
break;
case 'd':
case 'e':
case 'f':
printf("3");
break;
case 'g':
case 'h':
case 'i':
printf("4");
break;
case 'j':
case 'k':
case 'l':
printf("5");
break;
case 'm':
case 'n':
case 'o':
printf("6");
break;
case 'p':
case 'q':
case 'r':
case 's':
printf("7");
break;
case 't':
case 'u':
case 'v':
printf("8");
break;
case 'w':
case 'x':
case 'y':
case 'z':
printf("9");
break;
}
}
printf("\n");
return 0;
}
더보기
// main.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
#include <conio.h>
int main(void)
{
int i;
char str[8];
for (i = 0; i < 8; i++)
{
str[i] = _getch();
printf("%c", str[i]);
}
printf("\n");
printf("010-");
for (i = 0; i < 8; i++)
{
if (i == 4)
printf("-");
switch (str[i])
{
case 'a':
case 'b':
case 'c':
printf("2");
break;
case 'd':
case 'e':
case 'f':
printf("3");
break;
case 'g':
case 'h':
case 'i':
printf("4");
break;
case 'j':
case 'k':
case 'l':
printf("5");
break;
case 'm':
case 'n':
case 'o':
printf("6");
break;
case 'p':
case 'q':
case 'r':
case 's':
printf("7");
break;
case 't':
case 'u':
case 'v':
printf("8");
break;
case 'w':
case 'x':
case 'y':
case 'z':
printf("9");
break;
}
}
printf("\n");
return 0;
}
더보기
// main.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
#include <string.h>
#include <conio.h>
class PhoneNumEncoder
{
public:
char m_szInput[9];
char m_szOutput[14];
PhoneNumEncoder()
{
m_szInput[0] = 0;
m_szInput[8] = 0;
m_szOutput[0] = 0;
m_szOutput[13] = 0;
}
void setInput(const char* szInput)
{
strncpy(m_szInput, szInput, 8);
}
const char* getOutput(void)
{
return m_szOutput;
}
void encode(void)
{
int i, o;
m_szOutput[0] = '0';
m_szOutput[1] = '1';
m_szOutput[2] = '0';
m_szOutput[3] = '-';
o = 4;
for (i = 0; i < 8; i++)
{
if (i == 4)
m_szOutput[o++] = '-';
switch (m_szInput[i])
{
case 'a':
case 'b':
case 'c':
m_szOutput[o++] = '2';
break;
case 'd':
case 'e':
case 'f':
m_szOutput[o++] = '3';
break;
case 'g':
case 'h':
case 'i':
m_szOutput[o++] = '4';
break;
case 'j':
case 'k':
case 'l':
m_szOutput[o++] = '5';
break;
case 'm':
case 'n':
case 'o':
m_szOutput[o++] = '6';
break;
case 'p':
case 'q':
case 'r':
case 's':
m_szOutput[o++] = '7';
break;
case 't':
case 'u':
case 'v':
m_szOutput[o++] = '8';
break;
case 'w':
case 'x':
case 'y':
case 'z':
m_szOutput[o++] = '9';
break;
}
}
}
};
int main(void)
{
int i;
char str[8];
for (i = 0; i < 8; i++)
{
str[i] = _getch();
printf("%c", str[i]);
}
printf("\n");
PhoneNumEncoder enc;
enc.setInput(str);
enc.encode();
printf("%s\n", enc.getOutput());
return 0;
}
더보기
// main.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
#include <string.h>
#include <conio.h>
class PhoneNumEncoder
{
public:
char m_szInput[9];
char m_szOutput[14];
PhoneNumEncoder()
{
m_szInput[0] = 0;
m_szInput[8] = 0;
m_szOutput[0] = 0;
m_szOutput[13] = 0;
}
void setInput(const char* szInput)
{
strncpy(m_szInput, szInput, 8);
}
const char* getOutput(void)
{
return m_szOutput;
}
void encode(void)
{
int i, o;
m_szOutput[0] = '0';
m_szOutput[1] = '1';
m_szOutput[2] = '0';
m_szOutput[3] = '-';
o = 4;
for (i = 0; i < 8; i++)
{
if (i == 4)
m_szOutput[o++] = '-';
switch (m_szInput[i])
{
case 'a':
case 'b':
case 'c':
m_szOutput[o++] = '2';
break;
case 'd':
case 'e':
case 'f':
m_szOutput[o++] = '3';
break;
case 'g':
case 'h':
case 'i':
m_szOutput[o++] = '4';
break;
case 'j':
case 'k':
case 'l':
m_szOutput[o++] = '5';
break;
case 'm':
case 'n':
case 'o':
m_szOutput[o++] = '6';
break;
case 'p':
case 'q':
case 'r':
case 's':
m_szOutput[o++] = '7';
break;
case 't':
case 'u':
case 'v':
m_szOutput[o++] = '8';
break;
case 'w':
case 'x':
case 'y':
case 'z':
m_szOutput[o++] = '9';
break;
}
}
}
};
int main(void)
{
int i;
char str[8];
printf("Input 8 lower case alphabet: ");
for (i = 0; i < 8; i++)
{
str[i] = _getch();
printf("%c", str[i]);
}
printf("\n");
PhoneNumEncoder enc;
enc.setInput(str);
enc.encode();
printf("%s\n", enc.getOutput());
return 0;
}SRS 문서
항목 구성 예제
더보기
SRS(Software Requirement Specification, 고객요구사항명세서)
문서제목
작성자
관련 부서
작성 날짜
문서 버전 정보
1. Introduction
1.1 Purpose
프로젝트의 목적, 목표
1.2 Scope
프로젝트가 다루는 범위
1.3 Definitions, Acronyms, and Abbreviations
각종 용어 및 약어 정의, 요약 표현 등
1.4 References
참고 자료 링크
2. Overall description
프로젝트 요구사항을 자세히 서술
2.1 Perspective
프로젝트의 기능을 말로서 명확히 서술, 하위 항목을 추가하여 자세히 기술
2.1.1 System Interface
외부 시스템과의 상호작용 내역
2.1.2 User Interfaces
사용자 상호작용 내역
2.1.3 Hardware & Software Interfaces
입력과 출력 내역, 하드웨어와 기반 소프트웨어(운영 체제, 라이브러리,
프레임워크 등)와의 상호작용 내역
2.1.4 Communication Interfaces
네트워크를 통한 상호작용 내역
2.1.5 Resource Constraints
시스템 자원(메모리, CPU, 최소 디스크 용량 등) 제약 사항
2.1.6 Operations
User Interfaces에서 다 기술하지 못한 추가적인 기능 설명
2.1.7 Site Adoption Requirements
프로젝트를 배포(deploy)하기 위해 필요한 조건
2.2 Product Function
프로젝트의 기능 내역을 표로 기술
2.2.1 Function Mapping
기능 체계별로 분류하고 중요도(Low, Middle, High)를 표시
2.3 User Characteristics
사용자를 위해 고려할 사항들
2.4 Constraints
제한 사항을 자세히 기술
2.4.1 Regulatory Policies
정책적, 법적 제한 사항(ex. 게임의 영상물 등급)
2.4.2 Hardware Limitations
하드웨어 제한 사항
2.4.3 Interfaces to other applications
다른 어플리케이션과 상호작용을 위한 제한 사항
2.4.4 Reliability Requirements
품질 신뢰도 요구사항
2.4.5 Safety and Security Considerations
사용자 안전과 보안을 위한 제한 사항
2.5 Assumptions & Dependencies
환경에 대한 기대치, 성능에 대한 기대치, 품질에 대한 가정,
외부 시스템에 의존하는 내용 등을 기술
2.6 Apportioning of Requirements
부가적인 옵션이나 향후 추가될 수 있는 기능을 명시
(ex. 설치 프로그램, 업데이트 기능 등)
3. Specific Requirements
각종 다이어그램들을 적절히 활용하여 최대한 알기 쉽게 상세히 기술
3.1 External Interface Requirements
외부 인터페이스 요구사항
3.1.1 User Interfaces
스토리 보드, 스크린 샷, 프로토타잎 등을 이용해
화면 설계, 메뉴 구조, 동작 방식 증을 설명
3.1.2 Hardware & Software Interfaces
2.1.3의 내용을 보완하거나 추가
3.1.3 Communication Interfaces
2.1.4의 내용을 보완하거나 추가
3.2 Functional Requirements
세부 기능 항목들을 각종 다이어그램을 곁들여 자세히 설명
3.2.1 Use Case
Use-case diagram, Use-case scenario, State diagram 등으로 기능을 설명
3.2.2 Purpose of Feature
3.2.3 Stimulus/Response Sequence
3.2.4 Associated Functional Requirements
3.3 Performance Requirements
사용자 입력에 대항 응답 시간 제한, 이미지 및 동영상 등 출력 품질,
프로그램 시동 시간 제한 등의 각종 성능에 대한 요구사항을 정의
3.4 Design Constraints
언어 제약(다국어 지원), 각종 입력 데이터의 길이 제한(사용자 이름 등),
기반 소프트웨어 버전 제한, 하드웨어 특성 (스크린 해상도 등),
네트워크 성능 제한 등을 기술
3.5 Software System Attributes
하드웨어 및 네트워크 이상 발생 시 대응 방식을 정의
3.6 Other Requirements
앞의 목차에 포함시지 못하는 기타 요구사항을 정의
4. Verification
성능 및 기능 구현에 대한 검증 방법을 정의
5. Appendix
용어 정리, 상수 선언 등 추가 정보를 기술
1월 13일 SRS 회의를 거쳐서 나온 결과물문서제목
작성자
관련 부서
작성 날짜
문서 버전 정보
1. Introduction
1.1 Purpose
프로젝트의 목적, 목표
1.2 Scope
프로젝트가 다루는 범위
1.3 Definitions, Acronyms, and Abbreviations
각종 용어 및 약어 정의, 요약 표현 등
1.4 References
참고 자료 링크
2. Overall description
프로젝트 요구사항을 자세히 서술
2.1 Perspective
프로젝트의 기능을 말로서 명확히 서술, 하위 항목을 추가하여 자세히 기술
2.1.1 System Interface
외부 시스템과의 상호작용 내역
2.1.2 User Interfaces
사용자 상호작용 내역
2.1.3 Hardware & Software Interfaces
입력과 출력 내역, 하드웨어와 기반 소프트웨어(운영 체제, 라이브러리,
프레임워크 등)와의 상호작용 내역
2.1.4 Communication Interfaces
네트워크를 통한 상호작용 내역
2.1.5 Resource Constraints
시스템 자원(메모리, CPU, 최소 디스크 용량 등) 제약 사항
2.1.6 Operations
User Interfaces에서 다 기술하지 못한 추가적인 기능 설명
2.1.7 Site Adoption Requirements
프로젝트를 배포(deploy)하기 위해 필요한 조건
2.2 Product Function
프로젝트의 기능 내역을 표로 기술
2.2.1 Function Mapping
기능 체계별로 분류하고 중요도(Low, Middle, High)를 표시
2.3 User Characteristics
사용자를 위해 고려할 사항들
2.4 Constraints
제한 사항을 자세히 기술
2.4.1 Regulatory Policies
정책적, 법적 제한 사항(ex. 게임의 영상물 등급)
2.4.2 Hardware Limitations
하드웨어 제한 사항
2.4.3 Interfaces to other applications
다른 어플리케이션과 상호작용을 위한 제한 사항
2.4.4 Reliability Requirements
품질 신뢰도 요구사항
2.4.5 Safety and Security Considerations
사용자 안전과 보안을 위한 제한 사항
2.5 Assumptions & Dependencies
환경에 대한 기대치, 성능에 대한 기대치, 품질에 대한 가정,
외부 시스템에 의존하는 내용 등을 기술
2.6 Apportioning of Requirements
부가적인 옵션이나 향후 추가될 수 있는 기능을 명시
(ex. 설치 프로그램, 업데이트 기능 등)
3. Specific Requirements
각종 다이어그램들을 적절히 활용하여 최대한 알기 쉽게 상세히 기술
3.1 External Interface Requirements
외부 인터페이스 요구사항
3.1.1 User Interfaces
스토리 보드, 스크린 샷, 프로토타잎 등을 이용해
화면 설계, 메뉴 구조, 동작 방식 증을 설명
3.1.2 Hardware & Software Interfaces
2.1.3의 내용을 보완하거나 추가
3.1.3 Communication Interfaces
2.1.4의 내용을 보완하거나 추가
3.2 Functional Requirements
세부 기능 항목들을 각종 다이어그램을 곁들여 자세히 설명
3.2.1 Use Case
Use-case diagram, Use-case scenario, State diagram 등으로 기능을 설명
3.2.2 Purpose of Feature
3.2.3 Stimulus/Response Sequence
3.2.4 Associated Functional Requirements
3.3 Performance Requirements
사용자 입력에 대항 응답 시간 제한, 이미지 및 동영상 등 출력 품질,
프로그램 시동 시간 제한 등의 각종 성능에 대한 요구사항을 정의
3.4 Design Constraints
언어 제약(다국어 지원), 각종 입력 데이터의 길이 제한(사용자 이름 등),
기반 소프트웨어 버전 제한, 하드웨어 특성 (스크린 해상도 등),
네트워크 성능 제한 등을 기술
3.5 Software System Attributes
하드웨어 및 네트워크 이상 발생 시 대응 방식을 정의
3.6 Other Requirements
앞의 목차에 포함시지 못하는 기타 요구사항을 정의
4. Verification
성능 및 기능 구현에 대한 검증 방법을 정의
5. Appendix
용어 정리, 상수 선언 등 추가 정보를 기술
Ex3 Item1 SRS.pdf |
1월 14일 시스템 설계를 거쳐서 나온 결과물
Ex4 Diagram.pdf |
Ex5 Diagram.pdf |
Posted by |꼬마늑대|


SE01-1.pdf
|꼬마늑대|

