软件工程

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

8
为什么功能语言语法不更接近人类语言?
我对函数式编程感兴趣,因此决定与Haskell面对面。我的头很痛...但是我最终会得到...虽然我有一个好奇心,为什么语法如此神秘(缺少另一个词)? 是否有一个原因为什么它是不是更有表现力,更接近人类语言? 我知道FP擅长对数学概念进行建模,并且借用了一些简洁的表达方式,但它仍然不是数学……这是一种语言。


4
从域访问存储库
假设我们有一个任务记录系统,当记录一个任务时,用户指定一个类别,并且该任务默认为“未完成”状态。在这种情况下,假定类别和状态必须作为实体实施。通常我会这样做: 应用层: public class TaskService { //... public void Add(Guid categoryId, string description) { var category = _categoryRepository.GetById(categoryId); var status = _statusRepository.GetById(Constants.Status.OutstandingId); var task = Task.Create(category, status, description); _taskRepository.Save(task); } } 实体: public class Task { //... public static void Create(Category category, Status status, string description) { return new Task …

4
为什么HTML / JavaScript压缩有益
当HTTP协议已经支持gzip数据压缩时,为什么HTML / JavaScript压缩有益呢? 我认识到Javascript / HTML缩小可以消除不必要的空格,并可能将变量重命名为几个字母,从而显着减小Javascript / HTML文件的大小,但是当重复次数很多时,LZW算法的效果不是特别好字符(例如很多空白?) 我意识到某些Javascript缩小工具所做的不仅仅是缩小尺寸。例如,谷歌的闭包编译器还试图通过内联函数和进行其他分析来提高代码性能。但是Javascript压缩的主要目的通常是减小文件大小。 我还意识到,除了性能之外,还有其他原因可能需要减少,例如代码混淆。但是同样,通常不强调该原因,而不是强调性能提高和文件大小减小。例如,Closure Compiler并不是宣传为混淆工具,而是宣传为代码大小缩小器和下载速度增强器。 那么,当您已经通过gzip压缩显着减小文件大小时,实际上从Javascript / HTML 压缩中获得了多少性能?
14 javascript  html  http  minify 


4
对在冲刺期间修改冲刺积压感到困惑
最近,我已经阅读了很多有关Scrum的文章,并且发现在冲刺期间更改冲刺积压是否可行,这在我看来似乎是相互矛盾的信息。在对Scrum的维基百科的文章说,这是不正常,以及各种其他文章说的这一点。我的软件开发教授也在scrum概述中讲了同样的事情。 但是,我从Trenches中阅读了Scrum和XP,并介绍了任务板上计划外项目的一部分。因此,我查阅了《Scrum指南》,它说在sprint期间“未进行会影响Sprint目标的任何更改”,并且在讨论Sprint目标时“如果工作结果与开发团队的预期不同,然后他们与产品负责人合作,在Sprint中协商Sprint Backlog的范围。” 在Sprint待办事项的讨论中,它继续说: Sprint Backlog是一项计划,其细节足够详细,可以在Daily Scrum中了解进度的变化。开发团队会在整个Sprint中修改Sprint Backlog,并且在Sprint期间会出现Sprint Backlog。在开发团队仔细研究计划并了解有关实现Sprint目标所需工作的更多信息时,就会出现这种情况。 由于需要进行新工作,因此开发团队将其添加到Sprint Backlog中。随着工作的完成或完成,估计的剩余工作将更新。当计划中的要素被视为不必要时,将其删除。只有开发团队可以在Sprint期间更改其Sprint Backlog。Sprint待办事项列表是开发团队计划在Sprint期间完成的工作的高度可见的实时图片,它完全属于开发团队。 因此,在这一点上我完全感到困惑。考虑一下,采用第二种方法对我来说更有意义。在我看来,待办事项中的各个特定项目不是最重要的,而是冲刺目标,因此,不更改冲刺目标,但能够更改待办事项很有意义。例如,如果产品负责人和团队都认为他们在同一个故事页面上,但是随着sprint的进行他们发现存在误解,则似乎有必要相应地更改构成该故事的任务。或者,如果有一些故事或任务被遗忘了,但是达到冲刺目标是必需的,我认为最好在冲刺期间将故事或任务添加到待办事项中。 但是,很多人似乎非常坚决认为对sprint待办事项的任何更改都不可行。我是否会以某种方式误解该职位?那些人对冲刺积压的定义是否有所不同?我对sprint待办事项的理解是,它既包括故事,也包括被分解成的任务。 无论如何,我将非常感谢您对此问题的投入。我试图找出理想的Scrum方法在冲刺期间更改sprint积压是什么,以及成功使用scrum进行开发的人是否允许在冲刺期间更改sprint积压。

6
如何从有限状态机故障中恢复?
我的问题似乎很科学,但我认为这是一个普遍的问题,经验丰富的开发人员和程序员希望能提供一些建议来避免我在标题中提到的问题。顺便说一句,我描述的波纹管是我要在我的iOS项目中主动解决的一个实际问题,我想不惜一切代价避免它。 通过有限状态机,我的意思是:>我有一个带有几个按钮的UI,与该UI相关的几个会话状态以及该UI表示的内容,我有一些数据,这些数据的值部分显示在UI中,我接收并处理了一些外部触发器(由传感器的回调表示)。我制作了状态图,以更好地映射在该UI和应用程序中理想和可实现的相关方案。随着我慢慢实现代码,应用程序开始表现得越来越像它应该的样子。但是,我不是很自信。我的怀疑来自观察自己的想法和实施过程。我确信我已经涵盖了所有内容,但是足以在UI中进行一些粗暴的测试,并且我很快意识到在行为方面仍然存在差距。然而,由于每个组件都依赖于其他组件的输入并根据其他组件的行为运行,因此来自用户或某些外部源的某些输入会触发一系列事件,状态更改等。我有几个组件,每个组件的行为都像这样:输入时收到触发器->触发器,并分析其发送者->基于分析输出一些信息(消息,状态更改) 问题是,这不是完全独立的,并且我的组件(数据库项,会话状态,某些按钮的状态)...可以在事件链范围之外进行更改,影响,删除或以其他方式修改。理想的情况。(电话崩溃,电池突然没电了,这会导致系统无效),这可能会导致系统无法恢复。我在苹果商店上的许多竞争对手应用程序中都看到了这种情况(人们没有意识到这是问题所在),客户编写了这样的内容:“我添加了三个文档,到那儿走了之后,我无法打开它们,即使看到他们。” 或“我每天都录制视频,但是录制了太多日志的视频之后,我无法在其上打开字幕..,并且用于字幕的按钮没有 这些只是简短的示例,客户通常会对其进行更详细的描述。.根据它们中描述的描述和行为,我认为特定应用具有FSM故障。 因此,最终的问题是如何避免这种情况,以及如何保护系统避免自身阻塞? 编辑>我是在电话中一个viewcontroller视图的上下文中谈论,我的意思是应用程序的一部分。我了解MVC模式,我具有用于不同功能的单独模块。.我描述的所有内容都与UI上的一个画布相关。


4
分配给字符串对象时,为什么要使用string.Empty而不是“”
我一直在代码上运行StyleCop,建议SA1122之一是在为值分配空字符串时使用string.Empty而不是“”。 我的问题是为什么这被认为是最佳做法。或者,这被认为是最佳实践吗?我假设这两个语句之间没有编译器差异,所以我只能认为这是易读性吗? 所以问答 乔恩·斯凯特(Jon Skeet)回答问题
14 c# 

1
与推和拉开发模型有什么区别?
我正在阅读《极限编程说明》第二版,在第11章“约束理论”中,作者讨论了过时和过时的“推”开发模型以及XP方式(“拉”开发模型)。它看起来像一个非常重要的概念,但是只用了一个很小的段落和两个图像,它们只是“瀑布”和迭代过程的说明,除了图像标题外,这些模型没有其他具体说明。我进行了搜索,在本书的其余部分中对此没有任何进一步的说明。我也无法在Internet上找到任何进一步的解释或讨论。 如果关于它们的唯一区别是一个是“瀑布”而另一个是迭代的,那么它们为什么推,为什么拉? 有人知道这两者之间的真正区别是什么,并举一些很好的例子吗?

5
如何通过工具支持确保.NET中的单一编码标准
基本情况可能是每个人都熟悉的。您已经在团队中就某些编码标准达成了共识,现在是时候确保每个人都遵循它们了。 有些通过繁重的配对编程来完成,有些则维护编码标准列表并进行手动检查。其他人甚至使用Visual Studio中的静态代码分析工具来确保实施了编码标准。 您有什么最佳实践来确保编码标准?您使用哪些工具-每个开发人员都应该知道一些基本工具吗?您如何将代码的标准化集成到开发工具中?
14 c#  .net  coding-style 

7
在应用程序的CRUD层上创建单元测试,如何使测试独立?
因此,我试图使我的单元测试尽可能地按书进行,但是当我测试一些简单的添加/删除方法时,这会很麻烦。 对于add方法,我基本上必须创建一个虚拟对象并将其添加,然后在测试成功之后,我必须删除该虚拟对象。 对于删除测试,我显然必须创建一个虚拟对象,以便可以将其删除。 如您所见,如果一项测试失败,那么另一项测试也会失败,因为它们都是必需的。 与需要编写“取消订单”测试的系统相同……那么首先需要取消一些虚拟订单,这是否违反单元测试的准则? 这样的案件应该如何处理?

2
如何确定代码审查过程的有效性?
我们已经在组织内部引入了代码审查流程,并且看起来运行良好。但是,我希望能够随着时间的推移来衡量该过程的有效性,即我们是不是因为代码干净而没有发现bug,还是人们只是没有发现bug? 当前,我们没有有效的全自动测试过程。我们主要采用手动测试,因此我们不能依靠现阶段发现的缺陷来确保代码审查过程正常进行。 是否有人之前曾遇到过此问题,或对衡量代码审查的效果如何有任何想法?

4
基准数据库
我看到许多关于数据库'x'的性能的讨论,或者从'x'到'y'的改进提高了我们网站的性能。 我尚未看到适用于不同类型数据库的适当基准测试。 是否有可能编写一个有意义的基准,该基准可用于多种数据库类型,例如关系型,面向文档等。 您将如何设计这样的基准?

5
我真的需要免责声明免费软件吗?
如果我在网站上发布了一些可以免费下载和使用的软件,我是否仍需要免责声明?我的意思是,我什至不卖任何东西,没有合同,那么为什么要隐含保修? (这也让我想知道为什么在MIT许可证之类的东西上会有免责声明。) 编辑:我不是美国公民,我正在寻找尽可能通用和尽可能具体的答案。
14 licensing  legal 

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.