Category Archives: software architecture

또 하나의 지표 – Bob 삼촌의 Instability, Abstractness


소프트웨어 아키텍처 메트릭

Architecture 101

지표란 직접 경험을 하지 않아도 현재의 상황을 알수 있는 도구를 말합니다. 옛날 제주도에서는 식수가 귀해 빗물을 식수로 사용을 했습니다.  빗물의 오염도를 파악하기 위한 지표로, 개구리 (숫놈끼리만 넣거나, 암놈끼리만 넣거나)들을 넣었다고 합니다.

개구리 들이 벌레들을 잡아먹어 물이 항상 청결한 상태를 유지할 수 있었으며, 또한 개구리의 생존 여부로 물 오염도를 파악을 할수 있기 때문입니다.

일전에 소프트웨어 품질을 판단하는 지표로,  1000 피트의 뷰 라는 글을 소개해 드렸습니다.    너무 상세하지도 않고, 너무 추상화되어 있지도 않은 그 사이의 뷰를 1000 피트의 뷰라고 불렀습니다.

이러한 지표중 하나로, 예전 저의 포스트에서  Dependency Structure Matrix (DSM) 을 소개해 드렸습니다.

이번 포스트는 이러한 연장선상으로 Clean Code로 유명하신 Robert C. Martin (줄여서 Uncle. Bob)님이  만드신 Instability/Abstractness Graph 하나를 설명해 드리고자 합니다. (이 그래프에 대해 국내에 명확하게 소개된 자료가 없어서,  꼭 여러분에게 공유를 해드릴려고 합니다. )

이 포스트를 읽기 이전에  Bob 삼촌이 발표하신 패키지 구조의 원칙들(Principles of Package Architecture) 을 읽어보시거나, 또는 저의 이전 포스트인 Dependency를 관리하는…

View original post 512 more words

Toyota 적나라하게 다 보여줬구나!


National Highway Traffic Safety Administration Toyota Unintended Acceleration Investigation –
Appendix A. Software

 

모든 것을 다 보여줬다. 물론 그것이 공개되진 않았지만,,

이렇게 다 까발랐는데 Toyota는 부끄럽지 않나? 맨 몸뚱아리 다 보여준거 같은 느낌..

결국 고급 기술은 public으로 공개되진 않았지만, 미국 자동차의 기술개발에 기여할 거 같은 생각이 든다.

어쨌거나, public으로 공개된 것도 나에겐 유용했고, 화끈하게 보여줘서 고맙다는 인사를..ㅋㅋ

Toyota sW

http://www.mindmeister.com/504400554/toyota-sw

Guidelines for Assessing Software Partitioning Protection Schemes


출처: Cast-2

그런데, 아래의 체크리스트만 있다고 만족되는 것은 아니다. 부분적으로 cover된다는 것이고,

다른 reference들도 참조해봐야 한다.

 

카테고리 체크리스트
Time Interrupts를 사용하지 않거나, 사용하는 경우 interrupt가 발생하더라도 task의 올바른 동작을 입증할 수 있다.
무한 루프가 발생하지 않거나 혹 발생하더라도 이를 탐지하고 오류를 처리할 수 있는 매커니즘이 있다.
real time correspondence:
(1) frame overrun이 발생하지 않음을 보장할 수 있다.
(2) real time clock에 의해 task의 동작이 영향을 받지 않음을 입증할 수 있다.
(3) counter/timer corruption이 발생하지 않거나 발생할 경우 이를 처리할 수 있음을 보장할 수 있다.
(4) pipeline and caching에 의해 task의 동작이 영향을 받지 않음을 입증할 수 있다.
Control Flow defects(timing aspects)
(1) 다른 partition이나 보호영역으로 incorrect branching이 발생하지 않음을 보장할 수 있다.
(2) corruption of a jump table으로 인해 task의 동작이 영향을 받지 않음을 입증할 수 있다.
(3) 프로세서 sequence control의 corruption로 인해 task의 동작이 영향을 받지 않음을 입증할 수 있다.
(4) corruption of return addresses가 발생하지 않음을 입증할 수 있다.
(5) unrecoverable hardware state corruption (e.g., mask and halt)가 발생하지 않음을 입증할 수 있다. (혹은 발생시 이를 탐지하고 처리할 수 있음을 보장할 수 있다.
Memory, I/O contention(경합)이 발생하지 않음을 보장할 수 있다.
Data flags가 발생하지 않음을 보장할 수 있다.
Software traps
(1) divide by zero가 발생하지 않음을 보장할 수 있다.
(2) un-implemented instruction가 발생하지 않음을 보장할 수 있다.
(3) specific software interrupt instructions 가 발생하지 않음을 보장할 수 있다.
(4) unrecognized instruction이 없음을 보장할 수 있다.
(5) Recursion termination이 없음을 보장할 수 있다.
Indirect non terminating call loops가 없음을 보장할 수 있다.
Holdup commands (performance hedges)가 없음을 보장할 수 있다.
Deterministic scheduling (processor and communication)임을 보장할 수 있다.
Guaranteed access for each software partition to a prescribed set of hardware resources for a prescribed period of time and at a prescribed rate and, if necessary, at a prescribed point in time을 보장할 수 있다.
Space Loss of input or output data가 없음을 보장할 수 있다.
Corruption of input or output data 의 없음을 보장할 수 있다.
Corruption of internal data의 없음을 보장할 수 있다.
(1) direct or indirect memory writes 의 없음을 보장할 수 있다.
(2) table overrun의 없음을 보장할 수 있다.
(3) incorrect linking의 없음을 보장할 수 있다.
(4) calculations involving time의 없음을 보장할 수 있다.
Delayed data의 없음을 보장할 수 있다.
Program overlays의 없음을 보장할 수 있다.
Buffer sequence (double jeopordy)의 없음을 보장할 수 있다.
External device interaction (e.g. displays)의 없음을 보장할 수 있다.
(1) loss of data (e.g. overwritten)의 없음을 보장할 수 있다.
(2) delayed data의 없음을 보장할 수 있다.
(3) incorrect data (unlikely across systems) 의 없음을 보장할 수 있다.
(4) protocol halts (e.g. ack nacks)의 없음을 보장할 수 있다.
Control Flow defects (space aspects)의 없음을 보장할 수 있다.
(1) incorrect branching into a partition or protected area 의 없음을 보장할 수 있다.
(2) corruption of a jump table (double duty?) 의 없음을 보장할 수 있다.
(3) corruption of the processor sequence control의 없음을 보장할 수 있다.
(4) corruption of return addresses의 없음을 보장할 수 있다.
(5) unrecoverable hardware state corruption (e.g., mask and halt)의 없음을 보장할 수 있다.
Protection of code memory, data memory, registers, and input/output buffers을 보장할 수 있다.
Persistent storage locations (e.g., data memory), assigned to a software partition, write-able only by that partition.  의 없음을 보장할 수 있다.
Context data (e.g., processor registers, CPU-caches) used by a task preserved or flushed as appropriate when control is transferred to another partition.의 없음을 보장할 수 있다.