Software Engineering

Similar documents
소프트웨어공학

Microsoft PowerPoint 구현.pptx

Microsoft PowerPoint 구현.ppt

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

C프로-3장c03逞풚


Chapter_06

PowerPoint 프레젠테이션

untitled

Microsoft PowerPoint - ch07 - 포인터 pm0415

03장.스택.key

PowerPoint 프레젠테이션

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint 프레젠테이션

歯9장.PDF

PowerPoint 프레젠테이션

중간고사

K&R2 Reference Manual 번역본

13주-14주proc.PDF

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

Infinity(∞) Strategy

금오공대 컴퓨터공학전공 강의자료

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

윈도우즈프로그래밍(1)

untitled

PowerPoint 프레젠테이션

슬라이드 1

Chapter 4. LISTS

untitled

Microsoft PowerPoint - chap01-C언어개요.pptx

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

untitled

APOGEE Insight_KR_Base_3P11

윤성우의 열혈 TCP/IP 소켓 프로그래밍

chap01_time_complexity.key

C# Programming Guide - Types

ePapyrus PDF Document

PowerPoint 프레젠테이션

PowerPoint Presentation

강의10

Chapter 4. LISTS

6주차.key

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

02 C h a p t e r Java

C++-¿Ïº®Çؼ³10Àå

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

Chapter 4. LISTS

chap8.PDF

untitled

Chap 6: Graphs

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

PowerPoint 프레젠테이션

OCW_C언어 기초

09-interface.key

adfasdfasfdasfasfadf

Microsoft Word - [TP_3][T1]UTP.docx

Microsoft Word - FunctionCall

PowerPoint 프레젠테이션

Let G = (V, E) be a connected, undirected graph with a real-valued weight function w defined on E. Let A be a set of E, possibly empty, that is includ

<C6F7C6AEB6F5B1B3C0E72E687770>

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

2015 개정교육과정에따른정보과평가기준개발연구 연구책임자 공동연구자 연구협력관

슬라이드 1

C 프로그램의 기본

2002년 2학기 자료구조

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

SRC PLUS 제어기 MANUAL


본 강의에 들어가기 전

2007_2_project4

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

USER GUIDE

untitled

Microsoft PowerPoint - polling.pptx

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

<32B1B3BDC32E687770>

17장 클래스와 메소드

2014 HSC Korean Continuers

10주차.key

chap x: G입력

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

vi 사용법

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

02장.배열과 클래스

Java

Something that can be seen, touched or otherwise sensed

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

BMP 파일 처리

01-OOPConcepts(2).PDF

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

Microsoft PowerPoint - chap-03.pptx

Transcription:

8. 코딩스타일 1 2008 Software Engineering

옷을입는것에도스타일이있다. 빨간색을좋아하는사람 빨갱이인가? 진바지를좋아하는사람 청바지가잘어울리는사람 코딩스타일? 프로그램에도스타일이있다? 정수형은사용하지않는사람 모름지기수란모두실수여 ~ 다섯줄만넘으면함수로분리하는사람 모듈화안배웠어 ~ 나눠! 나눠! 나눠! 포인터를엄청많이사용하는사람 난포인터의황제다 어렵지 ~ 나만알면장땡 ~ 어떤스타일이가장좋은가? 원칙은없다. 다만권고 (recommendation) 가있을뿐

스타일 1: 명확하게작성하라. (1/3) 부제 : 너무똑똑한체하지말것 내가가장하기어려운 int i, j; float v[n][n];... for(i=1;i <= N;i++) for(j=1;j <= N;j++) int i, j; float v[n][n]; v[i-1][j-1] = (i/j)*(j/i); 10 0 01 0 00 1... for(i=0;i < N;i++) for(j=0;j < N;j++) if(i == j) v[i][j] = 1; else v[i][j] = 0;

스타일 1: 명확하게작성하라. (2/3) 일반적으로짧을수록명확해진다. power[1] = base; power[2] = base*base; power[3] = base*base*base; power[4] = base*base*base*base; power[5] = base*base*base*base*base; power[6] = base*base*base*base*base*base; power[7] = base*base*base*base*base*base*base; power[8] = base*base*base*base*base*base*base*base;... power[1] = base; for(i=2;i < N;i++) power[i] = power[i-1]*base;

스타일 1: 명확하게작성하라. (3/3) 짧으면항시명확하다? 꼭그렇지만은않다. int IntegerFromHex(char HexDigit) { if(hexdigit < 58) return(hexdigit 48); // 0 = 48 else return(hexdigit 55); // A = 65 } int IntegerFromHex(char HexDigit) { switch(hexdigit) { case 0 : return 0; break; case 1 : return 1; break;... case 9 : return 9; break; case A : return 10; break;... case F : return 15; break; } } Page 5

스타일 2: 간결하고직접적으로표현하라. (1/2) 최소값을구하는예제 (x = y, or y = x 인경우, 바른값을찾지못한다. if(x < y) { if(x < z) small = x; if(x > z) small = z; } if(x > y) { if(y < z) small = y; if(y > z) small = z; } small = x; if(y < small) small = y; if(z < small) small = z; Page 6

스타일 2: 간결하고직접적으로표현하라. (1/2) If-then-else 에서는짧은선택구조를먼저기술한다. if(in_user_code) { in_user_code = FALSE; r2 = r; reset_pharlap(); send_sig_segv(); } else revert(); if(!in_user_code) revert(); else { in_user_code = FALSE; r2 = r; reset_pharlap(); send_sig_segv(); }

스타일 3: 임시변수사용을피하라. 임시변수 (temporary variable) 의사용은가급적피한다. t1 = x1 (x2 + x2); t2 = 7 x2; Y = t1 + t1 + t2 + t2; y = 2*(x1 2*x2) + 2*(7 x2); y = 2 x 2x + 2 7 x ; ( ) ( ) 1 2 2

스타일 4: 혼돈을초래치않는변수명을사용하라. 혼돈하기쉬운글자들의예 1 과 l a1 al 0 과 O term0 termo 5 와 S TEXT5 TEXTS I 와 l Iist list m 과 n 의연속사용 mnnm mnmn u 와 v 의연속사용 vuvu uuvu 변수수정의예제 positionx, positiony xpos, ypos n, nn, nnn n, nsq, ncube nunit, nsqur, ncube

스타일 5: 일관성있는변수명을사용하라. Hungarian notation: 변수이름의처음몇자는변수의타입이나범위를나타내도록한다. 예 ) ptr_to_date_key ( 포인터 ) 일관성있는이름을사용한다. char buffer[500], mssge[80]; void read_instance(void), SaveCurrent(void); void get_line(void), write_line(void); int index1, index2; char buffer[500], message[80]; void read_instance(void), save_current(void); void read_line(void), write_line(void) int i, j;

스타일 6: 문장그룹이명확하도록 { } 와들여쓰기를사용하라. for(i=0;i < N;i++) { k = a[i]; if(k>100) a[i] = i*3; else if(j ==N)... } for(i=0;i < N;i++) { k = a[i]; if(k > 100) a[i] = i * 3; else if(j == N)... }

스타일 7: 한가지선택이면 if 만, 두가지이면 if-else if(swctl == 1 ) goto conti; else { dvictl += 10; swctl = 1 ; } conti; if(swctl!= 1 ) { dvictl += 10; swctl = 1 ; }

스타일 8: if 다음의 if 구조, null else 는피한다. if 다음의 if 나 null else 는가독성을크게떨어뜨리며, 오해의소지가있다. if(qty > 10) if(qty > 200) if(qty >= 500) bill_a += 1.00; else bill_a += 0.50; else; else bill_a = 0.0; // A // B // C // C // B // A if(qty >= 500.0) bill_a += 1.00; if(qty < 500 && qty > 200) bill_a += 0.5; if(qty <= 10) bill_a = 0.0;

스타일 9: 문장의반복은최소화한다. 반복되는문장은가급적반복문을사용하여제거한다. tkn = get_token(); if(tkn == T_END) return; If(tkn == T_START) start_proc(); while(ntokens < T_LIMIT) { process_token(); add_token(); tkn = get_token(); if(tkn == T_END) return; if(tkn == T_START) start_proc(); } for(;;) { tkn = get_token(); if(tkn == T_END) return; if(tkn == T_START) start_proc(); if(ntokens >= T_LIMIT) break; process_token(); add_token(); } Page 14

스타일 10: 모듈화하라. 서브루틴을사용하라. 같은역할을하는문장들인경우에는 Grouping 하여모듈화한다. 반복되는기능에대해서는함수로분리한다. Page 15

그밖의원칙들 (1/4) 수식표현 명료하게작성하라 - 효율성을위하여명료함을희생하지않도록한다. 번거로운일은기계가하도록만들라. 괄호를사용하여모호성을제거하라. 언어의좋은기능을이용하고불안한기능의사용은피하라. 제어구조 위에서아래로읽을수있도록프로그래밍하라. 중복구조를최소화하라. 맨처음작성한것으로끝나지말고, 계속해서리뷰하라.

그밖의원칙들 (2/4) 프로그램 각모듈은분명한한가지역할만수행하도록하라. 잘못작성된코드는짜맞추려하지하지말고다시작성하라. 차리리버리고, 처음부터다시 큰프로그램은작은단위로나누어따로작성하고따로검사하라. 입출력 자료가한계값을벗어나지않는지항상검사하라. 입력형식은사용자가쉽게준비할수있게하고출력형식은그모양이스스로드러나게구성하라. 입출력은따로모아서독립된서브루틴으로만들라.

그밖의원칙들 (3/4) 기타 발견된오류만고치지말고, 전체적으로보고수정가능한모든오류를고친다. 하나차이에의한오류 (off-by-one) 를주의하라. 프로그램을방어적으로작성하라. 빠른프로그램보다먼저바른프로그램을작성하라. 빠른프로그램보다먼저명료한프로그램을작성하라. 간결함을유지하면서빠른프로그램을만들라.

그밖의원칙들 (4/4) 기타 ( 계속 ) 주석과코드가일치하는지확인하라. 주석을달때코드를되풀이해서는않도록한다. 잘못된코드에는주석을달지않는다. -- 다시작성한다. 과다하게주석을달지않는다. 덕지덕지고쳐서사용하려고애쓰지않는다. -- 과감히버리고새로작성한다.

프로그램에관한몇가지격언 (1/2) The sooner you start to code, the longer the program will take. ( 코딩을일찍시작하면할수록, 프로그래밍에시간이많이걸린다.) If you can't write it down in English, you can't code it. ( 글로써표현할수없다면, 코딩도할수없다.) If the code and the comments disagree, then both are probably wrong. ( 코드와주석이맞지않으면, 둘다잘못되었을가능성이높다.) If you have too many special cases, you are doing it wrong. ( 너무많은예외케이스가있다면, 뭔가잘못하고있는것이다.) Get your data structures correct first, and the rest of the program will write itself. ( 먼저자료구조를잘잡는다면, 프로그램은저절로써지게될것이다.)

프로그램에관한몇가지격언 (1/2) Don't debug standing up. It cuts your patience in half. ( 서서디버깅하지말아라. 참을성을가지란이야기 ) Each new user of a new system uncovers a new class bugs. ( 새로운시스템에대한새로운사용자는항시새로운종류의버그를발견한다.) (Naïve user는유익한테스트결과를가져올것이고, 새롭게 porting하면항시문제점이생길것임을명심하란이야기 ) Whenever possible, steal code. ( 가능하다면코드를훔쳐라. 즉, 코드를재사용하라.) Always do the hard part first. If the hard part is impossible, why waste time on the easy part? ( 어려운부분을먼저하라. 어려운부분이불가 능하다면, 쉬운부분을해서뭣하나?)

코드의문서화 22 2008 Software Engineering

코드의문서화 소스코드의문서화는즉, 주석쓰는것을의미한다. 주석의종류 프로그램헤더 : 전체프로그램의기능을설명하는주석 모듈헤더 ( 함수헤더 ): 해당모듈의기능을설명하는주석 각줄에삽입된주석 : 해당줄을설명하는주석

프로그램헤더주석 프로그램의제목 제작자 작성일과버전번호 구조와설계 공유변수 사용되는파일 외부참조파일

프로그램헤더주석의예제 (1/2) /***************************************************************************** **** - EXAM SCORE SUMMARY PROGRAM - WRITTEN BY : HONG, KIL DONG - RELEASE DATE : April 1, 1994 - - PURPOSE : This program produces a variety of statistics on a - group of student's exam scores. For each score that is entered, - the score and a row of stars representing the magnitute of the - score is printed out. In addition, the number of scores, the - average score, the highest score and the lowest score are - printed out. - - DESIGN : The program is composed of the following modules: - Main module - The Main, controlling module - Validate Input - Gets and validates the user's input - Process Valid Score - Prints score and row of stars for one score - Update Statistics - Updates global statistics - Print Summary Report - Prints summary statistics

프로그램헤더주석의예제 (2/2) - MAJOR VARIABLES : - SumOfScore (subrange of integer, 0..2000) - - The sum of all score entered - NumOfStudents (subrange of integer, 0..100) - - The total number of score entered - LargestScore (subrange of integer, 0..20) - - The largest score in the set of scores - SmallestScore (subrange of integer, 0..20) - - The smallest score - FILES USED: - Input - contains integer scores, one to a line - Output - contains a one-line histogram for each score - read, followed on the next line by the number of - students and their average score, then on the next line - by the top score, and concluding on the next line with - the lowest score. - EXTERNAL REFERENCES: None ***********************************************************************/

코딩표준 (1/2) [ISO/IEC 9899] 27 2008 Software Engineering

코딩표준 (2/2) [JAVA] 28 2008 Software Engineering

연습문제 1. 소프트웨어개발방법론에서구현에대해설명하라.. 2. 코딩스타일 (Coding Style) 과코딩표준 (Coding Standard) 의차이점은무엇인가? 29 2008 Software Engineering