软件工程

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

2
处理特征交叉点
我最近目睹了越来越多的问题,这些问题与本文中有关特征交点的解释类似。它的另一个术语是产品线,尽管我倾向于将它们归因于实际上不同的产品,而我通常以可能的产品配置形式遇到这些问题。 这类问题的基本思想很简单:您向产品添加了功能,但是由于其他现有功能的组合,事情变得有些复杂。最终,QA发现了一个罕见的功能组合问题,以前没有人想到过,应该是一个简单的错误修复程序甚至可能变成需要进行重大设计更改的问题。 此特征相交问题的维度令人难以置信。假设当前软件版本具有N功能,并且您添加了一项新功能。让我们通过说每个功能只能打开或关闭来简化事情,那么您已经有2^(N+1)可能要考虑的功能组合。由于缺乏更好的措词/搜索词,我将这些组合的存在称为特征相交问题。(奖励点数包含一个更明确的术语的参考答案。) 现在我要解决的问题是如何在开发过程的每个级别上解决这个复杂性问题。出于明显的成本原因,要想分别解决每个组合问题,直到成为乌托邦式的想法都是不切实际的。毕竟,我们有充分的理由尝试远离指数复杂性算法,但是将开发过程本身变成指数大小的怪物势必会导致彻底失败。 因此,您如何以系统的方式获得最佳结果,而不会花费任何预算,并且以体面,有用和专业上可接受的方式完成。 规范:当您指定一个新功能时,如何确保它与其他所有子功能都能正常使用? 我看到一个人可以结合新功能来系统地检查每个现有功能-但这将隔离其他功能。考虑到某些功能的复杂性,这种孤立的视图通常已经非常复杂,以至于它本身就需要一种结构化的方法,更不用说2^(N-1)由其他功能引起的因素了,而这些功能是一个人们乐意忽略的。 实施:实施功能时-如何确保代码在所有情况下均正确交互/相交。 再次,我想知道纯粹的复杂性。我知道有多种技术可以减少两个相交特征的潜在错误,但是没有任何一种能够以任何合理的方式扩展。不过,我确实认为,在规范制定过程中采取好的策略应该可以在实施过程中解决问题。 验证:在测试要素时-如何处理这个事实,即您只能测试该要素相交空间的一小部分? 很难理解,单独测试一个功能不会保证没有错误的代码,但是当您将其减少到一小部分时2^-N,似乎数百个测试甚至都无法覆盖所有海洋的一滴水。 。更糟糕的是,最有问题的错误是由要素交集引起的,这些错误可能不会导致任何问题-但是,如果您不期望如此强烈的交集,那么如何测试这些错误? 尽管我想听听其他人如何解决这个问题,但我主要对更深入地分析该主题的文学或文章感兴趣。因此,如果您个人遵循某种策略,则在答案中包括相应的来源会很好。

1
字体渲染实际上如何工作?
我意识到,我对计算机中字体的呈现方式基本上一无所知。 据我观察,字体渲染通常是在整个系统中以一致的方式进行的。例如,我在DE控制面板中配置的亚像素字体提示设置会影响出现在窗口边框,浏览器,文本编辑器等中的文本。(我应该观察到某些Java应用程序显示出明显的差异,因此我猜它们正在使用不同的字体呈现机制)。 从上面我得到的是,可能所有需要字体渲染的应用程序都使用某些OS(或DE)范围的库。 另一方面,浏览器通常通过渲染引擎管理自己的渲染,该渲染引擎负责根据特定的流规则定位各种项目(包括文本)。 我不确定这两个事实如何兼容。我认为浏览器将不得不要求操作系统在给定位置绘制字形,但是如何在不事先知道字形需要多少空间的情况下如何管理文本流?是否有单独的调用来确定字形大小,以便浏览器可以像对待字符一样是小盒子然后由OS填充一样来管理流程?(尽管这并不涉及字距调整)。还是操作系统负责绘制整个文本区域,包括文本流?操作系统是否将渲染的字形作为位图返回并将其留给应用程序以在屏幕上绘制?

1
有关隧道的REST API规则
只需在REST API规则手册中阅读以下内容:不得使用GET和POST来传送其他请求方法。 隧道是指对HTTP的任何滥用,它们会掩盖或错误表示消息的意图并破坏协议的透明性。REST API不得通过滥用HTTP的请求方法来折衷其设计,以适应具有有限HTTP词汇量的客户端。始终正确使用本节中的规则指定的HTTP方法。[我的重点] 但是随后,由于只了解和,许多框架使用隧道来通过HTML表单公开REST接口。我最近的示例是一个for flask(由框架的作者提交):http : //flask.pocoo.org/snippets/38/。<form>GETPOSTMethodRewriteMiddleware 在Web框架中没有黑客或附加组件的情况下,有什么方法可以遵守“规则”?
11 api  rest  web-framework  http 

3
编译还是使用预建二进制文件性能?
如果我手动为将要在其上使用的实际计算机编译软件组件的源,那么与是否在其他平台上为许多不同体系结构编译源相比,性能会更好(更快)?我下载了一些不错的结果编译源,我想知道这是否是由于编译而不是下载预先编译的二进制文件而导致的,软件更新通常就是这种情况。

6
实施SRP的实际方法是什么?
人们简单地检查班级是否违反单一责任原则的实用技术是什么? 我知道一个班级应该只有一个改变的理由,但是那句话在某种程度上缺乏真正实现这一改变的实用方法。 我发现的唯一方法是使用句子“……本身应该……”。其中第一个空格是类名称,第二个空格是方法(职责)名称。 但是,有时很难确定责任是否确实违反了SRP。 还有更多检查SRP的方法吗? 注意: 问题不在于SRP意味着什么,而是关于检查和实施SRP的实用方法或一系列步骤。 更新 我添加了一个明显违反SRP的示例类。如果人们可以以此为例来说明他们如何遵循单一责任原则,那将是很好的。 这个例子是从这里开始的。

4
当程序员使用打孔卡时,编程如何工作?
我看到了这一点:学习如何在打孔卡上编程 而且我已经看到了:http : //en.wikipedia.org/wiki/Computer_programming_in_the_punched_card_era 但是他们还有很多不足之处。 谁能向我解释程序员使用打孔卡时如何编程?具体地说,输入计算机系统用于从打孔卡本身获取指令。 我对逆向计算机不太了解,因此您熟悉的任何一种输入系统都可以。也应理解更一般的答案。
11 history 

2
用另一种语言重写GNU GPL v2代码:我可以更改许可证吗?
我用C#重写了Mercurial的某些部分(已获得GNU GPL v2的许可)。自然,我对原始Python代码进行了很多研究,其中一些部分是从Python到C#的直接翻译。 有可能以不同的条款获得“我的代码”的许可,甚至可能成为闭源商业应用程序的一部分吗?如果没有,我可以在LGPL下重新许可“我的代码”,将其开源,然后在我的开源商业应用程序中使用此开源C#库吗?
11 licensing  gpl 

6
评论是否被视为文件形式?
当我为自己编写小型脚本时,我会将代码和注释高度堆积在一起(有时注释比代码更多)。我要说的很多人都说,即使这些脚本是个人的,我也应该记录这些脚本,以便如果我确实出售它们,我将做好准备。但是注释不是文档形式吗? 这不是吗: $foo = "bar"; # this is a comment print $foo; # this prints "bar" 被视为文档,特别是如果开发人员正在使用我的代码?还是认为文档不在代码本身之外?

4
异步记录-应该怎么做?
在我从事的许多服务中,已经完成了许多日志记录。这些服务是(大多数)使用.NET EventLogger类的WCF服务。 我正在改善这些服务的性能,并且我认为异步记录将有益于性能。 我不知道当多个线程要求登录时会发生什么,是否会造成瓶颈,但是即使不是这样,我仍然认为它不应该干扰正在执行的实际进程。 我的想法是,我应该调用现在调用的同一日志方法,但是在继续实际过程的同时,使用新线程来执行此操作。 关于此的一些问题: 可以吗 有没有缺点? 是否应该以其他方式完成? 也许它是如此之快,甚至不值得付出努力?
11 logging 

4
调用堆栈是从底部开始还是从顶部开始?
堆栈是自底向上堆积的东西。 因此,当调用函数时,调用堆栈会在堆栈上添加新的项目,并且随着每个函数的结束从堆栈中删除项目,直到堆栈为空,然后程序结束。 如果上述正确,那么为什么人们会提到控件将调用堆栈“上移”?控制肯定会向下移动到调用堆栈,直到到达底部为止。
11 functions  stack 

3
每个数据库表的模型?
我正在使用codeigniter,并且发现自己处于类似的情况,在其中我重复了Model方法。我正在为每个控制器创建一个模型。但是我会为每个数据库表创建一个模型是一种好习惯吗?这样,方法不会被编写两次。 而不是每个控制器的模型或共享的几个小模型。 例如,如果我有一个模型方法get_user($ user_id),我可以在users_models.php上写它。 我看到的缺点之一是,我可能不得不调用多个模型,而不仅仅是controllername_models.php。 加载可能无法使用控制器几种方法的多个模型会影响性能和速度吗?解决这个问题的最佳方法是什么? 注意:也有类似的问题,但是它们没有涵盖每个数据库表的Model基础。

1
哪些许可证可免费用于商业用途?
我迷失了大量许可证-GPL,LGPL,Creative Commons,BSD,Apache等,并正在寻找初学者指南。 当使用此类通用许可下的组件时,在不购买商业产品的情况下使用它们会有哪些限制? 例如 我必须重新分发源代码吗? 我必须归功于他们吗? 如果我修改组件怎么办?等等 从http://www.codeproject.com/info/Licenses.aspx可以看出,只有GPL和知识共享组织会强迫您重新分发源代码吗?
11 licensing 


3
术语的具体含义是什么:函数,方法,过程和子例程?
我想知道我们用来对相关代码部分进行分组的术语有哪些具体区别。有时我会看到术语可以互换使用:许多OO语言甚至使用关键字“函数”来定义方法。(为什么?) 如果您想精确一点,那么每个的具体含义是什么?还是只是每种语言选择调用它而已?

2
格式化SQL代码的算法
我需要一个用于内部使用的工具,该工具将格式化SQL代码(SQL Server / MySQL)。 有各种各样的第三方工具和在线网站可以执行此操作,但并非完全符合我的需要。 因此,我想编写适合自己需求的工具。 第一个问题是否存在有关应如何格式化SQL代码的标准或约定?(我尝试过的工具采用不同的格式) 第二个问题,我应该如何完成这项任务?首先应该将sql查询转换为某种数据结构,例如Tree吗?

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.