软件工程

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

3
在MySQL数据库中对关系数据进行版本控制的模式?
我正在尝试为项目找到一种方法,用户可以在其中编辑记录,并能够查看这些记录的过去版本。这是一个使用列表的简化示例架构: TABLE list ( id int auto_increment primary key, user_id int, title varchar(255) ); TABLE list_tasks ( id int auto_increment primary key, list_id int, title varchar(255), order int, is_complete tinyint ); 因此,用户可能会进来并对列表进行几次编辑(例如,添加或删除任务,重新排序任务,标记某些任务完成,重命名任务等),然后保存它们。此时,我想生成列表和任务的“版本2”,并让他们能够查看以前的版本,但是当他们访问列表时,请始终获取最新版本。 是否存在用于以这种方式在MySQL数据库中处理版本控制数据的通用方法/设计模式?
12 mysql  versioning 

8
在规避风险的环境中,我如何倡导半严格的发布时间表?
最近,我越来越被描述为我在该行业中最令人沮丧和士气低落的经历之一困扰:必须坐在经过测试,重新测试,上演的发行版上,并且出于所有目的并且已经准备好装运/部署目的。 作为一个全方位解决方案的人,而不仅仅是一个顽固的编码人员,我确实理解甚至提倡适当的变更控制。但是最近,在覆盖我们的基地和按时运输之间的微妙平衡已经变得不平衡了,在恢复到理智的状态上,我几乎没有成功。 我正在寻找有说服力的论据来帮助说服规避风险的管理人员: 开发团队应该(或必须)能够设置自己的发布时间表-在一定的范围内(除了最大的财富500强公司,对于所有其他公司,1-3个月应该足够保守); 软件版本是重要的里程碑,不应轻率地对待。换句话说,不必要的延误/停工是极具破坏性的,应仅将其作为解决某些关键业务问题的最后手段;和 希望(或要求)作为利益相关者参与的外部(非dev / non-IT)实体有责任与开发团队合作,以达到发布时间表,尤其是在计划船交付前的最后一周左右日期(即用户测试/分期)。 以上是根据经验对我而言正确的断言,但看来我现在必须证明这一点-因此,如果存在这样的问题,我想在这里提出一些建议。 谁必须向管理层“出售”固定(或半柔性)发布周期的想法,才能指出一些论点/策略有效或有说服力,哪些无效?除了明显的时间表争用和沉没成本之外,即使在“公司”环境下,是否有任何硬数据/证据可用于证明运输实际上很重要? 另外,我也乐于听取建设性的争论,即为什么时间表灵活性(即使在数周/数月的时间内)比按期交付更重要;我现在很难相信,但也许他们知道我不知道的东西。 请注意,我们已经分阶段发布了产品,除了生产之外,它经历了每个阶段。使用商业错误跟踪器跟踪问题,并且分配给此版本的每个问题(其中100%)均已解决。我意识到这很难让人相信,这才是真正的重点-出于无法解释的原因,管理层会延迟100%,功能完善,经过全面测试并且获得了利益相关者的批准,这是没有道理的,但这就是事实,这就是正在发生的事情,这是要解决的问题。

9
Greenspun的第十条规则,每个大型项目都包括Lisp解释器吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 Greenspun的第十条规则(实际上是唯一一条规则)指出: Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp. 我的记忆是,有一些关于该主题的论文,也许是针对Borland的Quattro(电子表格)项目的,可能还有其他论文。Google没有帮助,也许没有想到合适的搜索词。我正在寻找支持该主张的论文或文章。

1
GPL复制版权声明
该“GPL如何”有以下要说的应用从其他程序复制的代码的版权声明: 如果您从同一许可证涵盖的其他程序中复制了代码,则也复制其版权声明。将所有版权声明放在一起,就在每个文件顶部附近。 我完全重构了C#库,它本身是Visual Basic(VB)代码的端口。当前,原始VB代码是根据Microsoft公共许可证(Ms-PL)发布的,但最初是根据GPL发布的。C#库是GPL,可以继续使用旧的VB库。基本上,我只使用了相同的“技术”。 我不在乎使库成为GPL,所以这不是问题。(从这个答案中,我收集到的库可能被认为是派生的作品。)但是,我确实发现,必须在每个源文件中复制以前的版权声明非常麻烦。我宁愿只在自述文件中引用它们。这个问题讨论了向每个源文件添加通知的必要性,但是答案之间并没有达成共识。因此,为了安全起见,我想将许可证添加到每个文件中。 我还必须在所有源文件中都包含我的图书馆所基于的项目的版权声明吗?
12 licensing  gpl 

4
准备源代码移交计划
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我们公司即将获得一个巨大产品的源代码。 开始移交时要考虑哪些事项,以确保我们拥有一切并能够在将来维护该产品?

2
是否首选Spring + Hibernate而不是EJB 3?
我的感觉是,每当新的JEE项目开始(适用这些技术的地方)时,人们就会喜欢使用Spring + Hibernate的组合而不是EJB 3。 似乎甚至建议初级程序员而不是EJB。 这是个人喜好还是有相关原因?(例如,由早期EJB版本造成的个人伤痕导致对EJB的不信任或技术膨胀与性能原因或学习曲线有关)?

11
有意义的运算符重载示例
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 在学习C#时,我发现C#支持运算符重载。我有一个很好的例子有问题: 有道理(例如,添加名为羊和牛的类) 不是两个字符串串联的示例 欢迎使用基类库中的示例。
12 c#  .net  operators 

2
GPLv2程序可以依赖Apache许可的库吗?
许可了GPL(版本2)的软件程序是否可以依赖APLv2许可的库,而不会违反GPL?这里的语言向我暗示也许没有。 在我的特定情况下,我正在看一个使用某些APLv2许可的外部库的守护程序。 更新 (响应答案/评论。) 出于这个问题的目的,我无法重新授权主程序(守护程序) 主程序已经扩展了使用apr-util和其他APLv2组件的功能 我的问题是,我是否可以在GPLv2下发布扩展的守护进程,或者如果我承诺(a)发布此扩展,那么这是否需要我自己保留(不分发)和/或在没有APLv2的情况下重新实现,并且(b)使守护程序保持GPL?

6
如何传达更改供应商软件的风险?
我们工作时遇到一个主要问题,它的名称是“定制”。我们有一个旧的(超过10年的)供应商软件系统,我们的IT和会计部门以前喜欢对其进行自定义。沿线某个地方,该软件开始出现漏洞。然后,在完成大部分自定义之后,我被录用了。 我在系统中发现的几乎每个问题都是定制的直接结果。我们所做的一切更改都有破坏关键业务财务软件的风险。但是,会计部门一直在建议更改(因为我们总是说“是”!),似乎很少有人会对更改的影响程度有所尊重。 某些更改不会引起任何问题。可以在供应商软件中自定义表单,也可以将其自定义,我们可以在表单字段中移动,删除它们,等等。但是,对于像这样的每一个无害的自定义,它们还建议诸如存储过程和触发器之类的更改,以操纵供应商应用程序数据库中的数据。 我最近(勉强)让他们停止尝试将客户从一个供应商程序导入另一个供应商程序,因为这些信息是完全不兼容的。解决该问题的原因是因为我发现系统无法在用户端正常运行。任务比他们想象的要复杂,所以他们放弃了。无论用户端任务多么简单,都不应执行他们想要的操作。 我如何传达这种改变该系统工作方式的风险,尤其是在数据有效性受到威胁时?我是一名新员工(6个月),现在已经成为现状,但是这冒着我们财务数据和支持合同的有效性的风险-一旦供应商的支持人员听到“ X已被自定义”,这使他们有很多理由不这样做支持我们或告诉我们这是我们的错。

2
使用Git管理Web应用程序的多个版本
我们拥有一系列应用程序,所有应用程序都具有相同的基础。到目前为止,我一直在开发此基础,Git工作流程非常简单: 开发在develop分公司完成 name-of-the-feature分公司开发了新功能 发布在release-**分支中 到目前为止,该系列的每个应用程序的代码都是相同的。假设他们共享的基础已经完成,从现在开始,每个应用程序的代码都会有所不同。 我不确定应该如何处理git以及具有相同基础的多个应用程序。 他们每个人都应该有自己的git项目吗? 他们应该在同一个项目中,但每个人都在自己的分支中吗? 关键是:如果我将它们放在单独的项目中,则在应用程序的基础上进行的每个修改都必须在每个应用程序中重复进行。我对git不太熟悉,但是如果我将每个项目存储在一个分支中,是否可以将基础修改与每个应用程序合并? 有没有人遇到过这样的情况?我不确定如何进行。 谢谢! 编辑 当我说版本时,我并不是说像版本号。它们实际上是具有相同基础的不同应用程序。
12 git 


5
索引数据库
我对数据库不是很熟悉,现在我正在尝试了解索引机制。 据我所知,在RDBMS中,对列进行索引可以使按该列进行搜索的速度更快。对于三元组存储库也是如此,只有那里的索引假定您(例如)主要按主题搜索,然后按对象搜索,依此类推。 我不确定RDBMS,但是在三重存储中,您可以定义多个索引,让存储为每个查询选择最佳索引(希望我理解正确)。自然地,出现以下问题: 为什么我不应该将所有可能的索引添加到三元组存储中,并扩展到RDBMS,为什么不在每列上都建立索引(假设我不太懒惰)?
12 database 

6
允许客户参与项目的最佳方法是什么?
我们一直在为客户建立CRM。既然第一个主要阶段已经完成,并且第二个阶段已经达成共识,那么客户希望承担一些工作,在我们构建第二个阶段的同时,对数据库模式和业务流程进行较小的修改。 我不确定这是否完全可行,但是假设是这样,我想指出一些指针,可以针对这些指标采取措施以使其完全可行。到目前为止,这是我得到的: 到目前为止,客户大多从用户的角度看项目。显然,应该分两部分进行讨论,向我们介绍内部工作原理: 首先,显示现有的数据库架构,并通过示例的方式对其进行扩展, 然后,显示一些示例代码,并为架构增强编写新的业务流程。 该代码当前位于内部Subversion存储库中。虽然我们可以在他的网络上建立一个或多个公共网络(我们可以通过VPN连接到它),但我觉得分布式系统会更好。但是,我似乎是唯一这样的人,因此我可以使用一些令人信服的论点。 我不确定如何授权/确保在生产环境中运行的代码已提交。好像“灾难发生之前,x进行了关键的,无记录的更改;现在y正在试图弄清楚此错误自此以来一直在发生”灾难是不可避免的。理想情况下,在部署之前,所有更改将: 在问题跟踪系统中记录下来, 首先在单独的测试环境中进行,并且 必须通过自动化测试。 las,我怀疑其中任何一种纪律都会盛行。 假定插件体系结构或单独的项目不是可行的选择,因为1)前者不存在,并且2)后者将禁止客户查看并可能修改现有代码,我相信他会坚持。

4
是否抛出异常泄漏了抽象?
我有一个接口方法,在文档中指出它将抛出特定类型的异常。该方法的实现使用引发异常的东西。捕获内部异常,并抛出接口协定声明的异常。这是一个可以更好解释的代码示例。它是用PHP编写的,但是遵循起来非常简单。 // in the interface /** * @return This method returns a doohickey to use when you need to foo * @throws DoohickeyDisasterException */ public function getThatDoohickey(); // in the implementation public function getThatDoohickey() { try { $SomethingInTheClass->doSomethingThatThrowsAnException(); } catch (Exception $Exc) { throw new DoohickeyDisasterException('Message about doohickey failure'); } …

3
使用MVC时处理PHP中的错误
我最近一直在使用Codeigniter,但令我不安的是处理错误并将错误显示给用户。我从来没有擅长处理错误,而不会变得凌乱。我主要关心的是何时将错误返回给用户。 使用异常和抛出/捕获异常,而不是从函数返回0或1,然后使用if / else处理错误,是一种好习惯吗?因此,使得更容易通知用户该问题。 我倾向于避开例外。几年前,我在大学的Java导师告诉我:“不应在生产代码中使用异常,它应该更多地用于调试”。我感到他在撒谎。 但是,举例来说,我有将用户添加到数据库中的代码。在此过程中,可能有不止一件事情出错,例如数据库问题,重复条目,服务器问题等。注册期间发生问题时,用户需要了解它。 记住我正在使用MVC框架,是处理PHP错误的最佳方法是什么。

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.