소프트웨어 설계 소프트웨어설계

Download Report

Transcript 소프트웨어 설계 소프트웨어설계

1. 프로그래밍의 목표
2. 프로그래밍 언어
3. 코팅 방법
4. 원시코드 문서화
소프트웨어 설계
소프트웨어설계
1
1.
2.
3.
4.
5.
설계 사양의 철저한 반영
원시 코딩의 간단명료함
디버깅 작업의 용이
시험의 용이
수정 작업의 간편함
* 프로그래밍 작업 : 간결하고
명료하며
품위
소프트웨어 설계
소프트웨어설계
2
1. 메모리 양의 최소화
2. 출력물의 판독성 최대화
3. 원시 코드의 판독성 최대화
4. 원시 코드 양의 최소화
5. 개발 기간의 최소화
소프트웨어 설계
소프트웨어설계
3
- 다양한 목표들은 서로간의 갈등 요소로 등장할 가능성
- 프로그래밍 목표 설정 :
첫째, 특별한 경우를 제외  메모리의 양이나 원시 코드의
양을 최소화 시키는 목표는 무의미
둘째, 출력물의 판독성 문제  사용자의 요구에 따름
셋째, 장기적인 목표의 품질과 단기적 목표인 개발 기간
선택을 할 경우 장기적인 목표로 접근
소프트웨어 설계
소프트웨어설계
4
- 인간과 컴퓨터 사이의 의견 교환을 위한 통신수단
-심리적 특성 : 프로그램 설계에 영향
- 공학적 특성: 소프트웨어 개발 프로젝트의 성패에 큰 영향
소프트웨어 설계
소프트웨어설계
5
- 소프트웨어 심리학자의 임무는
•
기계의 효율성, 소프트웨어 능력, 하드웨어 제한을 의식
•
어떻게 하면 인간이 사용하기 편리하고,
학습하기 간단하고, 신뢰성을 향상하고,
오류 발생의 빈도수를 줄이고, 사용자 만족을 향상
•
인간적 측면에 초점을 맞추고 있다.
소프트웨어 설계
소프트웨어설계
6
1. 일관성
: 일관된 표기법 사용,
제약조건 명시의 일관성 유지
2. 모호성
X=A/B*C
소프트웨어 설계
소프트웨어설계
: X = (A / B) * C 갑 의 해석
: X = A / (B * C ) 을 의 해석
7
3. 집약성
: 일정한 코드 내에 집약할 수 있는 논리의 양
-
사용할 수 있는 키워드와 약어의 종류
자료 유형의 다양성과 디폴트의 특징
산술과 논리 연산자들의 개수
내장 함수들의 개수
4. 지역성 : 언어의 통합 특성(블록화, 구조화)
5. 선형성 : 기능적인 영역의 유지 보수 개념
* 언어를 배우고, 적용, 유지시키는 능력에 관계됨
소프트웨어 설계
소프트웨어설계
8
1. 코딩의 용이성
2. 컴파일러의 효율성
3. 원시 코드의 이식성
4. 개발 도구들의 가용성
5. 유지 보수 용이성
소프트웨어 설계
소프트웨어설계
9
1. 제 1 세대 언어(1950~1958)
: 초기 단계
프로그래밍 언어에 대한 기본 개념 제시
미래 프로그래밍 언어에 대한 포괄적인 방향 제시
기계어(machine language)
어셈블리 언어(assembler language)
--- 저급 언어(low-level language)로 분류
소프트웨어 설계
소프트웨어설계
10
2. 제 2 세대 언어(1959~1961)
: 특징 - 폭 넓은 사용, 다양한 소프트웨어 라이브러리,
친숙함과 인정도(acceptance)
FORTRAN(FORmula TRANslation)
COBOL(Common Business Oriented Language)
ALCOL 60(ALGOrithmic Language)
BASIC(Beginners All-purpose Symbolic Instruction Code)
11
소프트웨어 설계
소프트웨어설계
3. 제 3 세대 언어(1962~?)
: 특징 - 강한 프러시져와 자료 구조화 능력
현대 언어, 구조적 언어, 병렬 처리 기술 도입
- 범용언어(general purpose language)
: Pascal, Modula-2, PL/1(Programming Language 1)
- 객체 지향언어
: C++, Object-C, Smalltalk, Eiffel 등
- 특수언어
: LISP, PROLOG, APL, FORTH 등
소프트웨어 설계
소프트웨어설계
12
4. 제 4 세대 언어(1980~?)
: Fourth generation languages : 4GL
프로그래밍의 추상화 수준을 높이기 위해서 개발
--- 아직 정의가 명확하지 않은 상태
- 자연어(natural language)
- 비절차언어(nonprocedural language)
- 사용자중심언어(user-oriented language)
소프트웨어 설계
소프트웨어설계
13
1.
2.
3.
4.
5.
6.
7.
8.
9.
용도에 맞추기가 쉬움
유지 보수의 용이성
접근의 용이성
생산성의 제고
배우기 쉬움
전문지식이 불필요함
프로토타이핑 지원
구조적 프로그래밍 지원
이해의 용이성
소프트웨어 설계
소프트웨어설계
14
1. 사용자 요구 사항
2. 프로그래머의 친밀감
3. 프로젝트에 사용 중인 언어
4. 컴파일러의 가용성과 품질
5. 소프트웨어 개발 도구의 지원
6. 호환성
소프트웨어 설계
소프트웨어설계
15
1. 일반적인 적용 분야
2. 알고리즘의 계산 복잡도
3. 소프트웨어의 실행 환경
4. 성능 고려사항
5. 자료구조의 복잡도
6. 소프트웨어 개발팀의 지식
7. 상용 컴파일러의 보유 여부
소프트웨어 설계
소프트웨어설계
16
- 스타일(style) : 원하는 효과를 추구하기 위한
여러 가지 방법들 중에서 일관성 있는 유형
- 훌륭한 코딩 스타일
: 프로그래밍 언어의 단점을 극복하도록 도와 주며,
쉽게 이해되고 간단하며,
세련된 코드를 제공
- 나쁜 코딩 스타일
: 복잡하고 읽기 어려운 코드를 만들게 되어서,
프로그래밍 언어가 추구하는 의도를 파괴할 수 있다.
소프트웨어 설계
소프트웨어설계
17
1. goto문은 사용되지 않을 것이다.
2. 프로그램 구조의 중첩 구조 깊이는
5단계를 초과하지 않을 것이다.
3. 서브루틴의 길이는
30줄을 초과하지 않을 것이다.
* 표준 : 기계가 점검할 수 있는 특성
소프트웨어 설계
소프트웨어설계
18
1. goto문의 사용은 일상적인 환경에서는 피해야 한다.
2. 프로그램 구조의 중첩 구조 깊이는
일상적인 환경 아래서는 5 이하이어야 한다.
3. 서브프로그램 내의 실행 가능한 문장의 수는
일상적인 환경에서는 30을 초과하지 말아야 한다.
4. 일상적인 환경으로부터의 이탈은
프로젝트 책임자의 승인을 필요로 한다.
* 지침 : 인간 활동에 의해서 검증해야 하는 것
소프트웨어 설계
소프트웨어설계
19
1. 프로그래머는 프로그래밍 지침의 가치를 이해하여야 한다.
2. 프로그래머가 지침 수립시
참여할 수 있는 기회가 부여 되어야 한다.
3. 지침이 귀찮게 느껴지면, 이를 재조사하여 개정해야 한다.
4. 특수한 상황에서는 지침을 위반해도 되는 규정이 있어야 한다.
5. 자동화 도구는 지침의 준수여부를 점검하기 위해서
사용 되어야 한다.
소프트웨어 설계
소프트웨어설계
20
1. 변수의 이름
2. 프롤로그 주석(prologue comments)
3. 코드내의 주석(comments)
소프트웨어 설계
소프트웨어설계
21
1. 저자 이름 :
2. 컴파일 날짜 :
3. 실행할 기능 :
4. 사용할 알고리즘 :
5. 변경한 사람/변경한 날짜/변경한 목적 :
6. 매개 변수와 전송 카드 :
7. 입력 정의 :
8. 출력 정의 :
소프트웨어 설계
소프트웨어설계
22
9. 광역 변수 :
10. 부작용(side effects)
11. 주요 자료 구조 :
12. 호출 루틴/피호출 루틴 :
13. 시간 제약 사항 :
14. 예외 조치 방안 :
15. 가정
소프트웨어 설계
소프트웨어설계
23
- 주석문의 크기는 어느 정도가 적절한가?
- 주석문의 위치는 어디가 적절한가?
- 주석문이 논리적인 흐름을 방해하지 않는가?
- 주석문이 프로그램을 판독하는 독자를 잘못
유도할 수 있는가?
- 주석문의 유지 보수는?
- 주석문의 신뢰성 문제는 없는가?
소프트웨어 설계
소프트웨어설계
24