ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

3
GitHub:課題リストとプロジェクトバックログを管理するための外部ツールはありますか
最近、GitHub に私のプロジェクトの1つを投稿しました。サイトの機能を調査していると、かなりまともな問題追跡セクションがあることに気付きました。 このセクションを、a)他の人が必要に応じてバグを報告できるようにし、b)他の人が私の知っているバグを確認できるようにしたい。ただし、他の人が指摘したように、プロジェクトバックログを作成するために問題リストに優先順位を付けることはできません。今のところ、私のバックログはテキストファイルですが、同じ情報が別の場所で保持されないように統合できるようにしたいと考えています。 私たちが仕事でも練習している完全に順序付けられたリストがあることは、1つのファイルを開き、1行目から始めて、完全な問題に戻ることなく、1か所で2つまたは3つのアイテムを発射できるため、非常に便利です。ストーリーバケット。GitHubはこれを提供していません。 GitHubが提供するものは非常に素晴らしくてクリーンなAPIなので、問題を他の何かに簡単にエクスポートできます。GitHubの問題と統合されている他のWebサイト(Trelloなど)があるかどうかを検索しましたが、何も見つかりませんでした。 そのような製品、サービス、オフラインツールを知っている人はいますか?GitHubを使用しているユーザー、バックログの管理での経験は何ですか?一部の人々がWikiプロジェクトページで行っているように見えるように、2つの切断されたリストを手動で管理するという考えはちょっと嫌いです。 1-恥知らずなプラグインはこのサイトで許可されていませんか?検索しましたが、明確な答えは見つかりませんでした。それが悪い習慣であるならば、やめて、さらに読み進めないでください 開発者として、私は1日に30回同じフォルダーのセットに移動することにうんざりしていました。そのため、デスクトップに行き詰まり、常に使用するフォルダーに簡単にアクセスできる、自動折りたたみ可能なユーティリティを少し書きました。

6
会議での難しいまたは予期しない技術的な質問への対応[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 8年前休業。 私が取り組んでいるプロジェクトによっては、社内の利害関係者またはクライアント企業の技術管理の両方との会議にさらに出席する必要がある場合があります。 これらの会議の過程で、いくつかの質問が必然的に発生します。 あなたには答えがありません。 あなたは何らかの理由で考えたことはありません。 あなたは無関係であるか、現在の会議の範囲から完全に外れていると見なします。 どちらの場合も、これらの質問にどのように答えますか?正直でありながら権威を持ち続けるためのヒントやトリックはありますか?

12
プログラミングを通して数学を学ぶことは可能ですか、それともプログラミングのために数学を学ぶべきですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 私は数学が得意ではありませんが、それほどひどいものでもありませんが、平均よりは低く、常に数学を改善しようと考えていましたが、学校や本はあまりに速く飽きてきて仕事をしませんでした。私が飽きないのはコーディングとゲームだけなので、数学の問題を解決するプログラムをコーディングすると数学をよりよく理解できるとしたら、これらの問題のほとんどは制限(計算)、関数、微分計算、そして以前に述べたのと同様のいくつかの他の主題(すでに私はそれほど良くないと言った)。 私の質問は次のとおりです。特定のプログラムコーディングを行うと、数学の知識を向上させることができますか。また、可能であれば、その方法で物理学も可能ですか?それとも私は間違っているのですか?プログラミングを改善するためにプログラミングの前に数学を学ぶ必要がありますか? PS:C ++が優先言語です。

3
「早期リリースが頻繁にリリースされる」環境での単体テストの関連性は何ですか?
過去1年ほどの間、私はチームをリリース-アーリー-リリース-頻繁な開発モード(別名:アジャイルではなく迅速なアプリケーション開発)に向けました。ビルドを閉じる方法の詳細については、こちらの回答を参照してください 。RAD環境でのリリース品質を向上させる簡単な方法 私たちがRADを採用したとき、人々は非常に独立していて、最初にユニットテストを行っていました。統合テストはプロセスのかなり後の方で行われました。それは、正式な強制をあまり行わなかった彼らにとって自然なプロセスでした。今の状況はかなり異なります: プラットフォーム全体は、ホットスポットがなく、クライアント側で機能する確立されたビルド/リリースとうまく統合されています。 新しい機能の要件は今後も続き、必要に応じて段階的に構築していきます。 独立した開発グループがプロセスを正しくフォローしている一方で、複雑で自明ではない状況が原因で重大な障害が発生しているため、システムの全体的なダイナミクスは非常に重要です。 システムの多くの部分には新しいアルゴリズムと研究入力が含まれるため、明確に定義されたソフトウェアでの機能テストのように、課題(およびテストのメカニズム)が常に正しく予測されるとは限りません。 最近、プロセスの改善が必要かどうかを確認するために、全体像をよりよく把握することを試みていました。チームと一緒に座ったとき、彼らの多くは「私たちはもうユニットテストをしません!」他の人たちは、効果がなくなるので今すぐ始めるべきではないと考えました。 単体テストは比較的成熟したシステムで役立ちますか?ユニットの成熟度に応じて、少なくともテストスコープの重量を量る必要がありますか?単体テストは開発のペースを遅くしますか?単体テストを別の方法で評価する必要はありますか? リリース早期リリースの環境で成熟したプラットフォームをテストするためのベストプラクティスは何ですか?
10 unit-testing  rad 

3
gitから著作権の日付範囲を自動的に更新しますか?
私が書いているように、私たちは2012年まで10日です。多くのプログラマーがソースファイルの上部にある著作権文字列を次のようなものに編集しているに違いありません。 // Copyright 2008, 2010-2012 Some Company Unlimited バージョン管理システムは、ファイルがいつ変更されたかを認識しているため、これらの文字列の書き込みや書き換えに役立ちます。だから私の質問:各ファイルのgitログを調べて、そのような文字列を出力(またはより適切に挿入)できるスクリプトはありますか? 私はgitを使用しているので、これが主な関心事ですが、そのようなスクリプトが他のシステムに存在するかどうかを知らせてください。 更新: これを行うスクリプトが必要です。 作業コピーのすべてのソースファイルをウォークします 既存の著作権文字列を検索し、年を識別します。例:2007,2009-2011は{2007、2009、2010、2011}となります 記載されていない各年については、1月1日から12月31日(または、現在の年の場合は今日)を比較します。diffを調べて、著作権文字列で言及する価値があるかどうかを判断します 新しい著作権文字列を挿入します。
10 git  copyright 

5
新規採用者をトレーニングするためのより良い方法[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 私が現在所属しているチームはかなりの離職率を経験しており、メンバーは通常、同じ会社内の異なるプロジェクトに移動しています。現在、新しいメンバーの「トレーニング」は、彼らを実際の経験を提供し、より新しい採用者がメンターに何か尋ねるかどうかより多くの上級開発者に尋ねる主要な連絡先(通常はトレーニングを完了する最も最近の人)とペアにすることです知りません。これは、新規採用者が迅速に関与する機会を提供し、メンターにシステムへの理解を向上させることも要求します。 しかし、ご想像のとおり、このスタイルのトレーニングは非常に時間がかかり、十分な知識の伝達にはなりません(誤解が広まり、ギャップが拡大します)。 私は、将来の新入社員向けのドキュメントとトレーニング資料の生成を任されています。私はすでにテクニカルライティングを時々行っていますが、それはエンドユーザー向けであり、非常に具体的であり、多くのスクリーンショットがあり、完了するまでに長い時間がかかります。 新入社員向けの新しいドキュメントを作成することは優先度が低いと考えられており、私は現在、約40時間しか作業できません。私が技術文書を書いている現在の方法でシステムを文書化しても、40時間でかろうじて表面を傷つけるだけです。特に、コードベースだけでなく、展開とサポートについても文書化する必要があることを考慮します。 ドキュメントの作成に多大な時間を費やすことなく、ドキュメントをすばやく作成して、新入社員をできるだけ早く最新の状態にするにはどうすればよいですか? 追加情報: 現在、Wikiといくつかのトレーニングドキュメントがありますが、どちらもまばらです。

6
GPUでの実行から恩恵を受けた汎用アルゴリズムの例?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 CPUよりもGPUで1桁速く実行できることが証明されている(非グラフィック関連の意味の)汎用アルゴリズムの例を探しています。これらの例を使用して、GPUに実装できる他のアルゴリズムについて創造的に考えます。

2
例によるDjangoの学習[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 5年前休業。 この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答や相互作用を受け入れていません。 私が初めてAndroidの学習を始めたとき、私はTwitterのクローンを構築するステップを踏むマラカナによる素晴らしい一連のYouTube ビデオを見つけました。すべての手順を説明し、基本、一般的なライブラリ、ベストプラクティス、リソースなどを説明しました。実用的なアプリを構築する際に専門家の肩越しに目を通すことが、私にとって最高の学習方法でした。何よりも、私が構築できるスケルトンを提供してくれました。その後、調査を続け、どの質問をするかを知ることができました。 今、Djangoに似たものを探しています。もちろん、公式チュートリアルとDjango Bookをチェックアウトしました。前者はいくつかのDjangoの筋肉を曲げますが、完全なアプリをウォークスルーしません。後者は確かに優れていますが、ビルドするアプリは非常に基本的であり、より高度なテーマに到達するまでに、チュートリアルは失敗し、短いコードスニペットとドキュメントのような説明に戻ります。 アマゾンをチェックアウトすることはひどく励みになるものではありません。最新の一般的なDjangoブックはほぼ2年半前にリリースされ、v1.0のみをカバーしています。公平に言うと、これはオンラインドキュメントが優れているためと思われますが、ここでもウォークスルーを探しています。Practical Django Projectsに出会ったとき、私はまさに興奮していました。ただし、レビューの中には、ソースコードがない、エラーが多くない、エラッタがない、完全に無関心な作成者で応答しない発行者など、いくつかの深刻な問題を主張するものもあります。 そして、私は1つ目の正方形に残され、あなたのアドバイスが必要です。巨人の肩の上に座り、現実的なDjangoプロジェクトを最初から最後までたどることができる場所はありますか?フレームワークのより新しいバージョンを使用することをお勧めします。
10 learning  django 

2
バージョン管理ソフトウェアで現在の開発とメンテナンス開発を分離するために推奨される方法は何ですか?
Gitを使用して管理されているソフトウェアアプリケーションがあります。私は新しいバージョン2.xをリリースしました。これは長期的に維持する予定です(ほとんどのバグ修正)。それまでの間、バージョン3.xの作業を開始したいと思います。これを管理するための推奨される方法は何ですか?バージョン2.xのブランチを作成し、マスターで3.x開発を行う必要がありますか?または逆ですか?

6
プログラミング言語の直交性を検証/証明する方法は?
私は直交性の概念を知っていますが、プログラミング言語の観点から、それを検証/証明する方法はありますか? たとえば、C#では、メソッドのシグネチャとして、publicまたはstaticメソッドシグネチャを使用できます。どちらか一方または両方を使用でき、それらは互いに干渉しないので、互いに直交していますよね? 私の質問は、残りの機能、特に互いに関連しない機能についてはどうすればよいですか? すべての機能が共存/スタックする必要がありますか? 100%直交するプログラミング言語はありますか?

3
分散ロックパターンを探す
C#の分散システム用のカスタム再帰オブジェクトロックメカニズム\パターンを考え出す必要があります。基本的に、私はマルチノードシステムを使用しています。各ノードは、n個の状態に対して排他的な書き込み権限を持っています。同じ状態が、少なくとも1つの他のノードで読み取り専用形式でも利用できます。一部の書き込み/更新はすべてのノードでアトミックである必要がありますが、他の更新はバックグラウンドのレプリケーションプロセスやキューなどを通じて最終的に整合性が取れます... アトミック更新では、オブジェクトを書き込み用にロックされているものとして効率的にマークして、配布、コミット、ロールバックなどを実行できるパターンまたはサンプルを探しています。システムには高レベルの同時実行性があるため、ロックが解除されるとタイムアウトになるか、アンロールされるロックをスタックできるようにする必要があると思います。 トランザクションまたはメッセージングの部分はこの質問の焦点では​​ありませんが、いくつかの追加のコンテキストのためにそれらを提供しました。とはいえ、必要に応じてどのようなメッセージが必要だと思うかを自由に説明してください。 これは、私が想像していたものの漠然としたサンプルですが、まったく新しい製品を実装することを除いて、新しいアイデアを受け入れることができます。 thing.AquireLock(LockLevel.Write); //Do work thing.ReleaseLock(); 次のような拡張メソッドの使用を考えていました public static void AquireLock(this IThing instance, TupleLockLevel lockLevel) { //TODO: Add aquisition wait, retry, recursion count, timeout support, etc... //TODO: Disallow read lock requests if the 'thing' is already write locked //TODO: Throw exception when aquisition fails instance.Lock = lockLevel; } …


4
スクラムとペアプログラミング
私は現在スクラムを使用しているチームに所属しており、チームのクロスファンクショナルスキルを向上させ、「2つのヘッドは1つよりも優れている」という哲学で欠陥を減らすのに役立つペアプログラミングを追加することを検討しています。 私たちのチームでは、各チームメンバーは通常、スプリントの計画中にフルワークロードにサインアップします(「フル」は週40時間未満の数であり、会議やコラボレーションなどが可能です)。各タスク。これはスクラムチームではかなり一般的だと思いますが、必ずしも本ではそうではありません。 特に、チームメンバーが作業するための独自のタスクを持っているためにチームメンバーがペアリングをためらうような状況は避けたいと思います。これは、ペアリングのための時間を確保せずにチームが単に自己組織化する場合に発生する可能性が高いと思います。 これを踏まえて、ペアリングの時間を適切に割り当てていることを確認するために、ペアリングシナリオでの労力/時間/ストーリーポイントを説明する最良の方法は何ですか? 考慮されるいくつかのオプションは次のとおりです。 2人が各タスクにサインアップできるようにし、(おおよそ)推定時間数を2倍にする 「キーボードを操作する」チームメンバーだけが各タスクにサインアップします。これは、その人の推定時間に基づいて推定されます。ペアリングをサポートするチームの誰もが、ペアリングをサポートする時間を確保するために、スプリントのより少ないタスクにサインアップします。

3
オブザーバーパターン。何が変わったのか知っていますか?
古典的なObserverパターンインターフェイスを定義する2つの抽象クラスSubjectとObserverを作成しました。オブザーバーパターンを実装するためにそれらから派生しています。オブザーバーは次のようになります。 void MyClass::Update(Subject *subject) { if(subject == myService_) { DoSomething(); } else if(subject == myOtherService_) { DoSomethingElse(); } } これは問題なく、誰が何かを変更したかがわかります。ただし、何が変わったのかはわかりません。サブジェクトに最新のデータを照会するだけでよい場合もありますが、サブジェクトで何が変更されたかを正確に知る必要がある場合もあります。Javaでは、おそらく何が変更されたかの詳細を指定するために、notifyObservers()メソッドとnotifyObservers(Object arg)メソッドの両方があることに気づきました。 私の場合、サブジェクトでいくつかの異なるアクションの1つが発生したかどうかを知り、それが特定のアクションである場合は、そのアクションに関連する整数を知る必要があります。 だから私の質問は: (Javaのように)汎用的な引数を渡すC ++の方法は何ですか? オブザーバーは最高のパターンですか?多分ある種のイベントシステム? 更新 Observerパターンのテンプレート化について説明しているこの記事を見つけました:テンプレートを使用したSubject / Observerパターンの実装。これは、あなたが議論をテンプレート化できるかどうか疑問に思いました。 引数のテンプレート化に関するこのスタックオーバーフローの質問が見つかりました:テンプレートベースのサブジェクトオブザーバーパターン-static_castまたはdynamic_castを使用する必要があります。しかし、OPには誰も答えていない問題があるようです。 もう1つの方法は、Updateメソッドを変更して、次のようにEventArgオブジェクトを取得することです。 void MyClass::Update(Subject *subject, EventArg arg) { ... 次に、特定の引数データ用にEventArgのサブクラスを作成し、それをupdateメソッド内の特定のサブクラスにキャストし直したと思います。 アップデート2 また、非同期メッセージベースのc ++フレームワークの作成に関する記事も見つかりました。何が変わったかについての詳細を被験者に伝えることを論じるパート2 Boost.Signalsの使用を真剣に検討しています。自分のオブザーバーパターンを使用することは、それが単純な場合には理にかなっていますが、型と引数のテンプレート化は複雑になり始めています。そして、Boost.Signals2のスレッドセーフが必要になる場合があります。 アップデート3 オブザーバーパターンに関する興味深い記事もいくつか見つかりました。 ハーブサッターによるオブザーバーの一般化 C ++でのオブザーバーパターンの実装-パート1 Observerデザインパターンの実装の経験(パート2) …

5
アジャイル、ウォーターフォール、要件の変更
要件の変更によって「アジャイル」と定義されたプロジェクトのこの問題が発生したことはありますか?私は4週間のSprintで実行される開発プロジェクトに取り組んでいますが、これらのSprintの間には常に変更があります。それでもアジャイルとして定義されていますか?私はそれがサブアジャイルプロセスのようなものだと感じています-アジャイルプロセスの要件は、スプリントの始めに定義され、その終わりに向かってレビューされるべきです。私はこれで正しいですか?この経験を教えてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.