软件工程

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

6
早期版本号如何适用于新产品?
我目前正在为朋友编写一个小型桌面应用程序,但主要是为了给自己学习。本着受过良好教育和按正确方式做事的精神,我希望拥有此应用程序的版本号。 我的研究提出了这些相关结果 您使用什么“版本命名约定”? 您如何对文件进行版本控制(版本号) 分叉的项目,我的版本号从哪里开始? 但它们都没有解决Alpha,Beta,发行候选版本和&c的编号。版本号低于1.0的约定是什么?我知道他们可以继续一段时间;例如,PuTTY已经存在了至少十年,仍然仅处于beta beta 0.60版本。
11 naming 

9
代码文档优先?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 有没有人尝试过在实际编写代码之前先创建完整的代码文档?我早些时候就在考虑这个问题,因为我认为这将有助于编写具体的接口,并通过让您考虑类的交互方式来确保您的初始设计不会落空。这是一个好主意吗?有人尝试过吗?厄尔

6
我知道如何编程,如何学习编程,但是您如何/在何处学习如何正确制作系统?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 制作系统时,需要考虑很多事情,例如,基于Web的系统,用户登录并彼此交互,创建和编辑内容。现在,我必须考虑安全性,验证(我什至都​​不认为我100%地确定了其中的含义),“确保用户不要互相踩踏”(这是术语?),从而防止了许多错误确保数据库数据不会因意外情况而出现问题?所有这些我不知道如何学习或在哪里学习的东西,有一本书关于这种东西吗?就像我说的那样,编写代码和实际编写正确的代码之间似乎有很大的区别,知道我的意思吗?我觉得我目前的编程工作缺少我所描述的内容,以后我会看到它引起的问题,然后问题就很难解决了,因为存在数据并且人们正在使用它。那么,有人可以将我指向这类学习的书籍或资源或正确的编程子集吗? PS:随时纠正我的标签,我不知道我在说什么。 编辑:我假设我写的一些示例也适用于其他类型的系统,我只是不知道任何其他好的示例,因为我主要从事网络工作。

10
属性的重点是什么?
以下是一些有关属性的参数和我的反参数: 比编写getter和setter方法更容易使用 Getter和setter方法对是代码的味道。编写起来更容易,就像使用Scantron表格并填写所有“ C”来简化数学测试失败一样。对于持久性,仅包含状态的对象不应使用getter / setter,而在持久性时应创建不可变的对象。 对于对象的消费者而言,重要的是它的作用,而不是它的作用方式。它的行为就是它所做的;它的状态是如何执行的。如果您发现自己关心对象的状态(持久性除外,尽管这也会破坏OO),那么您根本就没有在做OOP而失去了它的优势。 它们粗略地向消费者表明了性能 对于任何给定的财产,这可能会在将来发生变化。假设在版本1.0中,访问PropertyX只是返回一个字段。在版本1.5中,如果该字段为null,则PropertyX使用Null Object模式创建一个新的null对象。在2.0版中,该字段正在通过PropertyX中的getter方法进行进一步验证。 随着属性变得越来越复杂,使用属性的性能指标似乎越来越不真实。 他们比公共领域更好 这是真的。但是方法也是如此。 它们代表的是与方法根本不同的对象方面,并且对象的所有使用者都应注意这一点 您确定以上两个陈述都是正确的吗? 他们更容易打字,伙计 当然,打字myObject.Length比打字更容易myObject.Length(),但是不能用一点句法糖来解决吗? 为什么使用方法而不是属性? 没有性能保证。即使方法变得更复杂,API也会保持真实。如果消费者遇到性能问题,并且他们不依赖API的话,他们将需要分析其代码。 较少供消费者考虑。该酒店有塞特犬吗?一种方法肯定不会。 消费者从正确的OOP思维方式进行思考。作为API的使用者,我有兴趣与对象的行为进行交互。当我在API中看到属性时,它看起来很像状态。实际上,如果属性做得太多,它们甚至都不应该是属性,因此,实际上,API对用户来说是处于状态的属性。 API的程序员将更深入地考虑具有返回值的方法,并尽可能避免在此类方法中修改对象的状态。应当尽可能将命令与查询分开。 所以我问你,为什么要使用属性而不是方法?MSDN上的大多数要点本身就是代码的味道,它们既不属于属性也不属于方法。 (这些想法是在考虑了CQS之后想到的。)

4
单元测试要走多远
之前曾多次问过一个问题,但twds mvc开发有特定的倾向。 我一直是一个非常好的男孩,并且一直用相应的单元测试来编码我的所有控制器动作,这非常好(如果有时[读很多]重复的话)。老实说,我实际上已经创建了一个T4模板来编写初始单元测试的大部分裸露的骨骼,然后根据使用情况进行适当的调整。我承认我不太确定如何在包含局部视图的视图中处理测试-但这是另一个问题。 现在,我难以决定的部分就是服务层应该覆盖的深度。原因是我的某些服务方法(无论好坏)实际上执行各种linq查询,然后将谨慎的信息提供给方法中的后续逻辑。我知道我可以(应该??)分解这些方法,以便仅为每个linq语句调用所需的逻辑,然后将其应用到该方法中。但是,在许多情况下,永远不会重复使用linq'functions',因此感觉这会将代码重构的程度过高。 我要问的是,在方法中发生复杂的逻辑时,是否有一种“足够好”的测试方法来简单地声明所需的结果和/或预期的错误,或者是否应该同时模拟和测试每条逻辑线。按照我的观察方式,正确进行测试,然后方法逻辑(逐行)也应具有某种覆盖率。但是(以我的幼稚观点),这可能导致试图保持测试和所实施的方法如此紧密一致(我知道他们应该如此)以至于在测试本身中创建家庭行业的循环永无止境。 我知道我的问题可能会激怒TDD的一些奉献者,他们会认为这是毫无道理的。不在TDD阵营中,这对我来说是“是明智的选择”,因此是一个问题。 顺便说一句-检查了这个想法: http://dotnetslackers.com/articles/aspnet/Built-in-Unit-Test-for-ASP-NET-MVC-3-in-Visual-Studio-2010-Part-1.aspx 现在展望稳步下降:) [编辑] -为单身人士(现在是单身!)的“亲密”选民提供好处。这个问题不是主观的。我正在寻找一个非常集中的主题的共识。我不是想激起负面的热情,我不是要揭露技术的缺陷-我是一个巨大的粉丝。因此,请在投票结束时发表有礼貌的评论,以使我受益,因为如果有歧义或错误信息,这可能有助于我重新构造问题。这个问题可能会使大部分的mvc受益。 谢谢!! 吉姆
11 c#  .net  asp.net-mvc 

5
修改后的策略设计模式
我最近开始研究设计模式,除了一点点不同之外,我正在编写的一件事将完全适合于战略模式。 本质上,我的某些(但不是全部)算法需要一个或两个额外的参数传递给它们。 所以我要么需要 当我调用他们的calculate方法时,给他们传递一个额外的参数 要么 将它们存储为ConcreteAlgorithm类中的变量,并能够在调用算法之前对其进行更新。 有满足这种需求的设计模式吗?在坚持策略模式的同时如何实现? 我考虑过将客户端对象传递给所有算法,并将变量存储在其中,然后仅在特定算法需要时才使用该对象。但是,我认为这既笨拙,又打败了战略模式的意义。 为了清楚起见,我正在用Java实现,因此没有太多的可选参数(可以很好地解决此问题)。


6
如何最大程度地利用位置独立性……我个人作为开发人员工作的第一要点[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 8年前关闭。 对我来说,成为开发人员的最大好处是,有了出色的简历,您将随时随地找到一份新工作。 因此,我想问一下这里是否有人在旅行时工作经验。或者说,每六个月从一个大城市到另一个大城市来回工作。 例如,我一直在研究如何到达巴西。但是看来在巴西作为雇员工作是没有选择的,因为获得适当的签证和许可需要花费大量的时间/金钱/精力。因此,唯一可行的解​​决方案是自由职业者和公道旅行,而无论您身在何处都能完成工作。 我敢打赌,那里有很多IT专家,他们确切知道我在说什么。 我期待着有趣的想法和故事。 编辑赏金: 我对一般的智慧没有太多的兴趣,而是对个人经验的具体阐述感兴趣,这些经验来自那些可以与我的问题相关并且确实可以分享实际经验的人们。我不是在征求第二学位性质的意见和陈述。 编辑为EVERYBODY(具体问题): 您旅行时在哪里工作?(办公室池?图书馆?咖啡馆?) 你在哪里睡觉?我猜酒店有点贵。(旅馆?沙发冲浪?) 编辑 我接受安迪的回答是“该”答案,主要是因为它浪漫而积极。虽然当然没有那个问题的答案。我希望进行一次有趣的讨论,并获得11个投票和5个书签,我似乎并不是唯一对某些投入感兴趣的人。 因此,我希望更多的人加入进来并分享他们的经验。

7
哪些信息绝对不能出现在日志中?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我将要编写公司准则,以指导日志中绝不能出现的内容(应用程序的痕迹)。实际上,一些开发人员试图尽可能多地包含尽可能多的信息,这使得存储这些日志很冒险,并且提交它们非常危险,尤其是当客户不知道该信息是否存储时,因为她从不关心此信息。切勿阅读文档和/或警告消息。 例如,在处理文件时,一些开发人员很想跟踪文件名。例如,在将文件名附加到目录之前,如果我们跟踪所有错误内容,则很容易注意到例如附加名太长,并且代码中的错误是忘记检查代码的长度。串联字符串。这很有用,但这是敏感数据,绝不能出现在log中。 以相同的方式: 密码, IP地址和网络信息(MAC地址,主机名等)¹, 数据库访问 来自用户的直接输入和存储的业务数据 绝对不能出现。 那么,必须从日志中清除其他哪些类型的信息?有没有已经写好的指南可以使用? ¹显然,我不是在谈论IIS或Apache日志。我所说的是收集信息的唯一目的是调试应用程序本身,而不是跟踪不可信实体的活动。 编辑:谢谢您的回答和评论。由于我的问题不太精确,因此我将尝试回答评论中提出的问题: 我在处理日志吗? 应用程序的日志可能存储在内存中,这意味着可以将其存储在本地主机的硬盘中,数据库中,也可以存储在Windows事件中。在每种情况下,都担心这些来源可能不够安全。例如,当客户运行一个应用程序并且该应用程序将日志存储在temp目录的纯文本文件中时,任何对PC有物理访问权限的人都可以读取这些日志。 该应用程序的日志也可以通过互联网发送。例如,如果客户对应用程序有疑问,我们可以要求她以全跟踪模式运行该应用程序并向我们发送日志文件。此外,某些应用程序可能会自动将崩溃报告发送给我们(即使存在有关敏感数据的警告,在大多数情况下,客户也不会阅读这些警告)。 我是在谈论特定领域吗? 否。我仅在一般业务应用程序上工作,因此唯一敏感的数据是业务数据。没有任何与健康或特定法规涵盖的其他领域相关的内容。但是,谢谢您谈论这个问题,我可能应该看看这些领域,以获取一些有关我可以在指南中包括的内容的线索。 加密数据难道不是很容易吗? 不会。这会使每个应用程序变得更加困难,特别是如果我们要使用C#诊断程序和TraceSource。它还需要管理授权,这不是最简单的想法。最后,如果我们谈论的是客户提交给我们的日志,则我们必须能够读取日志,但不能访问敏感数据。因此,从技术上讲,从不将敏感信息完全不包含在日志中,并且永远不在乎这些日志的存储方式和位置会更容易。

5
命名参数(参数)作为可读性的帮助
很久以前,我在ADA中编写了很多程序,调用函数时为参数命名是很正常的-SomeObject.DoSomething(SomeParameterName => someValue); 既然C#支持命名参数,我正在考虑在参数的含义可能不太明显的情况下恢复这种习惯。 您可能会争辩说参数的含义应该总是很明显,但是如果您具有布尔参数,并且调用者传递的是“ true”或“ false”,则用名称限定值可以使调用站点更具可读性。 contentFetcher.DownloadNote(note,manual:true); 我想我可以创建枚举而不是使用true或false(在这种情况下为Manual,Automatic)。 您如何偶尔使用命名参数使代码更易于阅读?

8
程序员推广自己的库是否合乎道德?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 相当最近,我开始维护自己的开源JavaScript库。我创建它是为了解决一个非常特定的需求,但是相当定期地看到可以使用我的库解决(全部/部分)的问题。 我发布我的答案,并确保始终包含我维护的库。 对于开放源代码项目,我觉得这可能没什么大不了的,但是您在哪里划清界限?(例如:商业产品)程序员推广自己的图书馆是否符合道德规范?什么时候不?

8
您将哪种在线/托管的错误跟踪工具用于自己的工作和项目?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 这些年来,我已经积累了很多辅助项目,随着时间的推移,我会逐渐改进它们。每当我回到原处时,我都会花一些时间阅读文本文件,这些文件包括设计,最新的错误,下一步的功能等,我应该进行研究-这并不漂亮。 我希望改用更正式的方式。理想情况下,这将是一个功能全面的在线错误跟踪系统,该系统可以为我自己的项目提供免费或几乎免费的错误跟踪。而且,理想情况下,这可以以私下方式进行-我真的不希望每个人都看到我的副项目以及我对其中的一些项目造成的混乱。

8
为什么在MS网站上这么难找到东西?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我一直在想这个问题,我很乐意对此做一个解释。是我还是您也有同样的感觉,很难在MS网站上找到任何东西。例如,每次我需要下载.NET Framework时,都必须向Google下载。您永远不知道可以下载什么,没有下载类别。您只是留在搜索字段中。您永远不会知道您是否下载了该文件的最新版本。可悲的是,您必须依靠其竞争对手Google在其网站上找到任何东西。我知道他们是一家大公司。 但是,采用一种有组织的方式发布信息真的难吗?

5
一流的功能
我本周末开始认真看一下Lisp(这意味着我只是在学习Lisp,而不是回到C#中的项目),必须说我喜欢它。我曾涉猎其他功能语言(F#,Haskell,Erlang),但没有感受到Lisp给我的吸引力。 现在,当我继续学习Lisp时,我开始怀疑为什么非功能语言不支持一流的功能。我知道诸如C#之类的语言可以对委托执行类似的操作,并且在某种程度上您可以使用指向C / C ++中的函数的指针,但这是否有理由为什么它永远不会成为这些语言的功能?使函数成为一流有缺点吗?对我来说,它非常有用,所以我迷失了为什么更多的语言(功能范式之外)没有实现它。 [编辑]我很感谢到目前为止的回答。由于已经向我证明许多语言现在都支持一流的功能,因此我将问题重新表述为:为什么语言要花费这么长时间来实现它们?[/编辑]

10
如何区分普通软件和非普通软件?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 那么真正使程序变得微不足道的是什么呢? 在编程讨论中经常使用“除非其琐碎的软件”。从某种意义上说,我觉得它很模糊,因为我无法真正确定“某物是必不可少的,因为它的非平凡软件”或“它是非平凡的软件,因为某物变得非常必不可少”。 例如,很多时候关于单元测试的问题,我听说“除非您需要进行单元测试这很琐碎”。
11 complexity 

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.