软件工程

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

1
绘图线程交互
我想以UML(类似)表示法绘制(笔和铅笔)线程交互。我并不坚持使用UML,任何对读者来说显而易见的事情都应该做。 我从顺序图开始,但我不认为这是实现此目的的最佳方法。一直以来,屏幕外都会有“行动发起人”,这有点违反了SSD的想法。我继承了一个中等大小的代码库,每个线程都有一个状态机,大约有9-10个线程,我试图弄清楚它是如何工作的。 我应该如何可视化线程交互?

4
分页会减轻服务器负载吗?(理论)
我想知道分页背后的原因是什么?是否使用它是因为它从技术上限制了每页返回的行数,从而减轻了服务器的负担? 我想做一些没有分页的事情,但是鉴于我是新手(我是业余爱好者),开始怀疑它在技术上是否可行。
11 php  pagination 

3
微型与单片服务器架构
我们当前正在开发我们的新产品/项目,它是针对某些特定工业/服务企业的客户端-服务器应用程序。我们正在构建一个服务器(仅C语言和Linux),该服务器在带有Java前端的TCP之上运行自定义协议。我们大约有20%的人员从事编码工作,并且面临着必须在微型或单核内核体系结构之间进行选择的情况。 我知道Micro vs. Monolithic通常与内核体系结构有关,但是我们专门讨论服务器。 为什么要使用自定义服务器而不是现有服务器? 我们的UI需求非常重要且非常动态,因此基于Web / Web浏览器的解决方案不合适。 统计处理在客户端非常重要,因此,浏览器也无济于事。(当然,我们可以在服务器端进行处理,然后将处理后的数据传递给客户端,但这将意味着服务器上的大量负载和客户端资源的浪费)。 此外,利用至少三种技术(JS / HTML / CSS)来管理单个事件,就可以像在沙漠风暴中扫除房屋一样获得整个体验-您扫除n次,灰尘积聚n + 1次。 微型和整体服务器呢?你在说什么? 考虑以下(假设的)客户端请求: request-id: 123 request-service: HistoricDataSets request-message: Fetch all records upto the year 2010 收到此类请求后,服务器通常会这样做(为简单起见,我们忽略了诸如线程和派生之类的并发技术): 解析请求字符串 确定动作(HistoricDataSets LIMIT Year (2010)在我们的例子中为Fetch ) 与持久层(在我们的示例中为Oracle)交互并获取数据。 根据协议格式化数据。例如: response-id:123 成功:true 响应文本:DataSets 用这样格式化的数据响应客户端。 这就是我们所说的单片服务器(类似于单片内核,其中所有OS工作都在内核空间中完成)。 再次考虑到相同的请求,这一次是服务器(我们为简单起见,我们仅假设共享内存为IPC): 将请求放入Parser进程的共享内存 在Parser解析字符串,确定任务和指示Executioner执行任务的过程。 在Executioner然后将数据传递到Fomatter方法,该方法中,数据格式化为一个协议串后,返回到服务器。 服务器将其分派给客户端(响应)。 当然,相反的Parser,Executioner而且Formatter它可能是一个单一的,而是独立的进程。这就是我们所说的微型服务器(类似于微型内核,几乎不需要做任何事情)。服务器实际上只是在侦听和响应,而所有步骤都由不同的进程来处理。 …

2
利用“空闲时间”开发创造力
一些公司惊奇地发现,程序员是非常有创造力的人。例如,我想到的是Google和Atlassian,他们允许定期(我相信每月)的“自由日”,使程序员可以按自己的意愿进行工作(获得批准),而公司则可以从中获得回报。 引用的示例包括新产品,以前没有人希望修复的错误修复,新团队的形成等。另一个结果(也许是最初的目标)是,在业余时间之间的剩余日子里,程序员有更多的动力。 该理论是否还有更多的支持,那就是允许“受控的”创造性输出有益于激励和士气,或者是使用该方法获得成功的更多示例?


8
“真实性”是合法的编程术语吗?
因此,有很多问题使用“真实性”一词来表示表达式的真值,无论其原始类型如何,当将其评估为布尔值时。在动态语言中非常有用。 所以我的问题是,这是一个真实的术语吗?如果这样的话,我们是否在斯蒂芬·科尔伯特(Stephen Colbert)流行之前使用它?还是我们后来才采用它?在这种情况下,我上面给出的定义的正确术语是什么?

5
Web应用程序启动时间真的那么重要吗?
与某人进行了一次对话,讨论在应用程序启动时添加一些初始化代码,他抱怨说这会导致启动时间增加。他不能说出一个真正的原因(不知道是什么感觉)。这不是一个使用率很高的应用程序,大约需要一分钟左右的时间才能开始,我们每年都会部署几次。 我记得很早以前就读过有关此类问题的建议,人们建议在启动时进行初始化,而不要在带有“如果您能负担得起罚款”字样的页面访问上进行初始化。 我使用的网络应用程序的使用时间从30秒到4-5分钟不等,但是一旦上网,它们就会摇摇欲坠。 那我想念什么呢?除非它是至关重要的应用程序,例如……我不知道……对于金融市场,医疗应用程序,太空探索等,启动时间真的那么重要吗? PS:我严格来说是指Web应用程序,而桌面应用程序注定会迅速启动。

5
计算复杂性的概念对软件开发人员重要吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我给人的印象是,时间和记忆的复杂性是compsci课程的毕业生必不可少的,但是在学习工程学后,我不知道是否是这种情况。最近,我很惊讶地采访了一些甚至不知道这个概念的当地大学的毕业生。我想我的问题是: 计算复杂性的概念对软件开发人员重要吗?并且应该在本科课程中教授吗?

3
JavaScript和Web编程的范式转变
如果我没记错的话,曾经有一段时间人们不赞成使用JavaScript进行Web开发,因为除其他因素外,这是用户的隐私和安全问题,有些人对此一无所知。 如今,您几乎看不到不使用JavaScript的主要网站,并且如果没有JS,许多网站将完全无法正常工作,因此请不要随意降级。要么如此,要么可用性会受到严重影响,例如在SE网站上。 从那时到现在,发生了什么变化,从而使JavaScript在Web开发中几乎无处不在?还是我断言JS对我的想象力fig之以鼻,而且一直都是这样?

6
您需要什么才能成功实现敏捷?
在某些组织中,采用敏捷可能会失败,我什至在一家公司(瀑布式)是唯一(真正)方法的工作,但这仅仅是因为他们在项目上尝试了敏捷并失败了。 当我问那些仍然记得(我还是大三)的人时,我很难过,就像我提醒他们一场噩梦一样,这确实发生了。 我不知道为什么项目失败了。网上可以找到一些资源,为什么有些公司会导致Agile失败,但原因主要是经济上的。所以我想在此先提出一些反馈。 在某些组织中,敏捷采用失败的原因是什么?或者,另一种表达方式。.要使敏捷成功,您需要做什么?

6
什么是“优雅降级”?
我对这个术语“优美的降级”听到很多。 例如 , "An application server should gracefully degrage when it is under heavy load " "Graceful degradation of user interfaces.... " 这个词对我来说似乎是抽象的东西。有什么具体例子说明什么?

2
我如何以及在哪里发布我的开放标准?
我一直在为我正在开发的协议编写开放标准。至于写作方面的问题,我可以控制。但是主要问题是我可以在哪里发布此类文档。我一直在互联网上搜索,但是找不到可以上传TXT或PDF文件的网站。我无意保守秘密,我希望人们阅读此书,并在可能的情况下使协议更好。
11 standards 

4
企业网络中的虚拟化开发环境
我们正在尝试为企业组织中的一个由4名开发人员组成的小型团队使用虚拟化实现开发环境。这将使我们能够设置单独的开发,测试和登台环境-并允许访问作为我们正在评估的系统或工具的要求的新操作系统。我们重新调整了现有工作站级计算机的用途,并添加了24GB RAM和RAID-10,并且在尝试将计算机添加到域之前一直运行良好。 现在,我们开始了一场战争,所有企业开发人员自开始以来就必须进行斗争-争夺对开发和测试环境的本地控制权。网络和IT管理员提出的担忧范围从“ ESX Server是企业标准”到“客户端VLAN上不允许服务器”到“ [本地填充]不是当前本地拥有的技能”或企业IT组织”。 如果需要的话,我们可以证明生产级的硬件和正式的IT支持是合理的,但这将需要时间,并且会带来很多麻烦。即使那样,将其视为生产系统也可能要花费数月的时间才能正式分配IT资源-即使我们这样做,也很可能会失去我们所需的本地控制权。 我想你们中的许多人在开发人员对非生产环境(尤其是虚拟化)的控制方面也有类似的挣扎,所以我的问题如下: 哪些策略和论点帮助您赢得了基础架构(IT和网络)人员的欢迎,从而使这些筒仓能够存在于具有标准网络和安全政策的企业中,而这些企业通常(并且可以理解)会排除此类非筒仓。集中管理的基础架构? 您是否发现这是技术上的合理性问题,还是更多的争取控制权和所有权的政治斗争? 如果最终得到了一个IT管理的开发环境,那么日常开发和测试遇到了多少障碍? 有没有人最终将他们的开发环境转移到断开连接的VLAN或完全独立的网络上,从而避免了这些网络访问的麻烦? 另外,这不是Hyper-V与ESX的圣战(我们都可以这样做-但选择Hyper-V是因为MSDN为此目的是“免费的” [是的,VMWare也有免费的工具-但是好的管理工具通常不是],并且本地开发人员可以在“ Microsoft Shop”中更轻松地进行管理)-因此,支持或反对的论点不在此问题的范围内。 虚拟化与物理硬件相比,这也更少了-我想在没有虚拟化组件的情况下也会问同样的问题。 还要假设开发团队已经保证要管理补丁程序管理和防病毒,或者与现有企业系统集成(如果他们支持的话)。带有不同问题的这种情况也已发布在SF上,以期引起对立的观点。

10
哪种编程方法最适合我们?
不幸的是,有人教会了我们的高层管理人员“敏捷”这个词,现在他们希望我们朝着它迈进。我对敏捷有一定的了解(原则上),但从未在实践中使用过。据我所知,这将不适合我们的组织。眼下,事情还很繁琐。这是这样的; 我们是一个非常小的团队-两名开发人员,一名DBA,一名设计师。我工作的公司赚的钱相对于公司规模来说不成比例,其中近95%是纯在线销售。 从开发的角度来看,我们在通常的一天中会遭受很多桌面入侵(我们既是技术支持人员又是开发人员),如果销售团队成员向某人承诺某件事,工作可能会突然间突然消失。我们也承接大型项目,而它们却是不断间断的噩梦。我们中有些人开始把头发扯下来!项目计划是由非技术经理在excel电子表格中制​​定的,他们在其中尝试将任务分解为一口大小的句子,他们可以理解这些句子,并在每个句子旁边放置一个日期。这些日期总是可怕地不切实际,常常被错过,而且我们的会议(大约每周举行一次)经常充满尴尬的时刻,人们问“为什么还没有这样做”。 我很确定敏捷不是我们的理想选择。现在,考虑到(并且我已经尝试过)这家公司不会改变其方式,只有开发团队愿意改变,是否有一种我们可以采用的开发方法,该方法很适合节省一些理智?

2
事件冒泡通常如何工作,它是事件传播的同义词吗?
我试图围绕事件驱动的(子)系统中事件分配的一般工作原理和原则进行研究。 尽管我曾在很多场合使用过它,例如Javascript,Flash(动作脚本2和3),甚至一次都用PHP编写了一个简单的事件分配系统,但我从未真正理解过事件冒泡和/或很好地传播。 第一个问题: 事件冒泡是事件传播的同义词吗? 第二个问题: 我理解的是,当事件“冒泡”时,这意味着它在对象的层次结构中“移动”了吗? 第三个也是最重要的问题: 如果我对问题2的理解是正确的;通常如何“向上移动”对象的层次结构? 它通常意味着父对象“重新分派”相同的事件,以它的母公司(直到它到达根对象)?如果是这样; 层次结构中的所有这些对象是否需要听这些事件的子对象,还是我对事件冒泡的理解缺少重要的原则,而无需让父对象将自身注册为子对象事件的侦听器? 如果您可以通过一些简单的伪代码来说明这些基本原理,我将不胜感激。

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.