Software Development Process

1. Feasibility Study - 기술적인 관점에서 실현가능성을 확인한다.

2. Requirements Analysis & Specification - 요구사항을 정의한다.

3. Design 

4. Coding & Unit Testing

5. Integration & System testing

6. Delivery & Maintenance


Software Qualities - Definitions

The degree to which the attributes of software enable it to perform its intended end use. (DoD, 1985)

- 사용자의 요구를 제대로 수행하고 attributes of software 즉, 문서나 데이터 등이 제대로 정립되었는가?

The totality of features and characteristics of a product or a service that bear on its ability to satisfy specified or implied needs. (ISO, 1986)

- 소프트웨어가 고객의 요구를 제대로 만족시킬수 있는 능력이다.

Fitness for needs ( Kitchenham, 1986)

- 고객의 요구에 적합한가?


Why software quality is different from other types of quality?

software has no physical existence - 물리적으로 존재하는 것이 아니기 때문이다.

The lack of knowledge of client needs at the start - 요구에 대한 지식이 부족하다. (소프트웨어는 여러 분야에 활용된다.)

The change of client needs over time. - 고객의 요구가 변경된다.

The high expectation of customers. - 고객이 기대치가 높다.


Qualities Classification

External and Internal Qualities, Product and Process Qualities

External Quality - 사용자의 기준에서 (UI 나 시스템 성능 등)

Internal Quality - 개발자 기준에서 ( 모듈화나 가독성 등)

Product Quality - 소프트웨어 자체에서 Functionality, Usability, Efficiency, Reliability 등..

Process Quality - 소프트웨어 개발 절차에서 Effectiveness of methods, tools, Use of standards, Managements 등..


Representative Qualities


 Correctness

 기능 명세에 따라 잘 작동하면 Correct 하다고 할 수 있다.

 Reliability

 유저가 의존하게 될 때 신뢰성 있다고 한다. 상대적인 관점이다. 

 측정 방법은 MTTF(mean time to failure, 에러 횟수), MTBF(mean time between failure, 에러 발생 정도)

 Robustness

 요구사항 명세서에서 예측할 수 없었던 상황에서도 잘 동작하면 Robust 하다고 할 수 있다.

 Performance

 시간과 공간에 대해서 효과적으로 동작하는 것

 측정 방법은 Monitoring , Analysis , Simulation 등이 있다.

 User Friendliness

 Ease to use. (유저가 사용하기 편하도록) 

 Verifiability

 분석(수학적인 방법)이나 테스팅을 통하여 verified 받아야 한다.

 Maintainability

 Corrective(수정해야 하는 것), Adaptive (환경이 변화할때), Perfective( 소프트웨어 구조를 바꿀  때), Preventive (미리 대처하는 것) . 즉 Repairability and Evolvability 가 있어야 한다.

 Repairability - Right modularization 등을 통해 에러를 최대한 빨리 고칠 수 있어야 한다.

 Evolvability - 시스템이 계속 발전할 때 설계가 잘 되어있으면 쉬워진다.

 Reusability

 새로운 프로젝트에 기존에 있는 컴포넌트를 사용하는 것.

 Portability

 다른 환경에서도 동작하는 것. 플랫폼마다 모듈화를 하여 이룰 수 있음. 

 Understandability

 제품 내부의 품질로 개발자가 원하는 것. (유지보수성을 위해)

 Interoperability

 다른 시스템과 협력할 수 있는 것.

 Productivity

 프로그래밍 언어와 관계 없이 요구 기능을 얼마만큼의 시간안에 해낼 수 있는가.

 측정하는 방법: FP(function point) 또는 SLOC (software line of code) 

 Timeliness

 제한된 시간안에 배포하는 것. (careful scheduling, accurate work estimation, clearly specified  milestones이 요구된다.) , 요구사항이 자주 변경될 수 있으므로 단계적(조금씩)으로 배포한다. 

 Visibility

 문서화하여 모든 단계를 볼 수 있는 것. 팀장의 의사결정에도 필요하며, 프로젝트의 진척도 및 문제  점을 쉽게 파악할 수 있다. 



Quality Requirements in Specific Apllication Areas


 Information Systems 

 ex) banking systems, library-cataloging systems..

 Data integrity, Security, Data availability, Transaction performance, User friendliness

 정보시스템에서는 자료보존이나 보안 등이 중요하다.

 Real-time Systems 

 ex) factory-monitoring systems, missile guidance systems...

 Deadline, Priority, Respond time requirements, Safety

 실시간 시스템에서는 정해진 시간안에 정확하게 반응해야 한다.

 Distributed Systems 

 ex) middleware in client-server systems..

 System availability, Code mobility

 분산시스템에서는 작업할당 및 분할이 중요하다.

 Embedded Systems 

 ex) Airplanes, robots, microwave ovens...

 Reliability, Adaptability, Memory and performance efficiency



소프트웨어 품질이 중요한 이유.

소프트웨어 공학이라고 하는 것은 결국 소프트웨어 품질을 향상시키기 위해서 존재한다.

제품의 품질을 높인다는 것은 고객의 요구를 완벽하게 이루어내고 품질을 높여 수익을 증대시키기 때문이다.

소프트웨어 품질을 측정하는 방법의 한 예는 Mecabe's cyclomatic complexity 를 들 수 있다.

control flow graph를 이용하여 소프트웨어 복잡도를 수치화 한다.

V(G) = E- N+ 2*P 로 표현할 수 있다. ( E: Edge, N: Node, P: connected compotents)


마지막으로 소프트웨어 품질은 요구사항에 얼마나 적합한가를 나타낸다.




 
블로그 이미지

laboputer

소프트웨어를 전공하는 대학생

카테고리

전체보기 (24)
Programming with C# (15)
storage of informati.. (1)
Algorithm (1)
학교수업 (7)