ソフトウェア工学

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

2
長時間実行される非同期ジョブを管理する際のベストプラクティス
私は、エンドユーザーが長時間実行される非同期処理ジョブを生成するWebページから要求を送信するプロジェクトの設計段階にいます。この問題の「ベストプラクティス」はありますか?Webサービスとサービスブローカーは良い方法ですか?Microsoftメッセージングキューはここで適用できますか?

6
テスト駆動開発-テストの作成者
もともと、テストを作成するのは開発者の義務ですが、多くの場合/ e-mature開発者では、これらのケースが80%のカバレッジでさえないことに気付きました。 開発者ではなく、特定のプロジェクトのすべてのテストを作成するQA担当者がいますか? それに短所はありますか?

5
プロジェクトを分岐しました。バージョン番号はどこから始まりますか?
私はプロジェクトを分岐し、その多くを変更しました。この分岐は、ここでの小さな機能の変更や、そこに埋められたバグの修正ではなく、かなり大きな変更です。ほとんどのコアコードのみが共有されます。 このプロジェクトはv2.5.0で分岐しました。しばらくの間、v3.0でフォークのバージョン管理を開始しました。ただし、これが正しい方法かどうかはわかりません。主にそのプロジェクトがv3.0に到達すると、混乱するからです。しかし、私はv1.0またはv0.1からやり直したくありません。これは、プロジェクトの初期段階、不安定性、および非検索性を意味するためです。ほとんどのコアコードは非常に洗練され安定しているため、これは事実ではありません。 私は何をすべきか本当に失望しているので、ここで尋ねます:この種の状況に対処する標準的な方法は何ですか?ほとんどの分岐は最初からやり直したり、バージョン番号を上げたり、私が知らない何かをします。
12 versioning 

6
開発者になるのに1年か2年かかるとしたら、それに戻るのは本当に難しいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 8年前に閉鎖されました。 私は開発者として約3年間働いています(uniからまっすぐ)、1年か2年かかると、業界に戻ることは不可能でしょうか? 私はユニの後、システムからギャップイヤーを取得しませんでしたが、30(24)に達する前にそれを行うべきだと考えています。それに全く戻らず、行き止まりの仕事をすることになります。 私が物事を見る方法は、一般的な概念/設計パターンなどは長年にわたって同じままであり、進化するのは主にコーディング構文/実際の実装であるため、劇的に進むべきではないということです。 また、女性開発者(はい、そこにいる人もいます!)は子供をもうけるために何年もかかり、その後もキャリアを続けています。それは不可能ではありません。 Ultimatum:1年か2年かかると、これまでに築いてきた(小さな)キャリアが破壊されますか?
12 experience 

2
「ゲーミフィケーション」についてのあなたの意見は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 あなたがしていることのゲーミフィケーションについて、興味深いGoogleトークビデオ(1時間程度の警告)を見ました。 StackExchangeのサイトセットでは、これらの原則の多くが採用されていることは明らかです。仕事を楽しくすることには魅力的なものがありますが、これらのアイデアを組み込むことができる問題領域はいくつあるでしょうか。彼らは間違いなくソーシャルアプリケーションに適用されますが、それだけですか?仮想ロイヤルティプログラムの概念も非常に魅力的です。 ゲーミフィケーションの簡単な説明: 採点と報酬のシステムがあります。たとえば、StackExchangeのレピュテーションはスコアリングの一種です。バッジは報酬の一種です。評判が上がるにつれて得られる追加の特権も一種の報酬です。 実際の償還を伴わないロイヤルティプログラムの例としては、コンビニエンスストアで製品を購入し、FarmVilleクレジットを取得するまでさかのぼったプロモーションがあります。実際の金銭や商品の交換は行われず、小売業者への費用はせいぜい最小限です。しかし、これらの仮想的な見返りに実際のお金をもたらします。 JohnLのリンクの恥知らずな使用:http : //en.wikipedia.org/wiki/Gamification 注: スピーカーは、アーキタイプになったと思われる4つのクラスのユーザーを指します。彼らは達成者、社交者、探検家、殺人者です。達成者はおそらく私たちすべてのプログラマーに当てはまるでしょう。どうやら80%の人々が社交家であり、軽く、対立しない対話のようです。エクスプローラーは、ゲーム/アプリケーションの隅々まで行き、イースターエッグや隠れた機能を発見します。キラーは勝ちたいだけでなく、負けてあなたを打ち負かしたことで賞賛/ステータスを得てほしいです。

17
SQLを記述する必要はまだありますか?
最新のほとんどの言語用の非常に多くのORMツールがありますが、それらをサポートする言語/環境で、プログラムでSQLを記述および実行するためのユースケースはまだありますか?もしそうなら、なぜですか? わかりやすくするために、プログラマがSQLを知る必要があるかどうか、またはデスクトップにSQLツールを用意する必要があるかどうかについては質問していません。ORMではなく、コード(または構成など)に含める理由を具体的に尋ねています。
12 design  sql 

8
オープンソースプロジェクトに取り組む時間をどのように見つけますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 少しの背景:私が始めた小さなオープンソースプロジェクトがあり、HTMLコードを生成するオブジェクト指向の手段を提供する基本的なフレームワークです(HTMLがあまり好きではないので、PHPが好きなので) 。いくつかのリリースされたソースといくつかのダウンロードがありますが、主にプロジェクトは私にとってのものであり、オープンソースの部分は副次的な利点にすぎません。 私がこのプロジェクトで開発できるようになった元のプロジェクトは、当分の間ほとんど休止状態になりました。つまり、この時点で私がそれに没入するすべての開発は個人的な時間のみです。残念ながら、私は現在、学士号を取得するために働いており、認定資格を取得しています。自宅に3ヶ月の赤ちゃんがいます。要するに、私が「自分の時間」に近づく頃には、私は仕事をする気がすることはめったになく、むしろただリラックスするような気がします。 それで、同じような立場にいると感じる人が他にいるなら、プロジェクトに取り組む意欲を保つためにどの戦略を使用しましたか?少なくとも100%の仕様をカバーするまでこれに取り組みたいと思っていますが、数か月後にソースをコミットしていません。手伝ってくれる人はいますか?

9
開発マシン環境のカスタマイズに費やした時間は価値がありますか?
プログラミングプロジェクトに取り組んでいて、自分の環境(OSXまたはLinux)の一部を変更する必要があります。Vimは私が望んでいることを正確に行っていないかもしれないので、数ヶ月(時には何年も)行ってきたやり方をやる代わりに、正しい方法を見つけ出します。または、bashで長らく手渡された何かをしているのかもしれませんが、なぜもっと良い方法を見つけられないのか、自分に言い聞かせます。 事は、私が外に出て、この時間を飛ぶことができるときです。時々、私が欲しいものを手に入れようとすることで立ち往生します。私は本当に近くにいることを知っているので、あきらめません。私は通常、最終的には常にそれを取得しますが、何時間もいじくり回し、グーグルで処理します。私はあきらめて、私が知っている何かに対処しなければならないと感じるのが嫌いです。 作業が終わったら、自分の環境がもう少しスムーズでパーソナライズされていることを知って温かい気持ちになりますが、自分の時間をよりよく使うことができるのだろうかと思います。どこで線を引きますか?すべてのUNIXスタイルのツールには、学ぶべき無限の量があるようです。 優れたプログラマーのサインは、コンピューターを思いのままに曲げようとする人だと常に考えていました。私はそれを正しくやっていますか?bashシェル、unix / linux、およびvimはいつまでも続くと思われるので、投資と見なします。 しかし、再び、私は3時間を費やしてvimperator firefoxプラグインが正しく機能するように愚かなことを試みました。 だから、このコミュニティはこれについてどう思うかと思う。

8
非同期関数を公開するインターフェイスは、リークの多い抽象化ですか?
私は「依存性注入の原則、実践、およびパターン」という本を読んでおり、この本で十分に説明されているリークのある抽象化の概念について読んでいます。 最近では、依存関係の注入を使用してC#コードベースをリファクタリングし、非同期呼び出しをブロックの代わりに使用しています。そうすることで、コードベースの抽象化を表し、非同期呼び出しを使用できるように再設計する必要があるいくつかのインターフェイスを検討しています。 例として、アプリケーションユーザーのリポジトリを表す次のインターフェースについて考えてみます。 public interface IUserRepository { Task<IEnumerable<User>> GetAllAsync(); } 本の定義によれば、リークの多い抽象化は特定の実装を念頭に置いて設計された抽象化であり、一部の実装は抽象化自体を通じて「リーク」します。 私の質問は次のとおりです。IUserRepositoryなどの非同期を念頭に置いて設計されたインターフェイスを、漏れやすい抽象化の例として検討できますか? もちろん、可能なすべての実装が非同期と関係があるわけではありません。アウトプロセス実装(SQL実装など)だけが必要ですが、インメモリリポジトリは非同期を必要としません(実際にインメモリバージョンのインターフェイスを実装する方がおそらくインターフェースが非同期メソッドを公開している場合は困難です。たとえば、メソッドの実装でTask.CompletedTaskまたはTask.FromResult(users)のようなものを返す必要がある場合があります。 あれについてどう思う ?

2
DDDでは、ドメインサービスは基本的にはファサードパターンやメディエーターパターンだけですか?
ドメイン駆動設計では、ドメイン層にいくつかの(従来の)サービスを含めることができます。たとえば、ユーザードメインの場合、次のようになります。 さまざまな方法でUserオブジェクトを構築するUserFactory インフラストラクチャレイヤーの永続サービスとの対話を担当するUserRepository ドメインレイヤーのUserServiceは、これら2つのサービスとインフラストラクチャレイヤーのメディエーターやファサードにすぎませんか、それともそれ以上ですか?


1
単純な属性ベースのアクセス制御(ABAC)の実装に向けて推奨されるロードマップは何ですか?
ACLとRBACについて読んだとき、私はそれを簡単に理解しているようです-アセットへのアクセスが許可されているユーザー名またはロールがあります。また、それらを実装する方法も確認できます。 すなわち、この画像は、ACLとRBACの明確なビューを私に提供します(上に基づいてデータベーステーブルを設計し続けることができるように):( プレスブックの 画像提供) 私が苦労しているのはABACです。これまでに見つけたさまざまな画像は、手が波打ったり過度に複雑であったり、承認を行うサードパーティの外部エンティティの使用を提案したりしています。または、奇妙な属性の例を挙げてください。使用方法は完全にはわかりません。 開始例 それでは、実際の生活から始めましょう。たとえば、70〜200人の会社があるとします。そして、私が保護する資産は、さまざまなページがたくさんあるウェブサイトです。特定の人に特定の資産へのアクセスを許可したい。 たとえば、あるLeslieユーザーがと呼ばれるWebページにアクセスPrice ManagerできるようにしてTravel、そのページの価格グループの価格のみを管理できるようにしProduct、同じページのグループの価格は管理できないようにします。ABACを使用してこれをどのように実装しますか? これまでのところ、私は、Leslieいくつかの属性(ただし、どの属性とこれらの属性は何か?)を割り当て、それらを格納するデータベーステーブルを作成できると思います。次に、これらの属性を調べ(LeslieRBACのように「役割」とは見なさない)エンジンを設計し、そこからページへのアクセスを許可するかどうかを決定します。そのエンジンはどのように見えますか?単純なif / elseブロックですか?他に何か? レスリーが後で彼女の立場を変更し、誰かが彼女のアクセス権を変更する必要がある場合はどうなりますか?彼女がアクセス権を移動しProductて取り消す必要がある場合、どのように見えますTravelか?彼女はアクセスが取り消さにしている必要がある場合にどのようにコード化されませんPrice Manager完全にページとなり、もはやどちらへのアクセス権を持っているTravel、またはProduct? 私の場合の資産は、言い換えれば、Price Managerであり、ユーザーはそのページのさまざまな価格グループ(Travel価格設定、Product価格設定など)にアクセスできます。 私が探しているのは、詳細を明確にするための、そして推測することなく立ち去って実装できる場所への実装に向けた、合理的に完全なロードマップです。つまり、概念的に完成したり、データベース構造などを視覚化できる具体的な例を示したりできます。 おまけ:ABACは、比較的小さな許可の必要性、つまり70〜200人を管理し、150〜450の資産にアクセスするための適切な方法ですか?代わりにACL / RBACを使用する方が良いでしょうか?

8
ビジネスロジックの外でコードのログを完全に記録し続けることは可能ですか?
AOPを利用して、ビジネスロジックからロギングコードを削除できます。しかし、それは単純なもの(つまり、メソッドの入り口/出口およびパラメーター値のロギング)をログに記録するためにのみ使用できると思います。 ただし、ビジネスロジックに何かを記録する必要がある場合はどうなりますか?例えば public void SomeDomainMethod(string id) { //Get user by Id User user = Users.Get(id); if (user == null) { Log.Warn("user is not existed"); //<----------------- Log A throw new InvalidOperationException("user is not existed"); } //Step 1 while(true) { //do something } Log.Info("Step 1 is completed"); //<----------------- Log B //Step 2 …

3
JSONキーでハイフンを使用することは悪い習慣ですか?
ハイフン(ケバブケース)を使用するJSONキーへのアクセスに関する多くの質問が表示されますが、今ではキーにキャメルケースまたはsnake_caseを使用するべきかどうか疑問に思っています。言語間で移植すると、ハイフンが複雑なマッピングを作成することもあります。一部のJSONデシリアライズライブラリがこれらのキーをcamelCaseスタイルに変換するのを見てきました。 例: var something = { "some-value": 'thing' } 対 var something = { "someValue": 'thing', "some_other_value": 'thing_two' }

4
非OOPパラダイムは、カプセル化などの概念をサポートしていますか?
オブジェクト指向プログラミングの重要な概念の1つはカプセル化です。ただし、最近のソフトウェアの世界は、関数型プログラミングなどの他のパラダイムに傾倒しているようです。 それは私に、カプセル化と他のOOP原則についてはどう思いますか?彼らは間違っていますか? OOPが間違って適用されているのですか?たとえば、アランケイはOOPSLA'97基調講演で言ったことで注目されています。 Joe Armstrong-「オブジェクトは関数とデータ構造を分割できない単位でバインドします。関数とデータ構造はまったく異なる世界に属しているため、これは根本的なエラーだと思います。」

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