软件工程

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

3
关于隐式和显式线连接的建议
我想知道有关Python中的隐式连接和显式连接的建议。 特别是,您是否偏爱一种形式?您推荐什么作为一般默认设置?您有什么条件来选择一个,另一个,如果您偏爱一个,那么何时为另一个设置例外? 对于这个问题,我有一个反映我自己偏见的答案,但是在发布自己的答案之前,我想知道其他人的想法……如果您可以拥有一套比我的想法更好的标准,那么我一定会接受您的回答。 有些建议可能会在其他编程语言中推广到这种选择,但是由于某些特定于语言的功能,我自己的偏见在Python中会更强一些,因此我想知道您可能会采用的一般性推理和以Python为中心的推理关于这个话题。 在某些背景下,讨论是围绕一个关于stackoverflow的特定问题进行的,但是我认为将讨论移至此处是一个更合适的问题,以避免由于这个切线使SO的答案变得混乱,因为它已经偏离了主题。原来的问题。您可以查看该问题及其答案,以获取开始讨论的示例代码片段。 这是一个简化的示例: join_type = "explicit" a = "%s line joining" \ % (join_type) # versus join_type = "implicit" b = ("%s line joining" % (join_type))
9 python 

6
将框架运行时存储在源代码控制下是一种好习惯吗?
我知道很多软件商店都将二进制文件置于源代码控制之下。但是,我们的商店开始将整个框架存储在资源库中:DirectX运行时,CUDA,nVidia Optix等。 据说可以简化开发机器的设置(据说,获取最新版本并开始编码)。但是,它极大地膨胀了存储库,并给它带来了不相关的历史负担。 我从未见过这样的用法模式。您认为这是一种好习惯吗? [编辑:]我对源代码控制隔离的第三方二进制文件没有问题。这个问题涉及整个框架运行时,通常包含10多个二进制文件。作为一个极端的示例,请使用Windows SDK(感谢上帝,我们没有保留它在存储库中,但我认为原则上没有区别)。

2
MIT开源许可证是否要求将工作衍生产品公开(在MIT许可证下)?
我正在为要发布的库寻找开放源代码许可证。理想情况下,应该允许人们在免费或商业应用中使用该库而无需支付我任何费用,但是如果创建了该库的任何衍生作品(例如,对该库进行的任何改进),则应向该图书馆下的所有人开放该库。相同的许可证。 换句话说,我要提出以下道德准则:“您可以免费从这项工作中受益,如果您对其进行改进,那么我也可以免费从您的改进中受益”。这是我正在寻找的typeleft许可证。 MIT许可证看起来像是一个可能的解决方案,但我不清楚是否必须向所有人公开提供此许可证涵盖的代码的衍生作品。任何人都可以澄清/确认吗?如果还有另一个更合适的开源许可证可以满足我的需求,我也很感兴趣。谢谢。

1
这是不好的设计吗?如何改善?
我前一阵子写了以下内容,但是最近我来回顾它,现在认为它不是一个好的设计。 该设计针对使用Entity Framework 4的一种模块化数据库层。有一个数据库对象,该对象从指定位置的外部库中(延迟地)加载实体框架上下文,并且所加载上下文的实例存储在哈希表中它们的名称(例如“ ContentMgmtContext”)。 该系统中与数据库的所有联系都是通过存储过程进行的。要调用数据库,查询方法签名如下所示: List<TReturn> Query<TReturn>(string Context, string Procedure, TransactionScope Scope, List<ObjectParameter> QueryParameters) 我喜欢这种模块化。但是,这种方法有一个明显的缺点:when using the database layer, the code using it has to have a reference to the library in which the context is stored, in order to access the types returned by the stored procedures through …
9 design 

5
使用O(n)中的后缀数组的字符串的最小词典旋转
我将引用ACM 2003中的问题: 考虑一个长度为n(1 <= n <= 100000)的字符串。确定其最小词典编排旋转。例如,字符串“ alabala”的旋转为: 阿拉巴拉 拉巴拉 阿巴拉尔 巴拉拉 阿拉拉卜 拉拉巴 阿拉巴拉 其中最小的是“ aalabal”。 至于解决方案-我知道我需要构造一个后缀数组 -可以说我可以在O(n)中做到这一点。我的问题仍然是,如何找到O(n)的最小旋转度?(n =字符串的长度) 我对此问题非常感兴趣,但仍然不知如何解决。我对概念和如何解决问题更感兴趣,而不对具体实现更感兴趣。 注意:最小旋转的含义与英语词典中的顺序相同-“ dwor”在“ word”之前,因为d在w之前。 编辑:后缀数组构造需要O(N) 最后编辑:我想我找到了解决方案!!!如果我只是合并两个字符串怎么办?因此,如果字符串是“ alabala”,那么新字符串将是“ alabalaalabala”,现在我只需构造一个后缀数组(在O(2n)= O(n)中)并得到第一个后缀?我想这可能是对的。你怎么看?谢谢!


2
JavaFX有未来吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 8年前关闭。 我并没有打算对相同的问题进行哈希处理和重新哈希处理,而只是决定要首先学习什么(JavaFX,Flex,HTML5等),我将进行某种调查,尤其是随着最近出现类似问题以来,至少一年。 那么,未来几年JavaFX作为RIA技术的前景如何?
9 java  ria  javafx 

8
为什么每个人都用大写字母写待办事项?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我也一样 当我的代码中有要做的事情时,我写//TODO ...。但是我很好奇,这是什么时候开始的,是否有理由在所有大写字母中写“待办事项”?
9 comments 

3
自定义堆分配器
大多数程序在堆分配方面可能很随意,甚至在某种程度上,功能性编程语言更喜欢分配新对象而不是修改旧对象,并使垃圾回收者担心释放对象。 但是,在嵌入式编程中,静默扇区中,由于内存和实时限制,在许多应用程序中根本无法使用堆分配。每种类型将要处理的对象数量是规范的一部分,并且所有内容都是静态分配的。 游戏编程(至少对于那些雄心勃勃地致力于推动硬件发展的游戏)有时介于两者之间:您可以使用动态分配,但有足够的内存和软实时约束,因此您不能将分配器视为黑匣子,更不用说使用垃圾回收了,所以您必须使用自定义分配器。这是C ++仍在游戏行业中广泛使用的原因之一。它可以让您执行以下操作:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html 在这两个领土之间还有哪些其他域?除游戏外,在哪里大量使用自定义分配器?

1
第一位Malbolge口译员如何进行测试?
根据Wikipedia的说法,Malbolge到达时很难理解,以至于第一个Malbolge程序才用了两年的时间才出现。 如果是这样,那么第一个Malbolge解释程序是如何测试的(检查给出Malbolge程序时它是否做对了)?完全经过测试了吗?
9 testing 

2
S表达式的可读性
简而言之,对于那些不知道的人,Lisp函数/操作符/构造都统一地这样称呼: (function arg0 arg1 ... argN) 那么用类似C的语言表达的是 if (a > b && foo(param)) 变成了Lisp sexp (if (and (> a b) (foo param))) 。随着事情变得更加真实/复杂,对我来说,它们对应的s表达式也是如此。 我知道这很可能是一个主观的问题,但是-对于许多Lisp黑客来说,这个烦恼总是必须解决的吗? 还是迟早会最习惯这种(缺乏)语法的? 无论如何,为了提高可读性(尤其是从长远来看),添加分界线(大多数情况下通常不会添加C等效项)是个好主意吗?任何其他建议都将受到欢迎。


2
编程范例和维护开发人员
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我正在阅读《软件工程的事实和谬论》,其中有一部分内容需要维护。自从我多年以来一直是维护开发人员以来,我就收到了很多有趣的事实。这是三个。 事实41:维护通常消耗软件成本的40%至80%(平均60%)。因此,它可能是软件最重要的生命周期阶段。 事实42:增强功能约占软件维护成本的60%。纠错率约为17%。因此,软件维护主要是在向旧软件添加新功能,而不是对其进行修复。 事实45:更好的软件工程开发会带来更多的维护,而不是更少。 这是违反直觉的,事实证明,好的软件因为易于更改而具有更多的维护性。因此,它的使用时间更长,是的,导致更多的变化。 哪种范例(例如功能,面向对象,过程)具有最佳的可维护性,是否有任何研究可以支持此范例?

8
导致软件过度膨胀的原因是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 今天,我决定为Creative Sound Blaster驱动程序执行全新安装,因为它们总是在一段时间后开始出现故障。那意味着我必须经历整个清理过程。那花了我将近2个小时。 老实说,我看不出原因吗?尽管Creative(恕我直言)在生产永远无法工作的劣质软件方面绝对是第一名,但膨胀的问题并不仅仅局限于他们。 带有Canon数码相机驱动程序的PC将具有大约10种与各种连接互连的Canon条目。Visual Studio也是一个很好的例子,大约有50个左右的条目可以进行完整安装,并且只有通过完整安装才能修复该问题。当我从VS2k8升级到VS2k8SP1之类的东西时,它甚至破坏了整个操作系统的安装。事实证明5GB的可用空间不足以容纳300Mb的补丁... 因此,这似乎确实是一个普遍存在的问题。如今,几乎每个应用程序通常都包含解包程序,已安装的多个间谍“友人”,驱动程序通常在600Mb左右,包括打印机等的所有内容。 但为什么?是开发人员的错吗?诸如此类的应用程序是梦night以求的支持,如今它们永远无法100%正常运行,而且我所知道的几乎所有用户对于作为USB拇指驱动器/打印机/相机/声卡/浏览器的强制性驱动程序安装后所产生的所有膨胀都非常反感。 从我所知,例如Firefox安装,Nullsoft的NSIS似乎是唯一没有not肿的干净安装系统。干净,几乎基于xcopy的安装没有任何问题。 那么,为什么人们不使用植根于30层互连之上的简单设置和应用程序呢?是因为开发人员懒惰吗?使用代码生成工具?是因为公司强迫重量级应用程序成为用户会喜欢的东西吗?是什么原因造成的,有希望软件有一天能重返基础吗?从头启动新应用程序时,应采取哪些步骤来避免膨胀?

3
是否有类似于LINQPad的技术来编译在浏览器中运行的C#?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 想想JSFiddle。LINQPad非常适合具有类似选项的快速C#。是否在浏览器中运行类似LINQPad的东西?
9 c# 

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.