タグ付けされた質問 「development-process」

ソフトウェア開発のプロセスに関する質問。

17
プログラマーの責任章[非公開]
だから、プログラマーの権利章典についても聞いたことがあるし、XPにも同様の概念があります。 最近、人々の権利について多くのことを耳にしますが、彼らの責任についてはあまり聞いていないのが一般的な不満です。それは彼らがすべきことであり、彼らは口に合わないと感じるかもしれないが、プロとして責任を持って行動するプログラマーをそうでない人々から分離するものである。 私は主に、口に合わないものと起こりにくいものに興味があります。これは、プログラマーの90%が実際に実行したいもの(常にリファクタリングしてソース管理を使用するなど)ではなく、プログラマーが回避して回避する傾向があるものです。 それでは、プログラマーの責任章には何が記載されるべきでしょうか?

3
システムを設計するとき、使用するフレームワークに関する設計に対応することがベストプラクティスですか?
特定のフレームワークで使用する予定のシステムまたはアプリケーションを開発する場合、フレームワークを考慮せずにシステムを設計するのがベストプラクティスですか、それとも「フレームワークを使いやすい時間で」という考え方でシステムを設計することをお勧めしますこれとともに"。

5
あなたがやったことのないプログラミングタスクに直面したとき、何をしますか?
私は3か月前に.NET開発者としてキャリアを始めました。さまざまな技術、パターン、概念に関する長いトレーニングプランの後、私を監督していた開発者は、会社が扱う多くのプロジェクトの1つに参加する準備ができたと判断しました。 最終的にコーディングを開始できることを非常に楽しみにしています。私が参加したチームは、新しいプロジェクトから始めていたため、今のところかなり小さいです。これは、プロジェクトのライフサイクル全体に関わることができるので素晴らしいことです。これは、ASP.NET MVC / ASP.NET Web APIを使用し、フロントエンドでDurandalフレームワークと関連ライブラリを使用するWebベースのSPAプロジェクトです。 私の問題は、同僚と会議を行い、翌月のタスクと見積もりを確立した後、自分がタスクを実行できるかどうかわからない立場にいることです。 作成したタスクを一度も実行したことがないため、どのようにすればよいかわかりません。 たとえば、作成されたタスクの1つは、アプリケーション全体の一般的なエラー処理メカニズムの作成です。 彼がやったことのないタスクに直面したとき、通常どのように進めますか?

7
わずかな時間で重要な技術的決定を下す方法
私の会社がWPFアプリケーションをLinux / Android / iOSに移植するために使用するツールとプラットフォームについて非常に深刻な決定を下した2日間です。 明らかに、すべての可能なオプションについて読んだり、試用、プロトタイプの作成などについて読むには2日では十分ではないことを先輩に指摘することができます。私はそれを言うことができます。少し助けにはなりません。 2日後に決定が下されます。期間。 片方からはイライラし、もう片方からはこのアプローチには真実があると思います。さもなければ、ベンチワークやサンプルの実行を行う多数のダウンロードされたSDK、フレームワーク、API、ブログ記事などに簡単に埋もれてしまいます。そして、それがすべてのためだったことをプロセスで忘れます。 それでも、間違った決定が会社に多大なコストをかけることを恐れています。それでは、そのような決定を下すための「理想的な」プロセスは何だと思いますか?

5
コードレビューで肯定的なコメントをするのは適切ですか、それとも建設的な批判専用ですか?
私は最近多くのコードレビューを行ってきましたが、コードレビューに肯定的および/または面白いコメントを入れることの肯定的および否定的な効果とプロフェッショナリズムに自信がありません。 私たちのチームではコードレビュープラットフォームとしてGithubを使用しているため、コメントは誰でも見ることができます。私は通常、このプラットフォームを使用して、最初から最後までのプロセス全体が見えるようにし、歴史的なものにします。

6
オブジェクトのモックが難しいシステムをテストするにはどうすればよいですか?
私は次のシステムで作業しています: Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern 最近、使用しているライブラリのバージョンを更新したときに問題が発生しました。これにより、とりわけ、タイムスタンプ(サードパーティライブラリがとして返すlong)がエポック後のミリ秒からエポック後のナノ秒に変更されました。 問題: サードパーティのライブラリのオブジェクトを模擬するテストを作成する場合、サードパーティのライブラリのオブジェクトについて間違えた場合、テストは間違っています。たとえば、タイムスタンプの精度が変更され、モックが間違ったデータを返したため、ユニットテストを変更する必要があることに気づきませんでした。これはライブラリのバグではありません。ドキュメントの何かを見逃したために発生しました。 問題は、実際のデータフィードがないと実際のデータ構造を生成できないため、これらのデータ構造に含まれるデータについて確信を持てないことです。これらのオブジェクトは大きくて複雑で、多くの異なるデータが含まれています。サードパーティライブラリのドキュメントは貧弱です。 質問: この動作をテストするためにテストを設定するにはどうすればよいですか?テスト自体は簡単に間違っている可能性があるため、この問題を単体テストで解決できるかどうかはわかりません。さらに、統合システムは大きく複雑であり、見落としがちです。たとえば、上記の状況では、タイムスタンプの処理をいくつかの場所で正しく調整していましたが、そのうちの1つが見つかりませんでした。システムはほとんど統合テストで正しいことを行っているように見えましたが、本番環境(より多くのデータがある)に展開すると、問題が明らかになりました。 現在、統合テストのプロセスがありません。テストは基本的に、ユニットテストを適切な状態に保ち、問題が発生したときにさらにテストを追加し、テストサーバーに展開して問題が正しかったことを確認してから、運用環境に展開します。モックが間違って作成されたため、このタイムスタンプの問題は単体テストに合格し、すぐに明らかな問題を引き起こさなかったため統合テストに合格しました。QA部門がありません。

5
定数をどこに置くべきか、そしてその理由は?
私たちの大部分が大規模なアプリケーションでは、通常、「定数」の場所はわずかしかありません。 GUIおよび内部定数(タブページのタイトル、グループボックスのタイトル、計算係数、列挙)の1つのクラス データベースのテーブルと列用の1つのクラス(この部分は生成されたコードです)およびそれらの読み取り可能な名前(手動で割り当てられた) アプリケーションメッセージ(ロギング、メッセージボックスなど)の1つのクラス 定数は通常、これらのクラスの異なる構造体に分けられます。C ++アプリケーションでは、定数は.hファイルでのみ定義され、値は.cppファイルで割り当てられます。 利点の1つは、すべての文字列などが1つの中央の場所にあり、何かを変更する必要があるときに誰もがどこにあるかを知っていることです。 これは特に、プロジェクトマネージャーが人々が行き来する際に好むように思われるものであり、このようにして誰もがアプリケーションの構造を掘り下げることなく、このような些細なことを変更できます。 また、同様のグループボックス/タブページなどのタイトルを一度に簡単に変更できます。別の側面は、そのクラスを印刷して、キャプションが直感的であるか、ユーザーへのメッセージが詳細すぎるか、混乱しすぎていないかなどを確認できる非プログラマーに渡すことができることです。 ただし、いくつかの欠点があります。 すべての単一クラスは、定数クラスに密接に結合されています 定数の追加/削除/名前の変更/移動には、アプリケーションの少なくとも90%の再コンパイルが必要です(注:少なくともC ++の場合、値の変更は行われません)。1500クラスのC ++プロジェクトの1つでは、これは約7分間のコンパイル時間(プリコンパイル済みヘッダーを使用し、ヘッダーなしでは約50分)に加えて、特定の静的ライブラリに対する約10分間のリンクを意味します。 Visual Studio Compilerを使用して速度が最適化されたリリースをビルドするには、最大3時間かかります。膨大なクラス関係がソースであるかどうかはわかりませんが、そうであるかもしれません。 何かを非常に迅速にテストしたいので、そのテスト(そしておそらくその後のすべてのテスト)だけで15分待ちたくないので、一時的に直接コードに文字列をハードコーディングすることになります。「後で修正します」という考え方に何が起こるかは誰もが知っています。 別のプロジェクトでクラスを再利用するのは必ずしも簡単ではありません(主に他の密結合によるものですが、定数の処理はそれを容易にするものではありません)。 そのような定数をどこに保存しますか?また、プロジェクトマネージャーに、上記の利点に適合するより優れた概念があることを納得させるために、どのような議論を提起しますか? C ++固有の回答または独立した回答をお気軽にお寄せください。 PS:私はこの質問が一種の主観的なものであることを知っていますが、正直に言って、この種の質問についてこのサイトよりも良い場所を知りません。 このプロジェクトの更新 コンパイル時間に関するニュースがあります 。Calebとgbjbaanbの投稿に続いて、時間があるときに定数ファイルをいくつかの他のファイルに分割しました。私は最終的にプロジェクトをいくつかのライブラリに分割しましたが、これは今でははるかに簡単になりました。これをリリースモードでコンパイルすると、データベース定義(テーブル、列名など-8000を超えるシンボル)を含む自動生成ファイルと特定のハッシュを構築することにより、リリースモードで膨大なコンパイル時間が発生することがわかりました。 DB定数を含むライブラリのMSVCオプティマイザーを非アクティブ化すると、リリースモードでのプロジェクト(複数のアプリケーション)の合計コンパイル時間を最大8時間から1時間未満に短縮できるようになりました。 MSVCがこれらのファイルを最適化するのにこれほど苦労する理由はまだわかりませんが、今のところ、ナイトリービルドのみに依存する必要がないため、この変更により大きなプレッシャーが軽減されます。 その事実、およびより緊密でない結合、より良い再利用性などのその他の利点も、「定数」の分割に時間を費やすことは、結局のところそれほど悪い考えではないことを示しました;-) Update2 この質問にはまだ注目が集まっ ているので、ここ数年私がやってきたことは次のとおりです。 関連するスコープにすべての定数、変数などを正確に配置します。単一のメソッドでのみ定数を使用する場合、そのメソッドで定義することは問題ありません。単一のクラスに興味がある場合は、そのクラスのプライベート実装の詳細として残します。同じことが名前空間、モジュール、プロジェクト、会社の範囲にも当てはまります。ヘルパー関数などにも同じパターンを使用します。(パブリックフレームワークを開発する場合、これは100%適用されない場合があります。) これにより、再利用性、テスト容易性、および保守性が向上し、コンパイル時間(少なくともC ++)が少なくなるだけでなく、バ​​グ修正にかかる時間が短縮され、新しい機能を実際に開発する時間が増えます。同時に、より多くのコードをより簡単に再利用できるため、これらの機能の開発は高速になります。これは、中央定数ファイルが持つ利点よりも重要です。 詳細を知りたい場合は、特にインターフェイス分離の原則と単一責任の原則をご覧ください。 あなたが同意する場合、この更新は基本的に彼が言ったことに対するより一般的な見解なので、カレブの答えに賛成です。

3
実装が保留中のメソッドに対してNotImplementedErrorを送出するのは慣習的ですか?
私はNotImplementedError実装したい任意のメソッドに対してaを上げるのが好きですが、まだそれをやろうとしていません。私はすでに部分的な実装を持っているかもしれraise NotImplementedError()ませんが、まだ気に入らないのでそれを前に付けます。一方で、他の人が自分のコードを保守しやすくするので、慣習に固執するのも好きです。そして、慣習は正当な理由で存在するかもしれません。 ただし、NotImplementedErrorのPythonドキュメントには次のように記載されています。 この例外はRuntimeErrorから派生しています。ユーザー定義の基本クラスでは、派生クラスがメソッドをオーバーライドする必要がある場合、抽象メソッドはこの例外を発生させる必要があります。 これは、私が説明したものよりもはるかに具体的で正式なユースケースです。NotImplementedErrorAPIのこの部分が進行中の作業であることを単に示すためにを上げるのは良い、従来のスタイルですか?そうでない場合、これを示す別の標準化された方法はありますか?

3
たとえばMicrosoft Wordとは対照的に、プレーンテキストマークアップ言語を使用する場合、開発プロセスに直面する障害は何ですか?[閉まっている]
私は現在、政府の請負業者のインターンであり、Wordはソフトウェア開発プロセスの事実上の標準であるという(当然のこととして避けられない)感じを抱いています。 そのバイナリ形式により、コードベースでの共同作業に慣れている方法でドキュメントを共同作業することは非常に困難です。(ラテックス、Markdownを、再編テキスト、などの言語のプレーンテキストマークアップの使用などは)開発者の通常のワークフローとうまく動作差分フレンドリー文書が可能になります。言語でサポートされていないコメント(Markdownなど)については、マークアップを含む他のプレーンテキストファイルに簡単に適用できるコードベース(GitHub、Bitbucketなど)での共同コメントを可能にする多くの既存のソリューションがあります。 技術的に知識のない管理と協力する必要があることは、あらゆるものに何らかのグラフィカルインターフェイスを必要とすることを理解していますが、これらの形式のほとんどにはそのようなインターフェイスが存在します。たとえば、LaTeXにはLyXと呼ばれる種類の「分岐」があり、グラフィカルなフロントエンドをプレーンテキストのLaTeXのような構文に置きます。このファイルは、主にその編集においてグラフィカルであるにもかかわらず、依然として差分に対応しています。(Wordスタイルのコメントもあります。)これらのソリューションの多くは、Wordの代わりに使用することができ、その大半は無料またはオープンソースです。 ただし、他の誰にも見られない独自の内部ドキュメントにもWordを使用しています。私たちは、キャリアのかなりの部分をテキストで処理します。ドキュメントが特別なのはなぜですか。ささいな「私たちはこれ以上何も知りませんでしたが、今ここで立ち往生しています」とは別に、そのような決定を支持する理由がなければなりません。文書を書く他の、より口語的な(そして議論の余地なく強力な)手段の代わりに平文の文書を使用する際に、ソフトウェア開発プロセスが直面する課題は何ですか? 理由は異なるため、おそらくこれら2つの密接に関連するシナリオに個別に回答する必要があります。 最初からプレーンテキストのドキュメントを使用する 長期にわたるプレーンテキストドキュメントへの移行

12
コードレビューは良い習慣ですか?
私が働いている会社が新しいマネージャーを雇ったとき、彼らは私たちにすべての会議で誰かのコードを概観するように提案しました。私たちは2週間ごとに会議を開催しているため、開発者の1人がそのコードをプロジェクターに表示するたびに、他の開発者がそれについて議論します。 これは素晴らしいことだと思いました。各開発者はコードを書く際により慎重になり、経験をよりよく共有することができます。しかし、どういうわけか私たちはこれを忘れて、申し出は申し出のままでした。 これにはどのような利点があり、欠点はありますか?

15
プログラマーは建設業界から何を学ぶことができますか?[閉まっている]
ソフトウェアの設計と開発の原則について同僚と話したとき、類推の最も一般的なソースの1つは建設業界であることに気付きました。私たちはソフトウェアを構築し、設計と構造をアーキテクチャと見なします。 学ぶ(または教える)ための最良の方法の1つは、類推を分析することです。他の類推は構築から引き出すことができますか? (ソフトウェアですでに一般的に使用されているかどうか)。 プログラミングコンセプトが構築コンセプトにどのように似ているかについて、説明または個人的な経験を提供してください。 [ アイデアに対する芸術と人文科学から得られたクレジットからプログラミングへの概念 ]

4
TDDが高いROIを提供するエリアと、ROIが非常に低いためフォローする価値がない他のエリアはありますか?[閉まっている]
テスト駆動開発。好きです。 ただし、テストの作成にはオーバーヘッドが必要です。したがって、TDDをコードベース全体で普遍的に使用する必要がありますか、それともTDDが高いROIを提供する領域と、ROIが非常に低いためフォローする価値がない領域があります。

8
テスト駆動開発(および一般的なアジャイル)のこの制限は実際に関連していますか?
テスト駆動開発(TDD)では、最適ではないソリューションから開始し、テストケースを追加してリファクタリングすることにより、より良いソリューションを繰り返し生成します。ステップは小さいと想定されています。つまり、新しいソリューションはそれぞれ前のソリューションの近くにあることになります。 これは、勾配降下法やローカル検索などの数学的なローカル最適化方法に似ています。このような方法のよく知られた制限は、グローバルな最適値、または許容可能なローカルな最適値を見つけることを保証しないことです。開始点が悪い解の大きな領域によってすべての許容可能な解から分離されている場合、そこに到達することは不可能であり、メソッドは失敗します。 より具体的に言うと、いくつかのテストケースを実装した後、次のテストケースではまったく異なるアプローチが必要になるというシナリオを考えています。前の作業を破棄して、最初からやり直す必要があります。 この考え方は、TDDだけでなく、小さなステップで進行するすべてのアジャイルメソッドに実際に適用できます。この提案されたTDDとローカル最適化の類推には重大な欠陥がありますか?

9
理論上のTDDのみ
1年ちょっと前、幸運にも9か月の休憩をとることができました。その時に、C#のスキルを磨くことにしました。私は多くのプロジェクトに取り組み始め、TDDに従うことを余儀なくされました。 それはかなり啓発的なプロセスでした。 最初は大変でしたが、時間が経つにつれて、よりテスト可能なコードを作成する方法を学びました(実際には、よりソリッドなコードになる傾向があります)。 今、私は労働力に戻り、奇妙なことに気づいています。 私はTDDに従わないことを好みます。 TDDを使用すると速度が遅くなり、実際にクリーンなアプリケーションを設計するのが難しくなります。 代わりに、私はわずかに(大規模に)異なるアプローチを採用しました。 作業の垂直スライスを選択します 機能するプロトタイプを開発する すべてが整頓されるまでリファクタリングする 私が書いた美しく固くてテスト可能なコードに感謝します。 お気づきかもしれませんが、ステップ1は「テスト対象のパブリックサーフェスを定義する」わけではなく、ステップ2は「パブリックサーフェスからベジェスをテストする」わけではありません。また、どのステップにもテストが含まれていないことに気づいたかもしれません。私はテスト可能なコードを書いていますが、まだテストしていません...まだまだです。 ここで、実際にどのような種類のテストも行っていないことを明確にしたいと思います。私が書いているコードは動作します。手動でテストしているので機能します。 また、自動化されたすべてのテストを行っているわけでもないことを明確にしたいと思います。これは私のプロセスが異なるところです。そして、これが私がこの質問をする理由です。 理論的にはTDD。実際にはありません。 私のプロセスは少し進化しており、TDDと、非常に生産的で合理的に安全であると思われるテストとのバランスを取りました。次のようになります。 テストを念頭に置いて作業の垂直スライスを実装しますが、テストは作成しません。 そのスライスを修正する必要がある場合(1か月後など) 作業のスライスが正しいことを保証する単体テスト、統合テスト、動作テストなどを書く コードを修正する そのスライスを変更する必要がない場合、 何もしない テストを書く負担をコードを書く前から変更する前に単純にシフトすることで、はるかに機能するコードを生成することができました。そして、テストの作成に取り掛かるときには、作成するテストの数ははるかに少なくなりますが、ほぼ同じくらいの範囲(高いROI)をカバーします。 私はこのプロセスが好きですが、うまくスケールしないかもしれないと心配しています。その成功は、開発者が物事を変える前にテストを書くことに熱心であることにかかっています。そして、それはかなり大きなリスクのようです。しかし、TDDのリスクはまったく同じです。 だから、私は[BT] DD地獄に行くのですか、これは実用的なコーディングとテストの一般的な形式ですか? 私はこのように働き続けたいです。このプロセスを長期的に機能させるにはどうすればよいですか? 注意: 私は自分のプロジェクトの唯一の開発者であり、要件の収集、設計、アーキテクチャ、テスト、展開などすべてに責任があります。これが私のプロセスが機能している理由だと思います。

4
金メッキを停止し、作業開発をリリースするだけで満足する方法[終了]
私が所属する開発チームは、最近アジャイルのプラクティスに従って作業するようになりました。これは、コード(およびドキュメント)のゴールドメッキを止めることができないという事実を個人的に強調しており、その結果、要件をはるかに早く満たすソリューションを提供できたときに、当初の見積もりを上回りました。 私は自分の倫理が強迫観念に接していると思います。私はコードに執着しすぎて、リファクタリングしてn度完成させる前にリリースすることはめったにありません。これに気づいたことを嬉しく思いますが、どのように自分の態度/精神を変えて自分の進歩に満足し、代わりに時間通りにリリースできますか?

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