소프트웨어 공학

시스템 개발 수명주기 내에서 작업하는 전문가, 학자 및 학생을위한 Q & A

1
제작을위한 하스켈 언어 확장 학습의 필요성
하스켈 핵심 언어는 정말 간단합니다. OO 배경에서 비롯된 주요 어려움은 순수한 기능적 패러다임에 적응하는 것입니다. "기본"Haskell을 배우는 동안 나는 언어 확장을 CS 사람들을위한 장난감으로 또는 from future import ???파이썬에서 와 같이 언어의 미래 버전을위한 실험으로 항상 고려해 왔습니다 . 그러나 Yesod와 같은 웹 프레임 워크를 살펴보기 시작했을 때 많은 소스 …
10 haskell 

5
여러 내보내기 유형을위한 견고한 아키텍처를 설계하십니까?
디자인중인 다음 기능에 대한 패턴 또는 아키텍처 지침을 찾고 있습니다. 기본적으로 여러 내보내기 대상이있는 내보내기 기능이며 새 내보내기 대상을 연결하는 데 많은 핵심 변경이 필요하지 않은 경우 일반화 할 수있는 방법을 찾고 있습니다. 내보내기 대상을 사용하면 PDF, PowerPoint 프레젠테이션, Word 문서, RSS 등 다양한 유형의 출력을 간단히 언급하고 있습니다. JSON …

5
효과적인 팀 회의
저는 약 20 명의 기술 인력을 보유한 회사에서 8 명의 프로그래머로 구성된 팀의 팀장입니다. 그들은 다양한 프로젝트를 진행하고 있으며,이 프로젝트에는 내가 통제 할 수없는 다른 팀의 사람들도 참여합니다. 우리 조직은 적절한 민첩한 개발을 수행하지 않고 있으며 변화에 다소 저항력이 있지만 팀 내에서 매일 일 어설 수있는 회의를 개최하고 있으며 모두 …

2
비동기 작업 라이브러리가 예외를 조용히 삼켜야합니까?
방금 .NET 4.5에서 내부 예외 Task를 처리 하는 방법이 변경되었다는 것을 알게되었습니다 . 즉, 조용히 억제됩니다. 왜 이런 일이 일어 났는지에 대한 공식 추론은 "경험이없는 개발자들에게 더 친숙해지기를 원했습니다": .NET 4.5에서 Tasks는 언어에서 지원하는 새로운 비동기 기능의 일부로 C # 및 Visual Basic 언어로 구워 졌기 때문에 .NET 4에서보다 훨씬 …
10 .net 

3
큰 방법을 리팩터링 할 때 어떤 것도 깨지 않도록 어떻게 도움이됩니까?
현재 단위 테스트가없는 대형 코드베이스의 일부를 리팩토링하고 있습니다. 코드를 리팩토링하려고 시도했습니다. 즉, 코드가 수행하는 작업과 변경 사항으로 인해 변경되지 않는 것을 추측하려고 시도했지만 성공하지 못했습니다. 코드베이스 주변의 모든 기능을 임의로 중단합니다. 리팩토링에는 레거시 C # 코드를보다 기능적인 스타일로 이동 (레거시 코드는 LINQ를 포함한 .NET Framework 3 이상의 기능을 사용하지 않음), …

3
오픈 소스, 저작권 및 사소한 버그 수정
개발자가 폐쇄 소스 상용 응용 프로그램을위한 라이브러리를 개발했다고 가정 해보십시오. 그들은 오픈 소스 커뮤니티에 환원하기를 원하기 때문에이 라이브러리를 GPL로 게시하지만 자신의 응용 프로그램에서 계속 사용합니다. 그들은 저작권을 보유하고 있기 때문에 괜찮습니다. 이제 GPL 버전의 사용자는 버그를 찾아 수정하고 원래 개발자에게 패치를 제출합니다. 내가 알고 있듯이,이 버그 수정을 폐쇄 소스 응용 …

3
컴파일러 작성 컴파일러-사용 및 기능에 대한 이해
이것은 언어 프로젝트에 사용 된 개념을 프레임 워크 형태로 추상화하는 것을 목표로하는 추상화 프로젝트의 자매 프로젝트에 중점을 둔 일련의 질문의 일부입니다. 자매 프로젝트는 OILexer라고하며 일치하는 코드 삽입을 사용하지 않고 문법 파일에서 구문 분석기를 구성합니다. 구조 입력과 관련하여 다음 질문에 관련된 일부 다른 페이지는 볼 수 있습니다 여기에 , 사용의 용이성, …

2
분기 예측 최적화에 더 적합한 코드는 무엇입니까?
분기 예측과 컴파일러 최적화의 영향으로 어떤 코드가 우수한 성능을 제공합니까? bRareExceptionPresent는 일반적이지 않은 조건을 나타냅니다. 정상적인 논리 경로가 아닙니다. /* MOST COMMON path must branch around IF clause */ bool SomeFunction(bool bRareExceptionPresent) { // abort before function if(bRareExceptionPresent) { return false; } .. function primary body .. return true; } …

4
단위 테스트에서 리포지토리를 두 ​​번 만드는 이유는 무엇입니까?
다른 날에는 Unit Testing에 대해 조금 읽고 있었고 사람들이 저장소 인터페이스 (예 :) IExampleRepository를 만든 다음 실제 저장소 ( public class ExampleRepository : IExampleRepository)와 단위 테스트에 사용할 저장소 ( ) 를 만드는 몇 가지 예를 보았습니다 FakeExampleRepository : IExampleRepository. 에서 다른 Linq 쿼리를 사용 IExampleRepository하여와 동일한 메소드를 구현했습니다 ExampleRepository. 여기서 …

2
고객이 불합리한 것을 요청할 때해야 할 일 (내 관점에서)
저는 프리랜서 프로그래머이며 최근에 웹 사이트를 완성했습니다. 모든 것이 잘 작동하지만 한 명의 사용자가 고객에게 로그인 할 수 없다고 불평했습니다.이 문제는 쿠키 제한 / 오래된 브라우저 문제였습니다. '문제를 직접 만들지 말고 사용자의 방해가 웹 사이트를 잘 사용하고 있습니다.) 이제 내 고객이 말했습니다 : 나는 무언가를 만들고 누군가가 불평하도록 당신에게 돈을 …

1
비동기 상호 통신을 처리하는 가장 좋은 방법은 무엇입니까?
최근 신용 카드 처리를위한 프로젝트를 완료했습니다. 내가 직면 한 어려움 중 하나는 알림 메시지의 지연 / 가능한 실패를 처리하는 것이 었습니다. 가장 복잡한 예는 다음과 같습니다. 지불 요청을 보내는 외부 시스템 내 시스템이 해당 요청을 지불 게이트웨이에 대한 요청으로 전환 사용자를 게이트웨이로 보내기 사용자가 결제를 수행하기를 기다리는 중 사용자가 내 …

10
사용자 스토리가 너무 높고 개념적이며 경영진은 개발자가 공백을 채울 것으로 예상합니다.
저는 XP를 할 의도가있는 매우 훌륭한 회사에서 일하고 있습니다. 의사 소통은 양호하고 관리는 건설적인 논의에 개방적이지만 시간 제약으로 인해 RUP가 논의 되기에는 너무 어려운 것으로 간주됩니다. 현재 나는 이야기를 구현하는 동안 필요한 변화의 양에 약간 어려움을 겪고 있습니다. 이러한 많은 발견 (물론 시간과 노력이 필요함)은 개발자가 아닌 스토리 작가 (고객, …

3
if ()의 지연 평가를 구현하는 방법
현재 다음을 기반으로 식 평가 기 (수식과 같은 단일 줄 식)를 구현하고 있습니다. 입력 된 표현식은 리터럴 부울, 정수, 소수, 문자열, 함수, 식별자 (변수)를 구분하기 위해 토큰 화됩니다. 나는 괄호를 없애고 접미사 순서로 적절한 우선 순위를 가진 연산자를 정렬하기 위해 Shunting-yard 알고리즘 (가변 수의 인수로 함수를 처리하도록 약간 수정 됨)을 …

3
암시 적 인수 변환에 의존하는 것이 위험한 것으로 간주됩니까?
C ++에는 인수 유형이 예상되는 것이 아닌 경우 매개 변수 유형의 일치하는 생성자를 자동으로 호출하는 기능 (적절한 이름을 알 수 없음)이 있습니다. 이것의 가장 기본적인 예 std::string는 const char*인수 를 기대하는 함수를 호출하는 것입니다 . 컴파일러는 자동으로 적절한 std::string생성자 를 호출하는 코드를 생성합니다 . 궁금합니다. 생각보다 가독성이 좋지 않습니까? 예를 …

6
CoffeeScript 및 명명 된 함수
다른 곳에서는 CoffeeScript에서 명명 된 함수의 용어에 대해 논쟁이 일어났습니다. 특히 누군가 다음과 같은 것을 언급했습니다. foo = -> console.log("bar") 명명 된 함수로. 그러나 CoffeeScript의 모든 것은 익명의 함수이며 명명 된 함수는 없다고 반대했습니다. 이것은 확실히 사실입니다. CoffeeScript에는 함수 표현식 만 있으며 변수에 저장할 수 있습니다. 그러나 나는 이것이 명명 …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.