설명하는주기는 정상입니다. 상황을 개선하는 방법은이주기를 피하는 것이 아니라 간소화하는 것입니다. 첫 번째 단계는 다음을 수락하는 것입니다.
- 프로젝트의 첫날에 모든 것을 아는 것은 거의 불가능합니다 .
- 당신이 어떻게 든 모든 것을 알고 있더라도 프로젝트를 마칠 때까지 (고객의 요구 사항, 고객의 시장, 협력하는 기술, 고객의 희망 사항) 무언가 가 바뀌고 만들어 질 것입니다 당신이 잘못했거나 잘못 알고있는 것의 적어도 일부.
따라서 모든 것을 미리 계획하는 것은 불가능하며, 가능하다면 그 계획을 따르면 불완전하거나 쓸모없는 것을 만들게 될 것입니다. 이를 알면 변경 사항을 계획에 통합합니다. 당신의 단계를 보자 :
- 몇 가지 사용 사례로 시작
- 코딩 시작
- 내가 잘 처리하지 못하고 현재 코드베이스에 적합하지 않은 몇 가지 사항을 실현하십시오.
- 코드의 대부분을 다시 작성
그것은 실제로 좋은 출발점입니다. 내가 접근하는 방법은 다음과 같습니다.
1. 몇 가지 사용 사례로 시작
좋은. "사용 사례"라고하면 소프트웨어가 무엇인지에 집중하고 위해 . "몇 개"라고 말하면 모든 것을 발견하려는 것이 아닙니다. 관리 가능한 양의 작업을 고수하고 있습니다. 여기에 추가 할 것은 우선 순위를 정하는 것입니다. 고객 또는 최종 사용자와 함께이 질문에 대한 답을 찾으십시오.
상황을 개선 할 수있는 가장 작고 간단한 소프트웨어는 무엇입니까?
이 제품 은 최소한의 실행 가능한 제품입니다 . 이보다 작은 것은 사용자에게는 도움이되지 않지만 너무 큰 계획은 너무 빨리 계획됩니다. 이를 구축하기에 충분한 정보를 얻은 다음 계속 진행하십시오. 이 시점에서 모든 것을 알 수는 없습니다.
2. 코딩을 시작하십시오.
큰. 당신은 가능한 빨리 일하게됩니다. 코드를 작성할 때까지 고객은 전혀 혜택을받지 못했습니다. 계획에 더 많은 시간을 투자할수록 고객이 투자금을 지불하지 않고 기다리는 데 더 오랜 시간을 소비했습니다.
여기에 좋은 코드 를 작성하라는 알림을 추가합니다 . SOLID Principles를 기억하고 따르고, 깨지기 쉬운 곳이나 복잡한 곳에서 적절한 단위 테스트를 작성하고, 잊어 버리거나 나중에 문제를 일으킬 수있는 것을 기록하십시오. 변경으로 인해 문제가 발생하지 않도록 코드를 구성하려고합니다. 이렇게하려면 때마다 당신이 뭔가를 구축하기로 결정하게 이 방법 대신 이 가능한 한 적은 코드가 그 결정에 의해 영향을받는 있도록 코드를 구성, 방법. 일반적으로이를 수행하는 좋은 방법은 코드를 분리하는 것입니다.
- 언어와 상황에 따라 단순하고 개별적인 구성 요소를 사용하십시오.이 구성 요소는 함수, 클래스, 어셈블리, 모듈, 서비스 등일 수 있습니다. 함수가 많은 클래스 또는 클래스가 많은 어셈블리)
- 각 구성 요소는 하나의 작업 또는 하나의 작업과 관련된 작업을 수행합니다.
- 한 구성 요소의 내부 작동 방식 변경으로 다른 구성 요소를 변경하지 않아야 함
- 구성 요소는 가져 오거나 작성 하지 않고 사용하거나 의존하는 것을 제공 해야 합니다.
- 구성 요소는 정보를 가져 와서 작업을 직접 수행하는 대신 다른 구성 요소에 정보를 제공 하고 작업을 요청해야 합니다.
- 구성 요소는 다른 구성 요소의 내부 작동에 액세스하거나 사용하거나 의존해서는 안됩니다. 공개적으로 액세스 가능한 기능 만 사용하십시오.
이렇게하면 대부분의 경우 한 곳에서 문제를 해결할 수 있고 나머지 코드는 눈에 띄지 않도록 변경의 영향을 격리하게됩니다.
3. 디자인에 문제가 있거나 단점이 있습니다.
일어날 것입니다. 불가피하다. 이것을 받아들이십시오. 이러한 문제 중 하나에 부딪 치면 어떤 종류의 문제인지 결정하십시오.
일부 문제는 소프트웨어의 기능을 수행하기 어려운 코드 또는 디자인의 문제입니다. 이러한 문제의 경우 문제를 해결하려면 돌아가서 디자인을 변경해야합니다.
일부 문제는 충분한 정보가 없거나 이전에 생각하지 못한 것을 가지고 있기 때문에 발생합니다. 이러한 문제의 경우 사용자 또는 클라이언트로 돌아가서 문제 해결 방법을 물어보십시오. 답을 찾으면 디자인을 업데이트하여 처리하십시오.
두 경우 모두 코드의 어떤 부분을 변경해야하는지주의를 기울여야하며, 더 많은 코드를 작성할수록 향후 어떤 부분을 변경해야하는지 생각해야합니다. 이렇게하면 어떤 부품이 서로 연결되어 있는지, 어떤 부품을 더 격리해야하는지 쉽게 파악할 수 있습니다.
4. 코드의 일부를 다시 작성하십시오
코드를 변경하는 방법을 확인한 후에는 변경할 수 있습니다. 코드를 잘 구성했다면 일반적으로 하나의 구성 요소 만 변경해야하지만 경우에 따라 일부 구성 요소를 추가해야 할 수도 있습니다. 많은 곳에서 많은 것을 바꿔야한다는 것을 알게되면 왜 그런지 생각해보십시오. 이 코드를 모두 내부에 유지하는 구성 요소를 추가 한 다음 모든 장소에서 해당 구성 요소를 사용하도록 할 수 있습니까? 가능하면 다음에이 기능을 변경해야 할 경우 한 곳에서 수행 할 수 있습니다.
5. 테스트
소프트웨어 문제의 일반적인 원인은 요구 사항을 충분히 알지 못하기 때문입니다. 이것은 종종 개발자의 잘못이 아닙니다. 종종 사용자는 자신에게 필요한 것이 무엇인지 모릅니다. 이 문제를 해결하는 가장 쉬운 방법은 질문을 뒤집는 것입니다. 이 단계를 수행 할 때마다 "소프트웨어가 무엇을해야합니까?"라고 묻는 대신 지금까지 구축 한 내용을 사용자에게 제공하고 "내가 이것을 구축했습니다. 필요한 작업을 수행합니까?" 그들이 예라고 대답하면, 당신은 그들의 문제를 해결하는 것을 만들었고, 당신은 일을 멈출 수 있습니다! 그들이 '아니오'라고 대답하면 소프트웨어에 어떤 문제가 있는지 좀 더 구체적인 용어로 알려줄 수 있으며, 특정 사항을 개선하고 더 많은 피드백을 얻기 위해 다시 올 수 있습니다.
6. 배우다
이주기를 진행하면서 찾고있는 문제와 변경 사항에주의를 기울이십시오. 패턴이 있습니까? 향상시킬 수 있습니까?
몇 가지 예 :
- 특정 사용자의 관점을 간과 한 것을 계속 발견하면 해당 사용자가 디자인 단계에 더 관여하게 할 수 있습니까?
- 기술과 호환되도록 항목을 계속 변경해야하는 경우 코드와 해당 기술 사이의 인터페이스를 구현하여 인터페이스 만 변경하면됩니까?
- 사용자가 UI의 단어, 색상, 그림 또는 기타 사항에 대해 계속 마음을 바꾸는 경우 나머지 응용 프로그램에 모두 한곳에 있도록 구성 요소를 제공하는 구성 요소를 만들 수 있습니까?
- 많은 변경 사항이 동일한 구성 요소에있는 경우 구성 요소가 하나의 작업에만 집중되어 있습니까? 몇 개의 작은 조각으로 나눌 수 있습니까? 다른 부품을 건드리지 않고이 구성 요소를 변경할 수 있습니까?
민첩하게
당신이 여기로 나아가고있는 것은 애자일 (Agile)로 알려진 작업 스타일입니다. 애자일은 방법론이 아니며, 많은 것들 (Scrum, XP, Kanban 등)을 통합 한 방법론의 모음입니다. 변경을 피하거나 무시하지 않고 변경에 적응하도록 계획해야합니다. 핵심 원칙 중 일부, 특히 상황과 관련된 원칙은 다음과 같습니다.
- 자신있게 예측할 수있는 것보다 더 앞선 계획을 세우지 마십시오
- 갈 때 변할 수있는 여유를 두십시오
- 한 번에 큰 것을 구축하는 대신 작은 것을 구축하고 점진적으로 개선하십시오.
- 최종 사용자가 프로세스에 관여하도록하고 신속하고 정기적 인 피드백을받습니다.
- 자신의 작업과 진행 상황을 검사하고 실수로부터 배우십시오