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()
 ![vmodel](https://commons.wikimedia.org/wiki/File:V-model.JPG)
 
 ### 소프트웨어 기능안전
-* 시스템이나 장비의 총체적 아전의 일환으로 하드웨어 고장, 소프트웨어 오류, 운영자 오류, 환경적 영향등에 대한 안전 관리
+* 시스템이나 장비의 총체적 안전의 일환으로 하드웨어 고장, 소프트웨어 오류, 운영자 오류, 환경적 영향등에 대한 안전 관리
+* IEC61508 안전표준을 기반
 
 ### 정적 테스트
 * 소프트웨어를 실행시키지 않고 결함을 검출하는 방법
@@ -2092,7 +2149,7 @@ int main()
 
 ![informal](./image/informal.jpg)
 
-| :구분: | :인스펙션: | :피어 리뷰: | :워크쓰루: |
+| 구분 | 인스펙션 | 피어 리뷰 | 워크쓰루 |
 | :---: | :------: | :-------: | :------: |
 | 공식성 | 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