문제

고객은 소프트웨어 요구 사항을 수집하기위한 웹 기반의 풍부한 인터넷 애플리케이션을 구축하기를 원합니다. 기본적으로 이해 관계자로부터 요구 사항을 얻기위한 특정 프로세스를 따르는 웹 기반 케이스 도구입니다. 저는 프로젝트 관리자이고 우리는 여전히 프로젝트의 초기 단계에 있습니다.

나는 내 고객과 개발자 모두를위한 도구 요구 사항을 명확히하기 위해 공식적인 방법을 사용하는 것에 대해 생각하고 있습니다. 공식적인 방법으로 나는 수학적으로 기반을 둔 어떤 형태의 모델링을 의미합니다. 내가 읽고 고려중인 것들 중 일부는 Z를 포함합니다.http://en.wikipedia.org/wiki/z_notation), State Machines, UML 2.0 (아마도 확장증이있는 것과 같은 OCL), 페트리 그물, 및 계약 및 사전 및 사후 조건과 같은 일부 코딩 수준의 물건. 내가 고려해야 할 다른 것이 있습니까?

개발자는 경험이 있지만 사용 된 형식주의에 따라 수학을 배워야 할 수도 있습니다.

나는이 프로젝트에서 공식적인 방법을 사용하는 것이 가치가 있는지 여부를 결정하려고 노력하고 있습니다. 나는 "그것이 의존한다"는 것을 알고 있으므로 나에게 가장 유용한 대답은 예/아니오이며지지하는 주장입니다.

이 프로젝트에 있으면 공식적인 방법을 사용 하시겠습니까?

도움이 되었습니까?

해결책

나는 내 고객과 개발자 모두를위한 도구 요구 사항을 명확히하기 위해 공식적인 방법을 사용하는 것에 대해 생각하고 있습니다.

공식적인 방법 경험을 가진 개발자는 거의 없습니다. 공식적인 방법 교육을 가진 고객을 본 유일한 시간은 우리가 포팅 할 때 Zug 회원이었습니다. 카디즈 창에.

공식적인 방법으로 나는 수학적으로 기반을 둔 어떤 형태의 모델링을 의미합니다. 내가 읽고 고려중인 것들 중 일부는 Z를 포함합니다.http://en.wikipedia.org/wiki/z_notation), State Machines, UML 2.0 (아마도 OCL과 같은 확장), Petri Nets 및 계약 및 사전 및 사후 조건과 같은 일부 코딩 레벨 항목. 내가 고려해야 할 다른 것이 있습니까?

Z 사이에는 매우 큰 간격이 있으며, 이는 정해진 이론에 근거한 공식적인 방법 인 UML과 UML은 일부 반 공식 표기법 (상태 머신)이 태그 된 비공식 표기법입니다.

소프트웨어 요구 사항 도구를 사용하여 찾을 것으로 예상되는 일부 기술 클라이언트는 UML에 매우 편안합니다.

도메인의 Z 모델을 만드는 가치가있을 수 있으며 클라이언트와 서버 간의 메시징의 Pi-Calculus 모델을 만드는 데 가치가있을 수 있지만 PI가 더 단순하고 강력하다는 것을 알게됩니다).

도메인의 Z 모델이 제공하는 것은 공통 구현 언어의 유형 시스템보다 더 강력하게 표현되는 구현 독립 유형 제약 세트입니다.

메시징의 공식적인 모델이 제공하는 것은 업데이트를 잃지 않거나 충돌이나 교착 상태를 얻지 않도록 분석을 실행할 수있는 시설입니다.

UML 모델이 제공하는 것은 대형 시스템을 기능 영역 (패키지 다이어그램)으로 나누기위한 표기법이며, 해당 영역의 클래스가 서로 정적으로 (클래스 다이어그램)의 관계를 보여주고 해당 클래스의 인스턴스가 동적으로 어떻게 관련되는지 보여주는 방법입니다. 순서, 활동 및 상호 작용 다이어그램) 및 패키지가 배포되는 방법 (구성 요소 및 배포 다이어그램)을 보여줍니다. 이들은 팀의 의사 소통에 유용하고 아이디어를 약간 살펴 보는 데 유용하지만 매우 정교한 분석을 허용하는 공식적으로 정의 된 의미는 없습니다.

제가 90 년대에 함께 일한 Z 전문가들은 Z의 우스꽝스러운 사례 GUI를 지정한다는 아이디어를 고려했습니다. 이러한 GUI에 대한 UML 모델을 만드는 것은 일반적입니다.

나는 공식적인 설계 별 사전 및 사후 조건을 사용하지 않았지만 때로는 주석과 자주 주장에 추가 할 수 있으며,이를 위반할 수있는 단위 테스트 조건을 자주 추가합니다.

다른 팁

여기서 묻는 진정한 질문은 사용 여부가 아니라 얻고 잃어버린 것입니다.

생산성과 결과가 필요한 복잡성과 학습보다 중요합니까?

일반적으로 팀이 편안한 것을 사용해야합니다. 새로운 항목을 사용하면 학습 곡선이있을 것입니다. 즉, 프로세스와 실수에 대한 질문이 있습니다. 개발 타임 라인의 일부는 이러한 문제를 해결하는 데 사용될 것이며, 앞으로이 팀과 함께 사용할 계획이 없다면 실제로 새로운 것을 소개하여 장기적인 이익을 얻지 못할 것입니다. 변경 프로세스에는 오랜 시간이 걸리고 많은 작업이 필요합니다.

이러한 문제를 처리하기에 충분한 시간을 추정 한 경우 괜찮을 수 있습니다 ..... 추정이 정확하다면. 당신 이이 사람들과 함께 일하지 않았다는 것을 고려할 때 (적어도 그것은 당신의 게시물이 들리는 것입니다), 당신의 타임 라인이 정확하지 않을 것입니다. 새로운 프로세스를 소개하지는 않습니다.

당신이 스스로에게 물어봐야 할 또 다른 질문은 "당신이 구현하고 싶은 과정에 얼마나 편안합니까?"입니다. 내가해야한다면 팀을 끌어 당길 수 있다는 것을 알지 못한다면 프로젝트에서 새로운 프로세스를 소개하지 않습니다. 때때로 새로운 것을 시도하는 것은 좋지만, 당신은 단단한 상황을 탐색하는 방법을 알아서 편한 팀이 있어야합니다.

나는 미션 크리티컬이지만 생명/안전 중요하지 않은 응용 프로그램에 대한 '경량'공식 방법에 대한 몇 가지 접근법을보고 있습니다. 몇 가지 아이디어 :

ACSL (ANSI C 사양 언어)을 사용하는 성공적인 예는 성숙한 도구 세트를 가지고 있으며 대부분은 Platform, Frama-C와 같은 오픈 소스입니다. Java의 경우 JML (Java Modeling Language)이라는 유사한 기술. 둘 다 내장 응용 프로그램의 중소 규모 프로젝트에 사용되며 코드에 약간의 보증을 추가하는 데 도움이되지만 사양 검증을 목표로하지는 않습니다. Z는 절대적으로 사용자 친화적이지 않으며 적절한 도구 지원 IMHO가 부족합니다.

사양 단계에서 사용할 수있는 상용 도구 중에서 B- 메드를 기반으로하는 Rodin 플랫폼을 살펴 봅니다.

여기 게임 후반에 있지만 당신은 다음과 같은 것을 고려할 수 있습니다 Savara를 통한 테스트 가능한 아키텍처 우리는 구성 요소 간의 의사 소통 또는 상호 작용의 우세가있는 많은 프로젝트에 사용합니다. 이것은 웹 프론트 엔드로의 SOA 백엔드에서 가장 자주 볼 수 있습니다.

그것은 공식적으로 pi-calculus에 접지되어 있으며 그것을 사용하기 위해 pi-calculus를 이해할 필요가 없습니다.

나는 Tom과 완전히 동의하고 같은 질문을합니다.

생산성과 결과가 필요한 복잡성과 학습보다 중요합니까?

제 생각에는 시스템/소프트웨어가 "안전 크리티컬"공식 방법으로 식별 될 수 없다면 불필요합니다.

안전한 의미 :

컴퓨터 시스템의 실패가 인간의 생명 손실, 환경 손상 또는 시스템 자체 손상과 같은 치명적인 결과를 초래할 때, 그러한 시스템은 "안전 크리티컬"이라고합니다.

나는 Tom과 Abufardeh에 동의합니다 - 생산성과 결과가 필요한 복잡성과 학습보다 더 중요합니까?

또한 개발 전에 모든 요구 사항을 얻는 데 더 나은 Methd가 더 좋습니다 (AMD는 이러한 요구 사항이 잘 정의되고 테스트 가능하도록합니다)? 모든 요구 사항을 먼저 얻는 것은 상식처럼 보이지만 많은 비율의 프로그램이 병렬로 일을합니다. 나중에 요구 사항을 얻는 데 아무런 문제가 없다고 생각합니다. 요구 사항 크리프는 악몽입니다! 영화 "The Pentagon Wars"는 동의하지 않는 사람에게 눈을 뜨게합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top