From 3d1d415d8fd3335c01fc88d7fedaf7725e5cb4b6 Mon Sep 17 00:00:00 2001 From: Nayoung Kim <skdud1201@ajou.ac.kr> Date: Tue, 1 Feb 2022 16:10:32 +0000 Subject: [PATCH] Update LEC14 --- README.md | 269 ++++++++++++------------------------------------------ 1 file changed, 60 insertions(+), 209 deletions(-) diff --git a/README.md b/README.md index 69a3216..a8f0c77 100644 --- a/README.md +++ b/README.md @@ -2033,6 +2033,58 @@ int main() ## **Lecture 14** [2022.01.26] +### vi editor +* ~/.vimrc + * vi editor모드로 전환할 때 실행될 명령어들을 저장하는 파일 +* set num + * vi editor를 실행하면 자동으로 라인 수가 표시됨 +* set tabstop=(숫자) + * tab을 누르면 이동하는 칸 수를 지정 + +### POSIX +* 다른 운영체제들 사이의 호환성을 위해 IEEE에서 만든 표준 +* 한 운영체제에서 개발한 프로그램을 다른 운영체제에서도 쉽게 돌아가도록 하는 것 +* UNIX 기반 + +### UNIX +* 주로 서버용 컴퓨터에서 사용되는 운영체제 + +* 특징 + * 시분할 시스템을 위해 설계된 대화식 운영체제 + * 소스가 공개된 개방형 시스템 + * 대부분 C언어로 작성되어 있어 이식성이 높음 + * 장치, 프로세스 간 호환성이 놓음 + * 크기가 작고 이해하기가 쉬움 + * 다중 사용자, 다중 작업을 지원 + * 많은 네트워킹 기능을 제공하여 통신망 관리용 운영체제로 적합 + * 트리구조의 파일 시스템을 가지고 있음 + * 전문적인 프로그램 개발에 용이 + * 다양한 유틸리티 프로그램들이 존재 + +* 구성 + * 커널(Kernel) + * 유닉스의 가장 핵심적인 부분 + * 컴퓨터가 부팅될 때 주기억장치에 적재된 후 상주되면서 실행 + * 하드웨어를 보호하고 프로그램과 하드웨어 간의 인터페이스 역할을 담당 + * 프로세스 관리, 기억 장치 관리, 파일 관리, 입출력 관리, 프로세스 간 통신, 데이터 전송 및 변환 기능 수행 + * 쉘(Shell) + * 사용자의 명령어를 인식하여 프로그램을 호출하고 명령을 수행하는 명령어해석기 + * 시스템과 사용자 간 인터페이스를 담당 + * 명령어가 포함된 파일 형태로 존재하며 보조기억장치에서 교체 가능 + * 파이프 라인 기능을 지원하고 입출력 재지정을 통해 입력, 출력 방향 변경 + * 유틸리티 프로그램(Utility Program) + * 일반 사용자가 작성한 응용프로그램을 처리하는데 사용 + * Dos에서의 외부 명령어에 해당 + * 에디터, 컴파일러, 인터프리터, 디버거 등이 포함됨 + +### buffer +* 입출력을 수행하는데에 있어 속도 차이를 극복하기 위해 사용하는 임시 저장 공간 +* 프로그래밍이나 운영체제에서 사용하는 버퍼는 **CPU**와 **보조기억장치** 사이에서 사용되는 임시 저장 공간을 의미 +* CPU 내부의 캐시메모리 보다는 느리지만 보조기억장치보다 빠른 주기억 장치를 이용 +* 과정 + * 보조기억장치가 주기억장치의 버퍼로 데이터를 보냄 + * CPU가 다른 일들을 처리한 후 시간이 남으면 버퍼를 확인하여 쌓여있는 데이터를 한번에 처리함 + ## **Lecture 15** [2022.01.27] ### Software Testing @@ -2045,7 +2097,9 @@ int main() * 소프트웨어 버그가 비싸거나 위험할 수 있기 때문 * 소프트웨어 버그는 잠재적으로 금전적 손실과 인적 손실을 초래할 수 있음 -* 테스트 방식 +* **테스트 방식** + +* SW 내부 구조 파악 여부 * 화이트박스 테스트 (White Box Test) * 응용 프로그램의 내부 구조, 동작을 디테일하게 거사하는 테스트 방식 * 유형 @@ -2058,6 +2112,8 @@ int main() * 기능 테스트 * 비 기능 테스트 * 회귀 테스트 + +* 소프트웨어 실행 여부 * Static * 프로그램을 실행하지 않고 소스 코드 전체 또는 일부를 분석하는 기법 * Dynamic @@ -2070,7 +2126,8 @@ int main()  ### 소프트웨어 기능안전 -* 시스템이나 장비의 총체적 아전의 일환으로 하드웨어 고장, 소프트웨어 오류, 운영자 오류, 환경적 영향등에 대한 안전 관리 +* 시스템이나 장비의 총체적 안전의 일환으로 하드웨어 고장, 소프트웨어 오류, 운영자 오류, 환경적 영향등에 대한 안전 관리 +* IEC61508 안전표준을 기반 ### 정적 테스트 * 소프트웨어를 실행시키지 않고 결함을 검출하는 방법 @@ -2092,7 +2149,7 @@ int main()  -| :구분: | :인스펙션: | :피어 리뷰: | :워크쓰루: | +| 구분 | 인스펙션 | 피어 리뷰 | 워크쓰루 | | :---: | :------: | :-------: | :------: | | 공식성 | Formal | Mid Formal | Informal | | 개념 | 산출물 대상 공식 검토 | 개발단계별 산출물 대상 동료 검토 | 소팀 내 결함 해결방안 상호 검토 | @@ -2108,209 +2165,3 @@ int main() * 특징 : 단독분석보다 정적 기법 병행 수행 적용 * 장점 : 오류 탐색 정확도 높음 * 단점 : 코드 전체 수행 어려움 - -### testcode.c -``` -#include <stdio.h> -/* test code for input var */ - -int g_var1 = 0; -void exFunc(int * var); -int inputVarTest(int a){ - int ret = 0; - - if (a == 100 && g_var1 == 10) { - ret = 100; - }else if(a == 50 && g_var1 ==5){ - ret =50; - }else { - ret =-1; - } - - return ret; -} -struct strc{ - unsigned char state; -}; - -int bitFunc(struct strc data){ - - - struct strc data2; - if((data.state & 0x02) == 0x02){ /* [CS_IGNORE=MISRA_C_2012.MISRA_C_2012_10_04;의도된 코드] */ - printf("state1 = %X\n",2); - printf("state2 = %X\n",data.state); - printf("state3 = %d\n",data.state); - }else{ - printf("state4 = %X\n",0x02 & 0x02); - printf("state5 = %X\n",data.state); - printf("state6 = %d\n",data.state); - } - return 0; -} - -/* test code for undefined func Stub */ -int undefinedFunc(int arg); -int definedFunc(int arg){ - return (arg * 12) + (arg * 100); -} - -void undefinedStubTest(int a) /* [CS_IGNORE=MISRA_C_2012.MISRA_C_2012_02_07;TEST] */ -{ - int j; - int l; - - j = undefinedFunc(l); - if(j == 100 ){ - j=0; - - }else{ - j=1; - } -} - -/* test code for defined func Stub */ -void definedStubTest(int a) -{ - int j, l; - - j = definedFunc(a); - if(j == 112 ){ - j=0; - }else if(j ==336){ - j=1; - }else{ - j=2; - } -} - - -/* Test code for void pointer */ -struct S { - int m1; - float m2; -}; - -int VoidPtrTest(void* arg) -{ - int ret = 0; - struct S *ptr = (struct S*)arg; - if (ptr->m1 == 0) { - ret = 0; - }else{ - ret = 1; - } - return ret; -} - -/* test code for static local var */ -void staticVarTest(){ - static int a = 0; - - if(a==0){ - a++; - return; - }else if(a==1){ - a=3; - return; - }else if(a==3){ - a++; - return; - } - else - { - /* exception */ - } - - return; -} - -void funcCall(){ - testA(); - testB(); - testC(); -} -/* test code for local var - call by reference */ -void localVarTest(){ - int local_var =0; - int flag = 0; - exFunc(&local_var); - if(local_var == 1){ - flag = 1; - }else if(local_var ==2){ - flag = 2; - }else{ - flag = 0; - } -} - -/* test code for Null Check */ -struct data { - int a; - char *b; -}; - -int testMe(int a, int b , char c){ - return 0; -} -int pointerTest(struct data *pData) -{ - if(pData == 0){ - return -1; - }else if(pData->a == 0){ - return 0; - }else if (pData->a == 1){ - return 1; - } - else - { - /* exception */ - } - pData->b = (char *)malloc(10); - strcpy(pData->b, "mwyun"); -} - - -#ifdef UNIT_TARGET -/* Test code for virtual memory */ - -#define READ_REG(ADDR) (*(volatile unsigned long*)(ADDR)) -typedef struct strname{ - int a; -}AAA; -#define REG_BASE_ADDR 0xFFE40000U -#define (*(unsigned int *)AAA) 0xFFFF0230u -typedef unsigned char uint8_t; // unsigned 8-bits : begins with 'b' -typedef char int8_t; // signed 8-bits : begins with 'c' -typedef unsigned int uint16_t; // unsigned 16-bits : begins with 'w' -typedef int int16_t; // signed 16-bits : begins with 'i' -typedef unsigned long uint32_t; // unsigned 32-bits : begins with 'u' -typedef long int32_t; // signed 32-bits : begins with 'l' -typedef float float32_t; // single precision IEEE 754 32-bits : begins with Capital -typedef double int64_t; - -extern volatile uint32_t ulAdcColumnWriteIndex; -int virtualMemoryTest1(){ - *(uint8_t *) ((((uint32_t)0x68000000) + (((uint32_t)0x2340) * 2)) + (ulAdcColumnWriteIndex * ((uint32_t)8) )+ 0)=100; - /*if(READ_REG(REG_BASE_ADDR)==10){ - return 10; - }*/ - return -1; -} - - -void virtualMemoryTest2(void) -{ - if(AAA&0x01==0x01){} -} - -/* test code for infinite loop */ -int infiniteLoopTest(int arg){ - - while(1){ - return arg; - } -} - -#endif -``` -- GitLab