软件工程

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

3
为什么.NET模块将模块文件名与名称空间分开?
在Scheme编程语言(R6RS标准)的实现中,我可以如下导入模块: (import (abc def xyz)) 系统将尝试寻找一个文件$DIR/abc/def/xyz.sls,该文件$DIR是您保存Scheme模块的某个目录。xyz.sls是模块的源代码,如有必要,它可以即时进行编译。 在这方面,Ruby,Python和Perl模块系统相似。 另一方面,C#涉及更多。 首先,您必须根据每个项目引用dll文件。您必须明确引用每个。这比说要复杂得多,将dll文件拖放到目录中,然后让C#按名称进行选择。 其次,dll文件名与dll提供的名称空间之间没有一一对应的命名关系。我可以体会这种灵活性,但是它也可以一发不可收拾。 为了具体化,如果我说这话using abc.def.xyz;,C#会尝试abc/def/xyz.dll在C#知道要查找的某个目录中找到一个文件(可以根据每个项目进行配置),那就太好了。 我发现处理模块的Ruby,Python,Perl,Scheme方法更加优雅。新兴语言似乎倾向于更简单的设计。 为什么.NET / C#世界以额外的间接级别以这种方式执行操作?

7
专业软件开发团队如何处理非平凡项目中的设计复杂性?
首先,我意识到这个问题可能会有些冗长和含糊,为此我深表歉意。对于任何“了解它”的人来说,这可能是一个简短的基本问题,但由于我发现自己在这方面缺乏经验,因此请在描述问题时请多多包涵。 从我11岁左右开始,我就一直以这种方式进行编程。这意味着我从一开始就一直在教自己。我接受了技术教育,但并非严格地学习计算机科学(我获得了光子工程学学位)。我们当然有编程课程,但这对我来说基本上是基本的东西,我没有学到很多新东西。我一直在为自己的快乐而进行自我教育,并且一直知道自己会从事编程事业,但是那时我的所有项目都还很小。我毫不费力地将它们牢记在心并加以维护。 现在,我发现自己是团队的领导者,而不是公司环境的领导者-我在大学工作,开发用于工程应用的科学软件(C ++)。突然间,这个项目正在(相对)变大,而且我大部分时间都无法解决这个问题。我主要在两件事上浪费了很多时间和精力: 当我不得不返回一段时间未使用的代码时,我很难记住它是如何工作的。我花了很多时间来查看相关类的头文件,并阅读在源文件中放置的注释。我希望我可以瞥见某种形式的“示意图”并更轻松地重获图片。 当我引入更改时,有时我会中途意识到,我试图做的事情会破坏其他地方的功能(或更糟糕的是,它只会在运行时显示出来,这是一个惊喜)。我还原并开始以不同的方式进行操作,结果发现我忽略了对其他组件的影响。我希望有一些“架构图”,在其中可以看到事情的完成方式,我要尝试做的事情将如何影响其他组件,以及为我提供一种在开始实施更改之前进行详细规划的方法。 与我一起工作的大多数人都有与我自己相似的故事-较强的技术导向,有时甚至是高超的技巧,但无法组织工作。但是,他们的项目通常比我的项目小得多,所以他们可以应付。无论如何,这对我来说意味着我一个人,没有人可以学习良好的做法。 我修了一个管理IT的研究生课程,尽管我觉得它很令人满意,但它主要针对非程序员,有关项目管理方法论,预算/进度估计,企业体系结构的教学,而不是软件设计和规划。没关系,我也在尝试学习这些东西。当然,引入了一些工具(例如UML)和软件开发过程的类型(级联,迭代,敏捷...),但是显然没有详细介绍,我很难决定我应该选择和使用的东西(以及达到什么程度)。 我一直在阅读有关SO上软件设计的许多问题和答案-有很多关于使用这种工具或特定工具或方法进行设计的问题,并且如果我确信UML文档可以解决我的问题-我会选择并开始使用它。但是有些人发誓,其他人则说它没用。我正在寻找更高层次的抽象的答案-有解决我所遇到的两个问题的方法吗,您个人怎么做?我应该学会什么才能做到这一点,而不必局限于某个特定工具?这些有时会变得过时,我希望它们的适用性会因项目类型而异。 非常感谢您的阅读,我无法简要地说出我的意思(缺乏软件设计经验和词汇)。

2
这种尴尬的间距是某种风格吗?
在阅读另一位程序员的代码时,他使用了我从未见过的格式。例如 namespace MyNs.HereWeAre {//tab here for some reason public class SomeClass {//here's another tab public string Method() {//yet another tab string _variable = "";//no tab implementation return _variable; } }//eof - class (Yes these eof comments are on every file) }//eof - namespace // eof - file 我承认...此代码使我生气。很难实现这种风格。需要与IDE(Visual Studio)提供的默认格式作斗争。 如果我知道这种药理有充分的理由,我可以更容易地吞下这种药。这种风格是否源于其他编程语言/ …

3
文学编程与语义网之间有什么联系?
当我偶然发现这个宝石时,我(通常)在研究基于语义/本体的技术文档方法: 文字编程和语义网是来自不同时期的思想,它们之间确实存在联系。 链接的论文Norman Walsh 撰写的XML Literate Programming in XML讨论了语义Web的核心技术,但是我看不到识字编程与基于语义Web 或基于本体的文档之间的概念联系。帮帮我?

3
如何在重量级开发方法上获得个人实践?
我正在从事一项新工作,该项目需要满足严格的质量标准,大量记录,详细管理,UML图表以及所有与“牛仔编码”相反的事情,在这些工作中,我过去的大部分工作经历都是。想想大型航空航天或医疗设备软件的开发方式。 我很高兴离开牛仔编码的混乱局面,并很想知道重量级工程方法的发展情况。但是,一个人如何可以很快地从繁重的方法中获得经验呢? 就是说,除了简单地工作了几个月/几年。 仅使用一种语言或新的API,就可以破解玩具测试程序,阅读,故意犯错误以查看会发生什么情况等。练习就像骑自行车或演奏乐器一样,必不可少。拿起长笛每天花半个小时很容易;无需加入乐团或成为专职长笛顾问。但是,如何实践大型,复杂,涉及团队的软件工程活动,而这些活动中的大部分都与沟通和计划有关,如何避免沟通不畅以及超出进度和预算限制? 这似乎不可能独奏。有几种方法可以在短时间内(一天)以小规模模拟一个大型项目的工程?

3
如何记录必然复杂的代码结构?
如果我的一段代码在数学或结构上相当复杂且不可简化,那么我将如何记录这段代码?特别是,如何确保可能没有我本人的数学或建筑技能的人可以从文档中理解?我也应该记录所有数学吗?链接到教程?在复杂结构的情况下是否进行一些视觉辅助链接?

3
敏捷-尖峰和总体时间表
团队正在开始他们的第一个资本项目-敏捷项目,该项目似乎将与方法学保持一致(即,我们可能只是拿起一本敏捷书,并像食谱一样遵循它),但会有些混乱: 该项目涉及团队中没有人经验的三件事:与Foo Payroll System集成,能够处理XYZ89文件类型(其中“ XYZ89” =您从未听说过的某些文件类型),并进行转换其他文件,以便可以由Frobnobdicator处理。 据我了解,标准的敏捷实践是为每个事件安排峰值时间,然后我们可以确定它们将需要多长时间(我不确定客户是否有很大的机会会决定不这样做它们,因为它们是项目的基本要求) 所以我的问题是: 我们是否在第一次迭代中预先进行了所有峰值处理,以更好地估计执行峰值处理和/或使“行走骨骼”开始运行所需的时间? 如果不是这样,总项目进度表是否会受这些尖峰之一的支配,而返回的数据表明这个特定故事所花费的时间比我们制定的时间更长? 当多个峰值基本上是项目的不可协商需求时,最佳实践是什么?
9 agile 

7
除了在冲刺之间建立有效的组合之外,敏捷实践是否还有其他优势?
最近,我对软件开发中的敏捷实践产生了兴趣,从那以后,我已经看到很多文章指出,这些实践可以降低总体成本。 其背后的逻辑通常是这样的:如果您的需求发生变化,则可以在下一个sprint待办事项列表中反映此变化,这将导致成本降低,因为设计新功能并在时间上紧密地实现了新功能,因此根据著名的规则,成本降低了,您越晚需要对需求进行更改,满足该需求的成本就越高。 但是中大型软件项目很复杂。需求的突然变化并不意味着您不必接触系统的其他部分即可满足该需求。在很多情况下,将需要对架构进行非常大的修改,这也意味着您将需要重新实现依赖于较旧架构的所有功能。因此,降低成本的要点在这里已经消失了。当然,如果新的需求需要系统的新的独立部分,那不是问题,旧的体系结构只会不断增长,不需要重新考虑和重新实现。 相反。如果您使用的是瀑布,但突然意识到必须引入新的要求,则可以进行更改。如果需要更改现有体系结构,则可以重新设计它。如果它并没有真正引起混乱,而只是引入了系统的新部分,那么您就去做所有的工作,在这里没有问题。 话虽如此,在我看来,敏捷开发的唯一优势是可以在sprint之间完成功能的完整构建,对于很多人和项目来说,这并不关键。此外,敏捷似乎会导致整个软件体系结构不佳,因为某种功能会相互重叠,因此敏捷团队只关心功能的工作原理,而不是功能的工作原理。看起来,当系统随着时间的推移而变得越来越复杂时,敏捷开发实践实际上会增加整个产品架构的混乱度,从而最终导致更高的成本,因为引入变更的难度越来越大,而瀑布式设计则可以使您完善架构在释放任何东西之前。 有人可以指出我在哪里出问题了吗,因为显然很多人在生产环境中使用敏捷,所以我一定在某个地方错了。

1
打包Python程序的良好做法
在个人和专业项目的背景下,我已经使用Python一段时间了。 最近发生在我身上的一件事是,我从未想过部署Python程序的好方法。基本上,因为它主要是一堆脚本,所以我通常只将它们复制到要部署它的机器上,瞧! 但是我相信应该有一些关于如何部署Python项目的良好实践。我听说过Python Eggs,但对它并不熟悉,以了解它是否是一个不错的选择。还是带有一堆Shell脚本来运行核心模块脚本的普通老压缩包? 基本上,我希望能够做一个很好,优雅且自包含的部署,而不仅仅是在这里和那里复制文件,因为它不允许轻易地进行版本跟踪,而且非常混乱。

8
我有一个下午要赞扬.NET相对于VB6的好处……我怎么说?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我的公司是一个只有20人的小型工程公司。此处的所有应用程序编程都是由两个人在VB6中完成的,他们在过去25多年的工作经验中都来自汇编背景并自学VB6。 结果,VB6代码充满了可怕的代码味道,例如成吨的字符串型变量,非常长的函数,数百个公共全局变量(其中某些优先于传递参数和返回值),而不是单个对象类。重构几乎是不可能的,任何更改都需要对代码进行过多挖掘,一旦进行,似乎总是会带来更多漏洞。 我的老板意识到VB6是一项过时的技术,并愿意听取我提出的向.NET进行新开发的请求。我们正在向.NET迈进,但是他认为这是保持与较新Windows OS兼容性的一种方式,而不是一种编写更好的代码的方式。 除了单纯的最新性,我如何最好地解释.NET语言相对于VB6的好处?我能说什么来最好地强调,向.NET迁移是一个很好的举措,但是这也意味着我们当前的编程范例也应该开始改变?当我的老板听到Visual Basic .NET看起来像VB6一样时,我知道他的第一个直觉是将我们旧的代码混乱简单地转换为.NET。 据我所知,它会在一个下午是不可能改变任何人的观念,但我怎么能至少说服我的组装身背老板,事情喜欢强类型的变量,自定义类,以及私人领域是不是一个总的时间浪费和能量?

3
敏捷的初始条件是什么?
首先,我认为由于以下基本原则,敏捷过程可以奏效: 它带来焦点 限制真正带来焦点的噪音 其次,我想知道敏捷流程能否成功需要哪些初始条件?例如我们是否需要: 没有现有的错误 全自动测试过程或至少高度自动化的测试过程 致力于项目的人 更明确定义的新发展 不能使其更快或更稳定的发展 ? 那么,您需要什么来使其成功?是否有其他敏捷实现可以更好地处理没有某些初始条件的情况?
9 agile 

4
付费开源应用
让我困扰的问题是,是否有可能/可行/合理地期望一个开源应用程序在移动市场上畅销? 我是否应该相信我的用户将使用我的应用程序,而不是构建已检出的版本,更重要的是,如果我在OSS许可下提供我的应用程序,该如何应对竞争? 到目前为止,我发现的唯一主题链接是http://blog.zachwaugh.com/post/17554643060/selling-open-source-apps,但是它与Mac OS X应用程序有关。 我应该提一下,我的问题不是针对iOS,Android或其他操作系统,而是关于移动应用程序的一般性。 编辑:我的用户是否是程序员的非常合理的问题已被问到。 我不希望我的大多数用户都对编程非常熟悉。

6
解析文件的最佳方法
我正在尝试寻找一种更好的解决方案,以对其中一些著名的文件格式进行解析,例如:EDIFACT和TRADACOMS。 如果您不熟悉这些标准,请查看Wikipedia的以下示例: 参见以下有关用于回答产品可用性请求的EDIFACT消息的示例:- UNA:+.? ' UNB+IATB:1+6XPPC+LHPPC+940101:0950+1' UNH+1+PAORES:93:1:IA' MSG+1:45' IFT+3+XYZCOMPANY AVAILABILITY' ERC+A7V:1:AMD' IFT+3+NO MORE FLIGHTS' ODI' TVL+240493:1000::1220+FRA+JFK+DL+400+C' PDI++C:3+Y::3+F::1' APD+714C:0:::6++++++6X' TVL+240493:1740::2030+JFK+MIA+DL+081+C' PDI++C:4' APD+EM2:0:130::6+++++++DA' UNT+13+1' UNZ+1+1' UNA段是可选的。如果存在,它将指定将用于解释消息其余部分的特殊字符。UNA后面有六个字符,顺序如下: 组件数据元素分隔符(在此示例中:) 数据元素分隔符(此示例中的+) 十进制通知(此示例中的。) 释放字符(此示例中的?) 保留,必须为空格 段终止符(此示例中的') 如您所见,这只是一些以特殊方式格式化的数据等待解析(非常类似于XML文件)。 现在我的系统是建立在PHP之上的,并且我能够为每个段使用正则表达式创建解析器,但是问题不是每个人都能完美地实现标准。 一些供应商倾向于完全忽略可选的细分市场和领域。其他人可能选择发送比其他人更多的数据。这就是为什么我不得不为段和字段创建验证器以测试文件是否正确。 您可以想象我现在正在遇到的正则表达式的噩梦。另外,每个供应商都需要对正则表达式进行很多修改,我倾向于为每个供应商构建一个解析器。 问题: 1-这是解析文件(使用正则表达式)的最佳实践吗? 2-是否有更好的解析文件的解决方案(也许那里有现成的解决方案)?它能否显示缺少的段或文件已损坏? 3-如果仍然要构建解析器,应该使用哪种设计模式或方法? 笔记: 我读过有关yacc和ANTLR的文章,但不知道它们是否符合我的需求!

6
上交您在公司中开发的作为作业的代码[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 我目前正在与一个伙伴一起经营一家初创公司,我注意到我的一些大学作业可以通过简单地复制一些我们开发的程序中的代码来完成。我会遇到任何法律麻烦吗?还是一般来说这只是一个坏主意(因为现在开始有这种感觉)? 抱歉,如果这是在错误的位置,我不确定是将其放在此处还是在stackoverflow中。
9 legal  ethics 

3
如何以适当的方式监视JVM内存?
我正在考虑如何在生产环境中以繁忙的时间以低开销的方式进行JVM内存监视。 假设我有两个生产中的tomcat应用服务器,并在它们后面设置了负载平衡。如果可以看到jvm内存统计信息,则可以告诉负载平衡停止将请求发送到服务器,这将遇到OOM问题。这有意义吗?Jconsole或VisualVM占用更多性能资源不是我的选择。

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.