Presentation is loading. Please wait.

Presentation is loading. Please wait.

Class 4: 설계.

Similar presentations


Presentation on theme: "Class 4: 설계."— Presentation transcript:

1 Class 4: 설계

2 학습 내용 소 개 설계의 원리 구조적 설계 기법 변환 분석 처리 분석 설계 평가 기준 자료구조 설계 알고리즘 설계
사용자 인터페이스 설계 시스템 설계서

3 설 계 사용자의 요구를 만족시키기 위하여 제약 조건이 반영된 구현 대안을 창출하는 일 소프트웨어의 시스템의 내부를 설계
구조설계: 모듈의 구조 및 자료 구조 상세설계: 알고리즘 설계, 사용자 인터페이스 분 석 설 계 구 현 사용자 요구사항 제약조건 구축 시스템 시스템의 본질정의 구현대안 설정 시스템 구축 분석모형 설계모형

4 구조 설계 DFD로부터 시스템의 구조도 작성 기능을 분해 모듈 구조 모듈 간의 관계를 정립(모듈 인터페이스)
자료설계(데이타베이스 설계) 결과 시스템 구조도(Structure Chart) 외부 화일 및 DB 설계도(레코드 레이아웃, ERD)

5 상세 설계 모듈 내부 설계 사용자 인터페이스 자료구조 설계 결과 프로그램 사양서 화면 및 출력물 레이아웃 모듈 안의 알고리즘
모듈 안의 지역 변수 사용자 인터페이스 메뉴 입력 폼 출력 레포트 자료구조 설계 구조형 및 배열 결과 프로그램 사양서 화면 및 출력물 레이아웃

6 설계 방법론 구조적 설계(structured design) 객체지향 설계(object-oriented design)
시스템을 기능적 관점에서 다룸 하향적 세분화 Yourdon/Coad 객체지향 설계(object-oriented design) 자료와 자료에 적용될 기능을 함께 추상화 객체: 자료+기능 시스템은 객체의 모임 Yourdon, Sheller/Meller, Rumbaugh, Booch... 자료구조 중심 설계 입출력자료의 구조 파악으로 소프트웨어 구조를 추출 Jackson, Warnier-Orr

7 설계 원리 모듈 분할의 기본 원칙 IPO 모형 설계 원리 변경에 의한 영향을 최소화 추상화의 원리 정보 은닉 단계적 분해
제 어 입력 프로세스 출력 입 력 프로세스 출력 설계 원리 추상화의 원리 정보 은닉 단계적 분해 모듈화

8 추상화의 원리 복잡한 문제 ⇒ 추상화 ⇒ 개념 소프트웨어의 구조를 이루는 계층의 파악 기능 추상화 자료 추상화 제어 추상화
복잡한 문제 ⇒ 추상화 ⇒ 개념 소프트웨어의 구조를 이루는 계층의 파악 기능 추상화 입력자료를 출력자료로 변환하는 과정을 추상화 부프로그램의 시그네처와 기능만 생각 자료 추상화 자료와 기능을 묶어서 생각 제어 추상화 외부 이벤트에 대한 반응을 추상화

9 정보은닉(information hiding)
각 모듈의 자세한 처리 내용이 은닉되어 시스템의 다른 부분에는 공개가 되지 않음 다른 부분에는 모듈의 기능과 인터페이스만을 공개 printf(…), int getchar(), … 각 모듈이 다른 모듈에 구애받지 않고 설계 인터페이스가 모듈 안의 구체적 사항을 최소로 반영 전역변수가 없어야 모듈 단위의 수정, 시험, 유지보수에 큰 장점 모듈 설계 평가에 기초

10 단계적 분해 기능을 큰 범위에서 작은 범위로 나누어 생각 점차적으로 구체화
상세한 내역(알고리즘, 자료구조)는 가능한 뒤로 미룸 추상화 I 추상화 II 추상화 III CAD softrware tasks: user interaction task; 2-D drawing creation task; graphics display task; drawing file management task; end. procedure: 2-D drawing creation; repeat util <drawing creation task terminates> do while <digitizer interaction occurs> digitizer interface task; determine drawing request; line: line drawing task; curcle: cricle drawing task; . CAD system

11 모듈화 시스템을 여러 모듈로 분해하고 이를 하나의 시스템으로 구축하는 과정 한 모듈의 규모 이식성
1 4 1 2 3 2 1 5 4 4 5 6 3 6 2 3 5 6 문제영역 시스템 분해 시스템 구조 시스템을 여러 모듈로 분해하고 이를 하나의 시스템으로 구축하는 과정 한 모듈의 규모 이식성 모듈의 응집력(cohesion)이 높게 모듈 간의 결합력(coupling)은 약하게

12 구조적 설계 (cohesion, coupling) 데이타의 흐름 형식에 중점
시스템을 이루는 모듈들과 모듈들의 호출관계를 나타내는 구조를 파악하여 시스템을 설계하는 방법 모듈 분해의 계층적, 호출관계 지향적 접근 W. Stevens, G. Myers와 L. Constantine Functional Decomposition Design Criterion Design Heuristics + + (cohesion, coupling) 데이타의 흐름 형식에 중점 source-transform-sink: 변환 분석(transform analysis) transaction pattern: 처리 분석(transaction analysis)

13 구조적 설계(계속) 시스템 구조도(structure chart)의 도출 시스템을 모듈 단위로 분할 모듈의 계층적 구성
모듈 사이의 입출력 인터페이스 모듈의 이름과 기능 S1 S4 S5 S4 S1 S2 S3 S4 S5 S3 S1 S2 S5 Structure #1 Structure #2 Structure #3 S2 S3

14 시스템 구조도 표준 기호 한 모듈이 모듈을 호출 자료 흐름(변수나 자료구조) 제어 흐름(플래그) 모듈 반 복 선 택 주석달기
반 복 선 택 주석달기 comment Module

15 구조적 설계(계속) 예 기타 사용되는 기호 미리 정의된 모듈(라이브러리) 입출력 모듈 Main c a b A B C a f f
W X Y Z 기타 사용되는 기호 미리 정의된 모듈(라이브러리) 입출력 모듈

16 변환 분석 자료의 변환 흐름(transformation flow)
입력 흐름 출력 흐름 변환 센터 변환 분석은 자료 흐름도를 입력흐름, 변환센터, 출력흐름으로 분할하는 과정 입력 흐름: 입력을 준비하는 단계(입력, 검증...) 출력 흐름: 출력을 위하여 준비되는 단계(포매팅, 출력) 변환 센터: 실제 자료가 변환

17 변환 분석 방법 ① 자료흐름도에서 입력 자료 흐름과 출력 자료 흐름을 파악 ② 중앙 변환 부분을 식별
① 자료흐름도에서 입력 자료 흐름과 출력 자료 흐름을 파악 ② 중앙 변환 부분을 식별 ③ 변환 중심부를 축으로 최상위 구조(first-cut) 작성 ④ 각 모듈의 하위 구조도 같은 방법으로 분석 ⑤ 설계 기준을 적용하여 수정, 최적화 예: 화일 안에 포함된 단어의 개수를 계산 화일 이름 읽음 단어개수 출력 화일이름 화일 이름 검증 단어개수 편집 입력 흐름 단어개수 계산 검증된 화일이름 단어개수 출력 흐름 변환 센터

18 변환 분석(계속) 프로그램의 구조 시스템 구조도 main() { ... read_file(file_name, status);
count_word(file_name, &word_count); display(word_count); } read_file(char* file_name, boolean status) count_word(char* file_name, boolean status) display(int word_count) 시스템 구조도 단어 계산 단어개수 검증된 화일이름 화일이름 상태 단어개수 화일이름 입력,검증 단어개수 계산 단어 개수 편집,출력

19 구독자 관리 시스템 ① 자료 흐름의 요소를 분해 입력 자료 흐름, 출력 자료 흐름, 변환 센터 출력 흐름 구독자 레코드 준비
만료일 추출 만료일 계산 구독자 레코드 변경 만료일 새 만료일 입력 흐름 변경 레코드 갱신기간 구독 갱신기간 입력 레코드를 화일에 출력 변환 센터

20 구독자 관리 시스템(계속) 구조도의 최상위층 작성 구조도를 상세화 구독 갱신 시스템 구독 갱신 시스템 갱신 정보 추출
구조도의 최상위층 작성 구조도를 상세화 구독 갱신 시스템 구독 갱신 시스템 갱신 정보 추출 갱신 레코드 저장 구독 갱신 갱신 정보 추출 갱신 레코드 저장 구독 갱신 새구독 기간 입력 구독 만료일 준비 구독자 레코드 변경 레코드 화일로 출력 구독 레코드 추출 구독 만료일 추출

21 처리 분석 처리(transaction) 방법 자료 흐름도의 한 프로세스에서 여러 개의 자료 흐름이 유출되는 것
처리흐름 T 처리 경로(action path) 처리센터 방법 ① 자료 흐름도에서 처리 센터를 식별 ② 처리 모듈을 중심으로 구조도 작성 ③ 구조도를 상세화 - 하위 구조도를 작성

22 설계 평가 기준 모듈의 크기 모듈 응집력(module cohesion) 모듈 결합도(module coupling)
소규모 시스템: 함수, 서브루틴 대규모 시스템: 독립 프로그램(하나의 수행 화일) 모듈 응집력(module cohesion) 모듈 안의 요소들이 강한 응집력을 갖도록 설계 모듈 결합도(module coupling) 다른 모듈과의 결합도가 약한 모듈이 되도록 설계 설계 요령(design heuristics)

23 모듈 응집력 모듈 안의 구성 요소들이 공동의 목적을 달성하기 위하여 관련되어 있는 정도 목 표 응집력의 단계
한 모듈이 단일 기능을 갖도록 설계 <예> finishup : 최종 보고서를 출력하고, 계산 결과를 디스크에 저장 응집력의 단계 ① 기능적(functional) 모듈의 기능이 한 문장으로 떨어짐 <예> 판매세금 계산 ② 순차적(sequential) 작업의 결과가 다른 작업에 입력 <예> 거래를 읽고 마스터 화일을 변경

24 모듈 응집력(계속) ③ 교환적(communicational) <예> 출력화일을 출력하고 저장
동일한 입력과 출력을 사용하는 작업의 모임 <예> 출력화일을 출력하고 저장 ④ 절차적(procedural) 같은 범주에 속하는 일들이 순서적으로 수행 <예> restart-RTN : 총계를 출력하고, 화면을 지우고 메뉴를 뿌리고, 메뉴 선택을 받음 ⑤ 시간적(temporal) 프로그램 초기화 ⑥ 논리적(logical) 유사한 성격의 작업을 한 모듈로 모음 ⑦ 우연적(coincidential) 아무 관련 없는 작업을 한 모듈에 모음

25 모듈 결합도 모듈 간의 관련 정도 설계 목표 결합의 단계 모듈 간의 결합도가 낮게 설계
① 자료 결합(data coupling) 모듈들이 간단한 변수를 파라메터로 교환 ② 스탬프 결합(stamp coupling) 모듈 사이에 nonglobal 자료 구조를 교환 ③ 제어 결합(control coupling) 제어용 신호(flag)를 주고 받음 ④ 공통 결합도(common coupling) global variable을 사용 ⑤ 내용 결합(content coupling) 한 모듈이 다른 모듈 내의 값을 수정

26 설계 요령(design heuristics)
first-cut(최상위) 모듈의 결합은 줄이고 응집은 높이도록 최대한 노력 high fan-out은 줄이도록 노력 ...... redundancy와 complexity를 줄이기 위하여 모듈의 인터페이스를 점검

27 설계 요령(계속) 양파 모양의 구조가 일반적 모듈의 영향권을 그 모듈의 하위에 둔다 복잡한 모듈의 연결은 피함
과다한 깊이를 가진 구조도 피함 모듈의 영향권을 그 모듈의 하위에 둔다 <잘못된 예> <잘된 예> 변경된 모듈 변경된 모듈 영향받는 모듈

28 자료구조 설계 외부 화일에 대한 설계 자료설계표 화일 이름: 인사기본화일(INSA_BASIC.DAT)
화일 종류: 인덱스된 순차 화일 인덱스: primary -> employee_no secondary->name 자료 이름 자료형 자릿수 비 고 employee_no 정수형 name 문자형 sex 문자형 jumin_no 정수형 department 문자형 position 문자형 pay_grade 정수형 phone_office 문자형 phone_home 문자형 address 문자형

29 자료 추상화 기법 송장화일 = data type is create, empty-file, add-invoice, find-invoice, pull-invoice Overview 송장화일은 송장 레코드의 순서있는 모임이다. 각 송장 레코드(다른 곳에서 정의됨)는 송장 고유번호가 부여되어 있다. Operation create = proc () return (송장화일) effects 새로운 송장화일을 보내줌 empty-file = proc (ifile: 송장화일) returns (boolean) effects ifile이 비었으면 true를 보내줌 add-invoice = proc (ifile: 송장화일, i: 송장 레코드) modify ifile effects 화일에 레코드 i를 추가 find-invoice = proc (ifile: 송장화일, id: 송장고유번호) returns (boolean) requires empty-file(ifile)이 false이어야 함 effects ifile에 송장고유번호 = id인 레코드가 존재하면 true, 아니면 false를 내보냄

30 알고리즘 설계 모듈 명세서 <예> 모듈의 세부처리 모듈의 세부처리 기능을 기술한 내역
시스템 구조도의 박스에 표현되지 않은 자세한 알고리즘을 기술 모듈의 내부 자료에 대한 설명을 포함 프로그램 구조도와 함께 시스템의 동작 상태를 예측할 수 있는 근거 제공 <예> Module 소수 확인(숫자, 결과) 내부자료: .... 처리기능: 숫자보다 작은 이미 구한 모든 소수로 나누어 나머지가 0이 아니면 결과는 소수이다. 숫자 결과 소수확인

31 알고리즘 설계(계속) 상세설계의 표현 모듈 명세화 기법 설계의 표현과 코딩이 용이 할 것 수행이 가능할 것
유지보수가 용이할 것 모듈 명세화 기법 흐름도(flow chart) N-S 도표(Nassi-Schneiderman Chart) 의사 코드(pseudo code) 의사 결정표(decision table) 의사 결정도(decision diagram) PDL(Program Design Language) 상태천이도(state transition diagram) 행위도(action diagram)

32 알고리즘의 선택 정확성 효율성 모듈이 정확하게 수행되지 않는 조건을 점검 예: 음수, 0, 경계값 입력 재사용 기억 공간
처리 소요 시간 예: 1에서 N까지의 합 <방 법 1> <방 법 2> SeriesSum = SeriesSum = (1.0 + N)*(N/2.0) for Counter = 1 to N do write "The sum of the integers from 1 to N is", SeriesSum SeriesSum = SeriesSum + Counter write "The sum of the integers from 1 to N is", SeriesSum

33 알고리즘의 선택(계속) 효율성 적합성 알고리즘이 주어진 문제를 정확히 기술하였는가?
입력 갯수 복잡도(Order) 이 름 , ,000 Constant logN Logarithmic N Linear ,000 NlogN NlogN , ,000 N Quadratic , ,000, ,000,000 N Cubic ,000, ,000,000, 2n Exponential x x x103010 적합성 알고리즘이 주어진 문제를 정확히 기술하였는가? machine processible specification

34 a. 순차 b. 선택(if-then-else) c. 선택(if-then) d. 다중선택(case) e. 반복(while)
action A Decision T F action B action A action B c. 선택(if-then) d. 다중선택(case) T Decision Selector F Value 1 Value 2 Value 3 Value 4 Value 5 action A action A action B action C action D action E e. 반복(while) f. 반복(repeat-until) Condition action A action A Condition

35 N-S 도표의 표현 규칙 1. 도표는 항상 사각형 2. 도표의 제어흐음은 위에서 아래로 3. 수평으로 그어진 줄은 항상 평행
4. 빈 박스 - null statement 5. 모든 사각형은 다시 하나의 N-S도표

36 N-S 도표의 예 잡지구독 시스템의 구독 레코드처리에 대한 N-S 도표
While there are records in the correspondence file Read next correspondence Check general format T Errors F Write error message Transaction type New subscription Renewal Cancellation Other Pull sibactiber’s record Pull sibactiber’s record Call Handle New Subscription Print error message Update expire date Calculate amount of refund Call update Account Call update Account

37 N-S 도표의 장단점 장점 단점 구조적 프로그램 배우기 쉽고, 읽기 쉬우며 원시 코드로 전환이 쉬움
프로그램의 구조를 쉽게 파악할 수 있다 프로그램의 복잡도, 제어구조를 한 눈에 볼 수 있다. 단점 도표를 그려야 하는 불편함 수정이 용이하지 않음

38 의사 코드(Pseudo code) 모듈의 입출력 자료, 내부 자료, 수행 절차 등을 알고리즘의 형태로 기술
실제 프로그램과 유사하나 특정 프로그래밍 언어에 독립적 전문적 용어의 사용은 가능하지만 프로그래머의 고유한 스타일이나 특성이 무시될 수 있슴 의사 코드를 쓰는 방식이 다를 수 있으므로 한 프로젝트 안에서 표준을 만들 필요가 있슴

39 구조적 영어와 의사코드의 비교 특성 구조적 언어 의사 코드 논리 구조 동일한 논리 구조 사용 - 순차 - 선택 - 반복
특성 구조적 언어 의사 코드 논리 구조 동일한 논리 구조 사용 - 순차 - 선택 - 반복 사용 단계 분 석 단 계 설 계 단 계 명세 대상 자료 흐름도 상의 설계 구조도 상의 최소 단위로 처리 모든 모듈 명세 방법 사용자 중심 프로그래머 중심 상세 정도 처리의 기본적인 모듈의 기본적인 기능 기능 수행 절차 수행 절차 및 세부적 방법

40 의사 코드의 사례 모듈명세서 고용자 레코드 = 급여형태 + 성명 + 주간근무시간 급여형태 = [1|2|3] 주급계산
고용자레코드 주급총액 고용자 레코드 = 급여형태 + 성명 + 주간근무시간 급여형태 = [1|2|3] 주급계산 모듈명세서 Module 주급계산(고용자 레코드; 주급총액) Assume 1<급여형태<3 0<주간 근무 시간<100 End Assume Define Rate: Real /* 시간 당 급료 */ Endefine If (급여형태=1) Then Rate=4.2 Elseif (급여 형태=2) Then Rate=6.0 Else Rate=9.0 Endif Select Using (주간근무시간) From Case (1-40): 주급총액=주간근무시간*Rate Case (41-50): 주급총액=(주간근무시간*Rate)*0.5 Case (51-99): 주급총액=(주간근무시간*Rate)*1.0 Endselect End Module

41 의사 결정도 <예> 의사 결정표 근속년수 연봉 저축허용비율 직원저축정책 1년 미만 $20,000 미만 → 5%
근속년수 연봉 저축허용비율 직원저축정책 1년 미만 $20,000 미만 → 5% $20,000 이상 → 4% 1년 이상 $30,000 미만 → 6% $30,000 이상 → 5% 의사 결정표 근속연수 1년 미만 1년 이상 1년 미만 1년 이상 연봉(천$) <20 >=20 <30 >=30 허용비(%) 5 4 6 5

42 자료 구조 설계 자료구조의 구체적인 설계 자료구조의 원칙 정보은닉 자료 추상화
<예> 인사기록 마스터 int Sawon_no; char Name[10]; int Depart; int Position; ... 자료구조의 원칙 정보은닉 중요한 자료구조에 직접 접근하고 변경하는 것을 피함 자료 추상화 사용자 정의 타입을 사용

43 사용자 인터페이스 설계 사용자 분석 대화설계 원리 메뉴 선택 양식 채움(form-fill) 인터페이스 명령어 방식 직접 조작
화면 설계시 주의 사항

44 사용자 인터페이스 사용자 인터페이스의 중요성 사용자 인터페이스의 평가 기준 초기의 컴퓨터: 알고리즘이 중요
최근의 컴퓨터: 사용자의 입장이 중요 사용자 인터페이스의 평가 기준 1) 배우기 쉬움 2) 속도 3) 사용 중 오류의 빈도 4) 사용자의 만족 5) 사용법의 유지

45 사용자 분석 시스템의 최종 사용자에 대한 지식 나이, 인원 컴퓨터에 대한 기본 지식, 동기
사용자의 부류(초보자, 능숙하지 못한 사용자, 전문가) 다양한 사용자 부류

46 대화설계 원리 일관성이 유지되어야 한다 익숙한 사용자에게는 지름길을 사용자에게 유익한 정보는 feedback시킨다
용어, 문법, 화면설계 메뉴, 시스템 메시지, 설명서에 같은 의미와 용어 오류 메시지 익숙한 사용자에게는 지름길을 사용자에게 유익한 정보는 feedback시킨다 시스템의 반응 대화의 종결을 표시하도록 설계한다 지시의 종결을 표시 지시의 취소 단순한 오류를 처리하는 기능 undo 시스템에 지시한 것을 바꾸기 쉽도록 사용자 중심의 상호작용이 되도록 설계

47 메뉴 선택 초급이나 중급 사용자에게 적합 메뉴의 구조, 동작, 배치를 고려 메뉴 항목의 분류가 중요 메뉴의 종류 계층구조
선형구조 네트워크 구조 메뉴 항목의 분류가 중요 논리적으로 같은 항목은 같은 범주에 모든 경우를 포함하여 분류 중복된 항목은 피한다 익숙하지 않은 항목은 피한다 메뉴의 종류 단일화면 메뉴 풀 다운 메뉴 고정 메뉴

48 양식 채움(form-fill) 인터페이스
자료 입력에 많이 쓰임 자료 항목, 위치, 길이 어느 정도의 교육이 필요(중급, 고급 사용자에게 적합) 화면 설계 관련 항목을 모음 화면 이름 작성 화면의 배치(항목의 순서) 입력 자료 항목의 길이 정렬 선택적 항목 항목 간의 이동 오류의 정정

49 명령어 방식 정형적 언어(formal language) 운영체제, 텍스트 편집기, 모험 게임 등에 자구 사용
고급 사용자에 적합 어휘, 문법규칙, 명령어의 의미를 익혀야 함 융통성있게 창의적으로 시스템에 지시 <예> vi의 명령어 ^F 앞으로 한 화면 전진 ^B 뒤로 한 화면 후퇴 ^D 반 화면 내림 ^U 반 화면 올림 G 정해 준 줄로 커서를 옮김 /pattern pattern과 같은 다음 줄로 커서를 옮김 ?pattern pattern과 같은 바로 전 줄로 커서를 옮김

50 명령어 설계시 주의 사항 1. 명령어의 갯수를 가능하면 적게 한다. 2. 의미 있고 구별되는 이름
3. 약자는 일관성 있게 사용 4. 약자가 사용되더라도 명령어가 제대로 작동 5. 문법 구조는 일관성 6. 초보자를 위하여 문법규칙을 프롬프트로 안내 7. 명령어 메뉴는 중급 사용자에게 도움이 된다.

51 직접 조작 간략화된 작업환경을 보여주고 그 속의 객체를 직접 조작 아이콘으로 객체가 표현
간략화된 작업환경을 보여주고 그 속의 객체를 직접 조작 아이콘으로 객체가 표현 편집기, 비디오 게임, 터치 스크린, 윈도우 시스템 마우스나 조이스틱을 사용 What you see is what you get(WYSIWYG) 설계시 고려사항 아이콘은 이해하기 쉬워야 잘못된 유추는 피해야 사용자 계층의 관습에 따라 설계 아이콘은 알맞는 목적에 사용되어야 조화 및 일관성, 배치가 중요

52 화면 설계시 주의 사항 1. 사용자의 특성을 염두에 둔다
2. 논리적으로 관련 있는 항목은 반전, 글자꼴, 색상으로 구별하기 쉽게 한다. 3. 정보를 조직적으로 표현하기 위하여 다양한 정렬 방식 사용 4. 다중화면의 경우 화면사이의 일관성이 중요

53 시스템 설계서 작성 1. 개요 3.5 사용하는 화일 4. 화일 구조 또는 데이타베이스 설계
1. 개요 1.1 시스템의 목표 1.2 하드웨어, 소프트웨어 1.3 소프트웨어의 주요 기능 1.4 설계상 제약사항 1.5 참조된 개발문서 2. 시스템 구조 2.1 시스템 구조 개요 2.2 시스템 구조도 2.3 자료사전 3. 모듈 설계(각 모듈에 대한) 3.1 모듈이름 3.2 모듈형 3.3 인터페이스 3.4 오류메시지 3.5 사용하는 화일 3.6 호출하는 모듈 3.7 기능설명 4. 화일 구조 또는 데이타베이스 설계 4.1 외부 화일(데이타베이스)의 논리적 구조 4.2 공유 자료 4.3 화일 접근 방법(데이타베이스 관리체제) 5. 요구분석 참조표 6. 제약사항 7. 참고사항 참고문헌 부록


Download ppt "Class 4: 설계."

Similar presentations


Ads by Google