软件工程

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

9
TDD:我做对了吗?
我是一名新程序员(只学习了大约一年),为了达到更好的目标,我最近才了解TDD。我想养成使用它的习惯,因为它似乎很有帮助。我想检查并确保正确使用它。 我在做什么: 想一想我需要的一种新方法。 为该方法创建一个测试。 失败测试。 写方法。 通过测试。 重构方法。 重复。 我正在为我编写的每种方法执行此操作,是否有一些我不应该使用的方法?后来,我通常会想到一种以不同的方式或情况测试我现有方法的方法。我应该进行我想到的这些新测试,还是由于每种方法已经具有自己的测试,我不应该打扰吗?我可以对我的代码进行过度测试,我想这是我主要的担忧。 编辑 另外,我只是想知道这件事。当做类似GUI的事情时,在那种情况下TDD是必要的吗?就个人而言,我想不出该如何编写测试。
14 tdd 

2
实现图形数据结构的最节省空间的方法是什么?
我通常将图实现为双向链接列表,但是根据我的经验,这在空间上效率很低,因为我需要k个邻居的k个指针/引用,因此如果我的数学正确,则对于无向图,列表中将有〜2k个邻居链接。有节省空间的更好方法吗?我知道,如果有向图是定向的,则可以将某些链接设为单数形式,但是有没有办法对此做得更好?

3
如何在软件开发环境中应用Six Sigma?
我是Java开发人员,但被要求学习有关应用六西格码(Six Sigma)的目的,以提高我们组织的利润。我已经读到六西格码可以在所有环境中使用,但是我对将其应用于软件开发的细微差别感兴趣。 六西格码的哪些概念可以应用于软件开发环境,我如何有效地应用它们? 我的理解是,六西格码专注于: 识别并消除缺陷的根本原因 最小化应用制造或业务流程中的差异 在我看来,这些概念可以应用于软件开发,但是可以有效地应用于软件开发生命周期(SDLC)吗?

3
何时使用typedef?
我对于是否以及何时应该在C ++中使用typedef感到有些困惑。我觉得这是可读性和清晰度之间的平衡。 这是一个没有任何typedef的代码示例: int sum(std::vector<int>::const_iterator first, std::vector<int>::const_iterator last) { static std::map<std::tuple<std::vector<int>::const_iterator, std::vector<int>::const_iterator>, int> lookup_table; std::map<std::tuple<std::vector<int>::const_iterator, std::vector<int>::const_iterator>, int>::iterator lookup_it = lookup_table.find(lookup_key); if (lookup_it != lookup_table.end()) return lookup_it->second; ... } IMO很丑。因此,我将在函数内添加一些typedef以使其看起来更好: int sum(std::vector<int>::const_iterator first, std::vector<int>::const_iterator last) { typedef std::tuple<std::vector<int>::const_iterator, std::vector<int>::const_iterator> Lookup_key; typedef std::map<Lookup_key, int> Lookup_table; static Lookup_table lookup_table; Lookup_table::iterator lookup_it = lookup_table.find(lookup_key); …
14 c++  coding-style 

7
防御样板?
对我来说,样板代码显然是不好的。但是我遇到了一个开发人员,他在减少样板方面表现出了抵制。我意识到,随着时间的流逝,我对这种厌恶情绪还没有形成,经过深思熟虑的论点。 为了使我能够形成一个令人信服的理由,即主张减少样板,有哪些反对意见?换句话说,支持样板的论点是什么(如果有)? (我的意思是我通常认为是样板程序,但是一个很好的例子是Java中的getter和setter方法。)


3
安全的iPhone应用程序↔服务器通信
在我的iOS应用与其服务器组件之间实现私人通信的最佳方法是什么?将一个不变的“秘密密钥”烘焙到应用程序源中是否足够,还是我需要以某种方式动态设置此类“握手”密钥的生成? 服务器本身无法访问任何敏感数据,因此,即使用户访问了一些专用端点,也无法将它们带到任何地方,但我只想对公众隐藏这些端点。基本上,我想忽略所有命中特定路由的请求,除非它们来自我的iOS应用。 如果重要的话,服务器组件可在RoR上运行。



7
对于询问必须使用两种等效技术中的哪一种的客户,该如何回答?
作为一名自由职业者,我的客户经常问我,他们必须在相似的元素之间进行选择,而这两个元素都不比另一个要好。例子: “我需要电子商务网站使用PHP还是ASP.NET?” “我需要在Cloud中托管此普通Web服务还是使用普通托管服务?” “哪个对我的新网站更好:MySQL或Oracle?” 等等 根据精确的指标和研究,最多可能有1%的情况与选择相关,并且确实有客观的理由选择一种选择。在其他所有情况下,都没有关系。这完全是完全不相关的,或者是因为没有任何影响¹,或者是因为这些影响太小而无法考虑²,或者最终是因为无法预测这些影响³。 如果您知道一件事而不是另一件事,那么对这些问题的答案很简单: “您可以使用C#或Java编写应用程序,这两种情况在您的情况下可能是等效的。请注意,我是C#开发人员,因此,如果您选择Java,我将无法处理您的项目,因此您需要寻找另一个自由职业者。” 当您同时了解这两种技术时,您将无法回答。 在这种情况下,如何向客户说明他所提出的问题受到激烈的争论,并且对他的项目没有实际影响? 换句话说,如何解释您出于与人力资源相关的原因而选择使用一种技术而不是等效的技术,而不会给人以专业或不在乎项目的印象? ¹举例:从性能角度看,MySQL比Oracle更好(更差吗?),因为个人网站每天访问两个人,哦,让我们乐观一点? ²示例:对于一个给定的项目,我被问到Windows Azure托管是否比在著名的ASP.NET托管提供商上托管同一应用程序便宜。费用显示完全相同。 ³示例:您的客户对将来的应用程序有一个想法(这个想法本身非常含糊)。没有商业计划,没有要求,什么都没有。只是一个主意。系统会询问您Java是否比该应用程序的C#更好。你怎么回答

2
Code Complete的哪些部分没有经受住时间的考验?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我在看书架上的Code Complete,心想:“在“神话般的月”之外,这可能是少数经受时间考验的大众市场软件工程书籍之一。因此,我正在考虑重新阅读它。 我很好奇-最近有没有其他人再次看过它?我是这样,您看到他有什么不对吗? 这不是攻击,也不是要求书评-我对多年来改变了哪些观念更感兴趣。 而且,请不要发表任何评论,“ Demarco / Spewak / Zachman经受了时间的考验……”​​我对Code Complete尤其感兴趣,因为它涵盖了广泛的领域,并且在该领域具有广泛的影响力。
14 coding  resources 

8
MVC是否仅适用于Web
每当我与开发人员谈论Model View Controller(MVC)时,它们几乎是瞬间的,他们说您向URL发出请求,服务器将建立一个实体(MODEL),并为您提供该模型的可视化表示。 那么这是否意味着MVC 仅适用于Web,或者我是否正在和只是使用MVC编写Web应用程序的开发人员见面? 桌面样式应用程序上有MVC的用法吗? 我是范式的新手,我想知道MVC的任何超集

7
操作员比关键字或函数更易读吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 这有点主观,但是我希望能更清楚地了解哪些因素使操作员易于使用,比较钝和困难。我最近一直在考虑语言设计,而我经常回想的一个问题是何时使用该语言对该键进行一些关键操作,以及何时使用关键字或函数。 Haskell为此而臭名昭著,因为自定义运算符易于创建,并且经常会打包新的数据类型,并附带多个运算符以供使用。例如,Parsec库带有大量运算符,用于将解析器组合在一起,并带有类似的宝石>.,.> 我什至不记得它们现在的含义,但是我确实记得一旦记住了它们,它们将非常易于使用他们的意思是。这样的函数调用会leftCompose(parser1, parser2)更好吗?当然更冗长,但在某些方面更加清晰。 类似C的语言中的运算符重载是一个类似的问题,但又与另一个问题相混淆,即重载了熟悉的运算符的含义,例如+具有异常的新含义。 在任何新语言中,这似乎都是一个棘手的问题。例如,在F#中,强制转换使用数学派生的类型转换运算符,而不是C#样式强制转换语法或冗长的VB样式。C#:(int32) xVB:CType(x, int32)F#:x :> int32 从理论上讲,一种新语言可以为大多数内置功能提供运算符。取而代之的def或dec或var变量声明,为什么不! name和@ name或类似的东西。它肯定会缩短声明后再进行绑定:@x := 5代替declare x = 5或let x = 5 大多数代码将需要大量变量定义,那么为什么不呢? 操作员什么时候清楚和有用,什么时候不清楚?

4
如何为ATM或电视等机器构建软件?
作为一个初学者,我只使用基于计算机的应用程序进行编程,但是自从我开始编程以来,我就经常遇到一个问题,我无法正确回答。 机器不是自己行动,这是程序员的工作,他告诉机器人做什么和何时做,但是我的好奇心在于计算机。我将在本文中以ATM软件为例,但请记住,还有很多其他名称,例如洗衣机显示器,电视,手机等。 这些机器的软件究竟是如何构建的?我想这与基于计算机的编程不可能完全相同。他们使用哪种语言来使这些工作正常工作,以及如何完成工作?有专门从事这种编程的程序员吗?使这些机器变成现实的过程是什么?

6
Waterfall软件开发方法仍然可行吗?
根据我的经验,似乎瀑布模型已被证明过于僵化且对需求变化不敏感,因此在现代软件开发领域中不被视为可行的方法。更加敏捷,迭代的方法的发展和经过证明的往绩似乎表明,没有理由为什么任何人都应该遵循从项目开始到产品交付几乎没有改变的刚性过程。 在时间,成本和质量方面,瀑布式开发方法对于提供软件系统是否仍然可行?

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.