软件工程

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

5
如何在Windows上开发并在Linux上测试和运行?
我是公司内部某些内部软件(用python编写)的两个开发人员之一。软件是一种服务器应用程序,旨在在专用的Linux机器上运行。当前,我们有一个盒子存放着我们的SVN信息库,该盒子也用于测试。问题是我正在Windows上使用Eclipse在工作站上开发它,而该应用程序无法在Windows上运行。 如何正确地组织这样的环境,以使您不会浪费宝贵的时间来转移项目和代码,以便您进行测试? 目前,我正在执行svn checkout,更改一些代码,然后将其上传到开发服务器进行测试(而不是通过svn)。在服务器上对其进行测试,进行更改,然后再次对其进行测试,等等。不断的上传和测试使我发疯。我试图将项目保留在服务器上(检出到主目录),但这会导致Eclipse出现很多问题。 显然,我在这方面没有很多经验,所以我想问一下有关此类问题的最佳实践是什么?

3
类与结构
在C ++和其他受影响的语言中,有一个称为Structure(struct)的构造,另一个称为class。两者都能够容纳函数和变量。一些区别是: 类在堆中struct被分配了内存,在堆栈中被分配了内存(注意:这对于C ++是错误的,但是在OP所谓的“受影响的语言”中可能是正确的) 默认情况下,类变量是私有的,而struct它们是公共的 我的问题是:是否以struct某种方式放弃了上课?如果是这样,为什么?除了上述差异之外,a struct可以完成类所具有的所有相同功能。那么为什么要放弃呢?

6
我为什么要在Try-Catch中编写所有语句?
我的公司负责人说,我必须在Try-catch语句中编写all,即我的所有代码。现在,我可以在这里理解“安全胜于遗憾”的方法了,但是,当创建标签,设置表格位置时,认为会有例外是不是太胆小。在这样的简单操作中,有时会出现异常。

2
主持人离开后,在线游戏如何继续?
注意:这是有关网络而不是游戏的问题。我仅以星际争霸为例。 游戏《星际争霸》(不是《星际争霸2》)支持在线游戏。一个人主持,其他人参加。如果主机在游戏过程中离开,则游戏可以在没有主机的情况下无限期继续。这是如何运作的? 请考虑以下情形: 我将3托管为3。请注意,为了使人们能够加入,我的路由器必须配置为转发6112,TCP和UDP端口(请参阅Blizzard支持)。 五个人参加。每个人(包括我本人)都在路由器后面。我开始游戏。 比赛开始三分钟后,大约有二十位狂热者涌入我的基地。没有人帮助我。 我的阵营被淘汰,所以我离开了(游戏没有给您选择)。 比赛在没有东道主的情况下继续进行(主队剩下两名球员)。 其余五个客户端(不需要转发6112)如何保持连接? 如果我理解正确:如果两个程序要互相通信,则其中一个必须是“服务器”并侦听端口上的连接,而另一个则必须是“客户端”并在该端口上发起连接请求港口。他们不能简单地开始向对方发送数据包(如果两个都在路由器后面,我什至不知道他们会怎么做)。 主持游戏的人是服务器,而加入游戏的人是客户端。很容易看到客户端如何开始与服务器通信。我不明白的是:客户端如何不通过服务器就开始彼此通信?Internet协议是否允许服务器启动客户端之间的连接? 就星际争霸而言,游戏流量完全可能通过Battle.net服务器。在游戏过程中,星际争霸确实维持与Battle.net的连接(用于来自朋友等的消息)。但是,我怀疑游戏流量会通过它,因为如果这样做了,为什么主机需要移植6112? 我的问题是:连接有多个客户端的服务器是否可以启动它们之间的连接?
12 networking 

7
软件质量的客观指标[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 在软件产品中可以测量各种类型的质量,例如,目的(例如最终用途)的适用性,可维护性,效率。其中一些在某种程度上是主观的或特定于领域的(例如,良好的GUI设计原则可能因文化而异,或取决于使用情况,请考虑军事还是消费者使用)。 我感兴趣的是与类型的网络(或图形)及其相互关联性的更深层次的质量形式,也就是说,每种类型所指的是什么类型,是否存在与适当类型有关的清晰可识别的互连性集群。分层体系结构,或者相反,存在大量的类型引用“整体”(“整体”代码)。同样,每种类型和/或方法的大小(例如,以Java字节代码或.Net IL的数量来衡量)也应表明某些大型复杂算法已实现为单片代码块,而不是分解为更易于管理/维护的位置。大块。 基于这种思想的分析可能能够计算至少是质量代理的度量。我怀疑高质量和低质量之间的确切阈值/决策点是主观的,例如,由于可维护性是指人类程序员的可维护性,因此功能分解必须与人的思维方式兼容。因此,我想知道是否存在一个数学上纯净的软件质量定义,可以在所有可能的情况下超越所有可能的软件。 我还想知道这是否是一个危险的想法,即如果客观的质量代理变得流行,那么业务压力将导致开发人员以牺牲整体质量(质量的那些方面未由代理衡量)为代价来追求这些指标。 关于质量的另一种思考方法是从熵的角度。熵是系统从有序状态转变为无序状态的趋势。任何曾经在现实世界中,中型到大型软件项目中工作过的人都将欣赏代码库质量趋于随时间下降的程度。业务压力通常会导致针对新功能的更改(除非质量本身是主要卖点,例如在航空电子软件中),否则质量会因回归问题和“擦鞋”功能而变得不那么适合质量和维护的角度。那么,我们可以衡量软件的熵吗?如果是这样,怎么办?

4
是否有仅用于开放源代码网站的JavaScript代码?
改写的问题: 我不是在问与JavaScript相关的问题,而是在网络上使用的所有“客户端”语言(HTML5,JavaScript,CSS等)。如果我在我的网站上放置了JavaScript代码(即经过GPL处理),并且可以通过网络从任何人访问该网站,我是否在某种程度上违反了GPL? 如果我想将客户代码(HTML,CSS,JavaScript)卖给某人,会怎样?在这种情况下,我需要其他许可证吗? JavaScript(用于网站时)不是总是开源的吗?当您打开网页时,您始终可以阅读源代码。 如果我要出售包含JavaScript GPL代码的网站,是否还需要发布服务器端代码? 如果可以部分访问此网站(一部分是免费的,另一部分需要您付费),但是在网站的两侧都使用GPLed代码(同一部分),会发生什么情况? 如果GPLed代码仅出现在需要您付费才能访问的网站的一部分中,该怎么办? 如果我以这种方式将网站出售给客户: 我要卖给您(一次性费用)所有与客户相关的代码(JavaScript,HTML和CSS) 我不是在向您出售服务器端代码,而是在向您出租(我不想让您重用我的服务器端代码) 如果使用JavaScript GPLed代码,是否违反了某些规定?(该网站可通过网络上的任何人访问。) 编辑2: 添加了一个新的特定问题: 如果网站可以在没有服务器端代码的情况下运行,那是什么意思,JavaScript只是在调用一些包含JSON格式数据的PHP页面。其他人可以与客户端一起建立网站,但是他们需要提供数据。在这种情况下,我认为JavaScript正在调用“ PHP”代码(但并非相反)。在这种情况下,我是否违反GPL?

12
为什么C ++经常是大学教授的第一门语言?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我的学校从C ++编程课程开始计算机科学课程,这意味着这是许多学生学习的第一门语言。 我已经看到很多人不喜欢C ++,并且我已经读过各种原因。C ++并不是一种很好的语言,这似乎几乎是一种流行的观点。根据StackExchange上的一些问题以及类似以下的帖子,我得到的印象是不太喜欢它: http : //damienkatz.net/2004/08/why-c-sucks.html http://blogs.kde.org/ node / 2298 http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/ 等。 (注意:我不认为C ++是一种不好的语言。实际上,它是我使用的主要语言。但是,互联网以及一些教授给我的印象是,它不是一种非常受欢迎的语言。实际上,我的一位教授不断使用C ++,但它仍然是我大学的入门语言!) 考虑到这一点,为什么这是许多学校教授的第一门语言?用C ++开始编程课程的原因是什么? 注意:这个问题类似于“ C ++是否适合作为第一语言”,但是有一点不同,因为我对是否合适并不感兴趣,但是为什么选择它。
12 c++ 

7
私有云是什么意思?
我通读了SE中有关云计算的一些讨论。从他们那里,我将云理解为“另一个实体拥有的计算/数据存储设施;使用硬件和软件体系结构使其可以轻松按需扩展,因此支持可租用的可扩展性模型。” 同样,“拥有实体拥有一个大型数据中心,其中虚拟化概念被用来迎合来自同一硬件的多个不同客户”。加上“冗余,安全性等假定由提供者来照顾。” 我在SE上阅读了有关向祖母解释云计算的讨论。“花园与超市”,“自家与酒店”的例子非常合适。 基于这种理解,我无法形象化“私有云”。坦白说,“私有云”听起来对我来说是一种矛盾。(与“私人超市”,“自有酒店”等有关)。原谅我的无知。 那么,什么是“私有云”?

10
使逻辑从完全菜鸟级过渡到开发人员?
几年来,我的编程工作非常轻松,并且没有取得太大进展。这绝对是我的兴趣所在,但我只是没有动力。然后,我想我知道是什么在杀了我。我读过的所有书,看过的所有屏幕录像似乎都错过了一件重要的事情: 如何从打印语句,变量等过渡到做更复杂的事情? 例如,让我们来看一个类似于Posterous的网站。对于那些不知道的人,这是一个博客平台,可以通过电子邮件接收博客文章。博客的作者有一个特殊的@ posterous.com电子邮件,他们将博客文章发送到该电子邮件,并且会自动对其进行格式设置和发布。 开发人员将如何使用他们的函数和语句工具箱在后端完成类似的任务? 很抱歉,这个问题似乎真的很广泛,只是让我感到沮丧。我感觉自己对基本概念有相当的了解,但不知道如何实际执行任何操作。

8
面向对象的类设计
我想知道好的面向对象的类设计。特别是,我很难在以下两个选项之间做出选择: 静态与实例方法 没有参数或返回值的方法 vs 有参数和返回值的方法 重叠与独特的方法功能 私人与公共方法 范例1: 此实现使用实例方法,没有返回值或参数,没有重叠的功能,并且所有方法都是公共的 XmlReader reader = new XmlReader(url); reader.openUrl(); reader.readXml(); Document result = reader.getDocument(); 范例2: 此实现使用静态方法,返回值和参数,功能重叠和私有方法 Document result = XmlReader.readXml(url); 在示例一中,所有方法都是公共实例,这使得它们易于进行单元测试。尽管所有方法都不同,但readXml()依赖于openUrl(),因为必须首先调用openUrl()。所有数据都在实例字段中声明,因此,除了构造函数和访问器之外,任何方法都没有返回值或参数。 在示例二中,只有一种方法是公共的,其余的是私有静态的,这使得它们很难进行单元测试。方法是重叠的,因为readXml()调用openUrl()。没有字段,所有数据均作为方法中的参数传递,并且结果立即返回。 我应该遵循什么原则来进行正确的面向对象编程?

4
如何管理开源项目的文档?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我是一个成长中的开源项目的创建者。目前,我正试图找出管理文档的最佳方法而感到沮丧。这是我考虑过的选项: HTML网站 Github Wiki Github上托管的Markdown文件 将所有文档放在Github中README.md 该文档已经用Markdown编写,我只是想不出如何使它可用。我真的很喜欢Git,因为我可以分支和标记文档,就像可以分支和标记源代码一样。 我可以使用Markdown库将Markdown转换为HTML并将其显示在样式化的网站上。每当发生更改时,我都需要将更改上传到网站,并且很难管理文档的所有不同“标签”。 Github Wiki(据我所知)不会根据您所在的分支进行更改。因此,在任何给定时间,我只能以Github Wiki形式获得文档的“主”版本。 将所有内容放到Github自述文件中非常简洁。我可以进行分支和标记,但是使用起来有点累,而且不便于导航。 我是否缺少一些很棒的解决方案?我还有什么其他选择?

9
继承出错
我有一些代码,其中一个好的继承模型已经走下坡路,我试图理解为什么以及如何修复它。基本上,假设您有一个Zoo层次结构,其中: class Animal class Parrot : Animal class Elephant : Animal class Cow : Animal 等等 您有自己的eat(),run()等方法,一切都很好。有一天,有人来说-我们的CageBuilder类工作得很好,并使用了animal.weight()和animal.height(),但新的非洲野牛实在太强了,可以打碎墙壁,所以我要补充一下Animal类的另一个属性是isAfricanBizon(),并在选择材质时使用该属性,并且仅对AfricanBizon类覆盖它。下一个人来做类似的事情,下一件事您知道您具有所有特定于基类中层次结构子集的属性。 改善/重构此类代码的好方法是什么?这里的一种替代方法是只使用dynamic_casts来检查类型,但是这会使调用者混乱,并在整个位置添加一堆if-then-else。您可以在此处具有更多特定的接口,但是如果您仅有的话,那么基类引用也无济于事。还有其他建议吗?例子? 谢谢!

11
如何保存一个年轻而垂死的项目?
我匿名发布此信息,因为我不想陷入潜在的麻烦。 我有一个大问题。 我最近加入了一个不到一年的团队。我从一个月开始从事此项目。公司结构如下: 所有者(非技术人员) 项目经理(非技术) 首席开发人员(技术,但不擅长) 这个项目是一个使用ASP.Net的网站,首席开发人员为此设计了一个糟糕的体系结构。您将不得不信誓旦旦,但是基本上,构建网页的要求方式是在Debug模式下通过VPN在单个网页上给我们3分钟以上的加载时间。 螺旋式发展到其他同事都同意他们花更多的时间等待页面加载而不是实际开发。 现在最大的问题是这个。项目经理不了解技术并接受它。他特别指出,他相信首席开发人员会在应用程序体系结构上做出正确的选择。 团队中没有人知道所有者的意见,但是每个人都害怕在这种经济中动荡(尤其是我自己)。 你会怎么做?

5
是什么推动或不采用新的编程语言?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我真的很想关注为什么主流采用了一些新的编程语言,而另一些则仍然相对利基。我想了解诸如特定用例,向后兼容性或某些新功能,简单或复杂的实现难度之类的事情。具体示例将不胜感激,但让我们不要在这里陷入“主流”或“利基”的确切定义。


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.