软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

3
没有程序员会建立我的半成人网站。为什么?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我一直在寻找使这个网站完成很长时间。 我以自己想要的东西井井有条地撰写文章,并在人造页面的Photoshop中完成了清晰的示例来给出构想,并且没有隐藏的惊喜,我将成为程序员的理想之选。 不幸的是,没有公司会接触该网站。没有什么违法的,甚至没有冒犯性的。这是成人的专业Dominatrices列表。我看不到有什么大不了的,当有更糟糕的情况和更多的核心网站出现时,这只是清单。职业统治是美国和世界大部分地区的合法职业。人们只是不想接触该网站。真的很奇怪 我拥有网站的所有信息和细节,这些信息和细节都完美而清晰地列出。我只是没有回应,或者是告诉我他们不会碰任何东西的人。 是否有一个原因?

1
Apache许可和专利
我试图了解Apache许可证如何影响专利。关于Apache网站http://www.apache.org/licenses/LICENSE-2.0第3节,我是否应该在第一部分说的是说被许可人可以对该专利做几乎任何事情? 在后半部分,是说如果许可人决定起诉侵犯其专利的人,他们将失去其所有专利,还是在谈论被许可人?

5
接口的功能编程替代方案是什么?
如果我想以“功能性”风格进行编程,我将用什么替换接口? interface IFace { string Name { get; set; } int Id { get; } } class Foo : IFace { ... } 也许一个Tuple<>? Tuple<Func<string> /*get_Name*/, Action<String> /*set_Name*/, Func<int> /*get_Id*/> Foo; 首先使用接口的唯一原因是,我总是希望某些属性/方法可用。 编辑:有关我在想什么/尝试的更多详细信息。 说,我有一个方法,它具有三个功能: static class Blarf { public static void DoSomething(Func<string> getName, Action<string> setName, Func<int> getId); } 对于BarI 的实例,可以使用此方法: …


2
我如何知道我是否有足够的单元测试范围来删除集成测试?
我正在使用旧系统(这意味着它是在没有测试的情况下编写的)。我们试图通过编写集成测试来测试某些系统,这些集成测试从外部测试功能。 这使我有信心重构代码的某些部分,而不必担心会破坏它。但是问题在于这些集成测试需要一个部署(2分钟以上)和很多分钟才能运行。而且,它们很难维持。它们每个都覆盖了数千行代码,当其中一个中断时,可能需要花费数小时来调试原因。 我最近为这些功能更改编写了很多单元测试,但是在提交之前,我总是做一个新的部署并运行所有集成测试,以确保我不会错过任何东西。至此,我知道我的单元测试和某些集成测试与它们的测试重叠。 我怎么知道我的良好单元测试足以覆盖不良的集成测试,以便我可以删除该集成测试?

6
您可以声称您的产品在使用不能保证产品的OSS软件时适合其用途吗?
我正在为客户设计必须有效且适合用途的产品。 它基于LAMP堆栈(PHP / Cake)构建,因此具有GPL,MIT,PHP,APACHE许可证: “按现状”,没有任何明示或暗示的保证或条件,包括但不限于标题,非侵权,可贸易性或特定用途的适用性的任何保证或条件。您应自行负责确定使用或重新分发作品的适当性,并承担与您根据本许可行使许可有关的任何风险。 我的理由是我的产品有效且适合以下用途: 签名的UAT文档证明其有效性和适用性。 堆栈被开发人员,行业和最终用户(netcraft,gartner等统计数据)广泛使用,以至于人们普遍认为该堆栈适用于目标。(即我们可以在一定程度上忽略保修免责声明中的适用性声明) 这是有效的观点吗?我可以声称我的软件适合使用吗?

3
如何避免在我创建的开源项目的标识符,包或名称空间中使用自己的名称?
我在自己的时间里做了很多开发工作。我从事的这些项目都是为了娱乐和学习(到目前为止)。我通常使用Maven进行Java开发,但也曾涉猎.NET和Python。我从事的所有项目都使用开源许可证,尽管其中大多数不在任何公共代码存储库中。 Java / Maven开发要求我使用唯一的groupId(例如,“ com.mydomain”)和唯一的package(目录)结构,通常包含groupId.NET开发鼓励唯一性,namespaces在这种情况下,我使用与Java package概念相似的约定。为了确保唯一性,我通常只使用其中一个域名颠倒的域名(例如“ ca.jessewebb”);我相信这是非常普遍的做法。 我正处于创建一个新的开源Java / Maven项目的初期阶段(我们将其称为“ newproj”),我想将其放在GitHub上。我在GitHub上的用户名是“ jessewebb”,因此它的网址为:https://github.com/jessewebb/newproj。我不想麻烦注册“ newproj.com”域名,所以我决定分别使用“ ca.jessewebb”和“ ca.jessewebb.newproj”作为groupId和package。 在我看来,我的个人身份出现在代码中以及作为项目主页的一部分(在GitHub URL中)可能会导致潜在的贡献者对参与我的项目进行三思。这是一个问题,我不希望它成为我的项目。如果可以,我希望传达的信息是我不拥有该项目。现在,老实说,这确实没什么大不了的,因为我怀疑我的项目会吸引社区的广泛参与,但是我也认为这更多的是避免任何可能阻止潜在捐助者的理由。 再举一个例子,我几年前创建了一个Google Code项目(我们称其为“ oldproj”)。创建项目时,我知道我将其托管在Google Code上,因此我使用了groupIdand包名称“ com.googlecode.oldproj”,这与Google Code为每个新项目提供的默认域名相反。事实证明这不是一个好主意。一年多后,我搬到了代码到不同的回购协议,我不得不重新命名这些标识符(以及我没有有但...)。当时,我没有任何域名,最终我购买了域名“ oldproj.com”,并使用了它。我之所以喜欢它,是因为它为项目赋予了自己的身份,并且我并没有在代码上加盖我的名字。我可以很容易地注册“ jessewebb.ca”域名,并使用“ ca.jessewebb.oldproj”作为软件包名称,但是我没有,因为那时我也有同样的担忧。 所以我的问题是 在创建开源项目时如何避免使用我自己的(域名)名称,同时又保持包/名称空间的唯一性? 随着项目获得更大的发展势头,注册域名很有意义,但是尽早这样做似乎很愚蠢和浪费金钱。我意识到我实际上并不需要拥有域名才能在代码中使用它,但是这感觉很错误,同时可能导致擅自占地者从您的身下抢走它。别人对这个困境怎么办?是否有一些流行的(广泛使用的,大型社区等)开源项目的示例,这些项目包含原始开发者的身份作为其自身标识符的一部分?

1
Microsoft公共许可证与MIT?
我正在使用新的插件(flexbox),并且遇到了MS-PL许可证,这是我以前从未遇到过的。 过去,我主要使用MIT和Apache许可的项目,所以我不知道此项目的主要区别是什么。 这是它的链接:http : //opensource.org/licenses/MS-PL 谁能帮我解释一下差异吗?我通常对Microsoft保持警惕,因此该产品附带的事实使我感到紧张。

5
多个CPU /内核可以同时访问同一RAM吗?
我猜这是会发生的: 如果两个内核试图访问RAM中的相同地址,则一个内核必须等待另一个内核访问RAM。在第二时间,每个核心将尝试访问相同的地址,他们仍然可能有RAM缓存,这样他们就可以访问各自的同时缓存。 如果两个内核试图访问同一RAM中的不同地址,则一个内核必须等待另一个内核访问RAM。 换句话说,我想对于RAM密集型编程任务来说,多处理将无济于事,除非它涉及每个内核多次从RAM中的同一地址读取数据。 那么,多个CPU /内核可以同时访问同一个RAM,还是我所说的正确?

4
得墨meter耳定律如何适用于有关耦合和内聚的面向对象系统?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 得墨meter耳定律如何应用于具有耦合和凝聚力的面向对象系统? 我正在读一本书“软件开发和专业实践”,偶然发现了有关LoD的一章,并对如何将这一原理应用于面向对象的系统感到好奇。

2
禁止转售的开源许可证
我有一个开源项目,它是TFS的一个附件(即,它适用于开发人员和使用TFS的人员。) 当前正在使用GPL。但是我发现GPL并不能真正代表我要使用许可证做的事情。 我希望我的代码对所有想要使用它的人免费。如果修改并使用它,那也很棒。您不必开源修改内容。 但是我想阻止某人构建我的代码并出售它。或对其进行修改并出售。(任何想要这样做的人都必须与我协商单独的许可证。) 是否有一个开放源代码许可证可以防止转售,但允许下载该许可证的个人/公司完全无售卖使用?

2
Git存储库的结构
很抱歉,如果这是重复的,我看了看。 我们要搬到Git。在Subversion中,我习惯于使用\ trunk,\ branches和\ tags文件夹。 使用Git,在分支之间切换将替换工作目录的内容,因此我是否可以假设我们以前的工作方式不适用于Git? 我的猜测是,我将拥有一个可能带有gitignore和readme.txt的repo文件夹,然后是组成该repo的项目的文件夹,仅此而已。

5
Java(Android)中多重继承的正确解决方法
我有一个概念上的问题,即代码的正确实现似乎需要多重继承,在许多OO语言中这不是问题,但是由于该项目是针对Android的,所以没有诸如multi之类的东西extends。 我有一堆的活动,从不同的基类,如简单的衍生Activity,TabActivity,ListActivity,ExpandableListActivity,等。此外我有我需要的地方变成一些代码片段onStart,onStop,onSaveInstanceState,onRestoreInstanceState和其他标准的事件中的所有活动处理器。 如果所有活动只有一个基类,则可以将代码放入一个特殊的中间派生类中,然后创建将其扩展的所有活动。不幸的是,事实并非如此,因为存在多个基类。但是,将代码的相同部分放入几个中间类并不是一种方法,恕我直言。 另一种方法可以是创建一个助手对象,并将上述事件的所有调用委托给助手。但这要求包括辅助对象,并在所有中间类中重新定义所有处理程序。因此,这里的第一种方法没有太大区别-仍然有很多代码重复。 如果在Windows下发生类似情况,我将继承基类(与ActivityAndroid中的类“相对应”的基类),并在那里(在一个地方)捕获适当的消息。 为此,在Java / Android中可以做什么?我知道有一些有趣的工具,例如Java工具(带有一些真实的示例),但是我不是Java专家,所以不确定在这种情况下是否值得尝试。 如果我错过了其他一些不错的解决方案,请提及它们。 更新: 对于那些可能对解决Android中的相同问题感兴趣的人,我发现了一个简单的解决方法。存在Application类,该类除其他外提供接口ActivityLifecycleCallbacks。它正是我所需要的,它使我们能够拦截所有活动的重要事件并为其添加一些价值。此方法的唯一缺点是,它从API级别14开始就可用,这在许多情况下还远远不够(目前对API级别10的支持已成为典型要求)。

5
寻找相关软件组件的版本编号的最佳实践
我们正在尝试确定一种对彼此依赖的软件组件进行版本编号的好方法。 让我们更具体一点: 软件组件A是在嵌入式设备上运行的固件,而组件B是其在普通PC(Linux / Windows计算机)上的驱动程序。他们正在使用自定义协议相互通信。由于我们的产品还面向开发人员,因此我们将提供两个组件的稳定和不稳定(实验)版本(固件是封闭源代码,而驱动程序是开放源代码)。我们最大的困难是如何处理通信协议中的API更改。 在驱动程序中实施兼容性检查时-它检查固件版本是否与驱动程序版本兼容-我们开始讨论版本编号的多种方式。 我们提出了一个解决方案,但我们也想重新发明轮子。这就是为什么我希望从程序员/软件开发人员社区获得一些反馈的原因,因为我们认为这是一个普遍的问题。 所以这是我们的解决方案: 我们计划遵循广泛使用的major.minor.patch版本编号,并对稳定/不稳定版本使用偶/奇次编号。如果我们在API中引入更改,则会增加次要编号。 此约定将导致以下示例情况: 当前稳定分支为1.2.1,不稳定分支为1.3.7。现在,针对不稳定的新补丁更改了API,这将导致新的不稳定版本号变为1.5.0。一旦不稳定分支被认为是稳定的,例如在1.5.3中,我们将其发布为1.4.0。 对于以下任何相关问题的答案,我都会感到高兴: 您可以提出解决上述问题的最佳做法吗? 您认为我们的“习惯”约定好吗? 您将对上述约定进行哪些更改?
15 versioning 

3
子链接到父链接-好主意吗?
我有一种情况,我的父母知道这是孩子(duh),但我希望孩子能够引用父母。原因是我希望孩子有能力在感觉到自己时将自己指定为最重要或最不重要。当孩子这样做时,它将移动到父母孩子的顶部或底部。 过去,我曾在孩子身上使用WeakReference属性来引用其父对象,但我觉得这增加了一个烦人的开销,但这也许是最好的方法。 这只是一个坏主意吗?您将如何以不同方式实施此功能? 更新1:添加更多上下文。这是一个渲染系统,因此父容器是组合在一起的窗口列表。子项(窗口)说“我最重要!” 希望基本上呈现在其余窗口的顶部。 父母只是将这些孩子分组在一起的逻辑容器。我可以看到在哪里添加事件以表明请求位于顶部是一个好主意。但是除了实现(孩子想与父母做什么)之外,为什么不希望有child-> parent链接?双向链接列表可以做到这一点,这样人们就可以遍历某物。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.